1樓:李修靈
看標題以為你要求微分方程吶,結果是畫dr/dr vs. r
% 畫出圖中的公式
% 定義微分方程函式
drdr = @(r) 0.89 ./ r .* exp(-(log(r) + 0.84).^2 / 0.086);
% 在(0, 10]上畫圖
r = linspace(0.01, 3, 500);
dr = drdr(r);
figure(10);
plot(r, dr, '^b', 'marke***cecolor', 'blue', 'displayname', 'dr/dr vs r');
xlabel('r', 'fontsize', 16);
ylabel('dr/dr', 'fontsize', 16);
legend('show');
作圖的結果是
這是一個一階線性微分方程, 可以用龍格庫塔求解. 首先用一個.m檔案
定義圖中的微分方程. 然後再用matlab的ode45函式求解這個方程.
舉個例子, 建立一個solvef**.m的檔案如下
% 呼叫matlab的`ode45`函式實現求解. 具體說明在
% matlab命令列中輸入`doc ode45`查詢.
% 簡單來說, 需要兩步. 1) 微分方程定義; 2) ode45引數設定和呼叫.
% 具體如下.
% 設定ode45引數, 並呼叫求解微分方程`dr = odefunc(r, r)`. 該方程定義
% 見後一個函式.
function solution = solvef**(initial_value)
% initial_value = [r0, r0];
r0 = initial_value(1);
r0 = initial_value(2);
% 由於提供的初值[r0 r0] = [0.43 0.5]; 或 [0.55 0.9]. 如果求解區間從(0, 10]
% 那麼需要分成(0 r], [r, 10]兩部分求解.
% [r0, 10]上求解
sol1 = ode45(@odefunc, [r0 10], r0);
% (0, r0]上求解
sol2 = ode45(@odefunc, [r0 0.01], r0); % log(r)在0處inf, 所以用0.01代替.
% sol結構體是微分方程的解, 包含`r` - 自變數, `r` - 要求解的函式r(r)
% 的數值. 其它r對應的r值, 可以用 `r = deval(sol, r);`計算. 其結果與
% sol中儲存的r, r(r)相對精度一致.
solution.sol1 = sol1;
solution.sol2 = sol2;
end% 定義微分方程. 用dr表示dr/dr. 一階線性微分方程的一般形式為dr = f(r, r)
% 儘管題目微分方程右邊未出現r, 此變數也不可省略.
function dr = odefunc(r, r)
dr = 0.89 ./ r .* exp(-(log(r) + 0.84).^2 / 0.086);
end這個函式的作用就是求解最後幾行定義的 dr/dr = f(r, r)這個微分方程. 解存在sol結構體中.(這個例子是在sol1和sol2裡面)
怎麼用這個sol解具體算每個r處的r呢, 需要用到deval. 可以再建立一個main_0.m檔案, 內容為
% 呼叫函式sovlef**. 求解微分方程
% 初值 r= 0.43, r = 0.5
s1 = solvef**( [0.43 0.5] );
% 繪圖
r1 = linspace(0.01, 0.43, 50);
r1 = deval(s1.sol2, r1);
r2 = linspace(0.43, 2, 50);
r2 = deval(s1.sol1, r2);
r = [r1, r2]; % 在 0.01 - 2上的解
r = [r1, r2]; % 在 0.01 - 2上的解
figure(1); hold on;
plot(r, r, 'b-', 'linewidth',2, 'displayname', 'r=0.43, r=0.5');
% 初值 r=0.55, r = 0.9
s2 = solvef**( [0.55 0.9] );
% 繪圖
r1 = linspace(0.01, 0.55, 50);
r1 = deval(s2.sol2, r1);
r2 = linspace(0.55, 2, 50);
r2 = deval(s2.sol1, r2);
r = [r1, r2]; % 在 0.01 - 2上的解
r = [r1, r2]; % 在 0.01 - 2上的解
figure(1); hold on;
plot(r, r, 'r-', 'linewidth',2, 'displayname', 'r=0.55, r=0.9');
legend('show')
xlabel('r', 'fontsize', 16);
ylabel('\int_0^r dr', 'fontsize', 16)
那麼這個微分方程在不同的初值條件下的解, 就可以畫成下圖
2樓:華凡劍春竹
如何用matlab求解微分方程並畫圖,可以先用dsolve()或ode()求出其微分方程(組)的解析解或數值解,然後用plot()繪製其圖形。
例如:解微分方程 y'=y-2t/y,y(0)=1,0 3、當然嘍,使用dsolve()或ode()求解要根據題意去分析,來決定用那個函式。一般來說,用ode45求解微分方程(組)的數值解用點比較多。 3樓:莫悟軒轅良俊 syms tv=dsolve('dv=(190.708-90.64*v^2)/47.27','v(0)=0','t'); t=0:0.00001:0.002; v=eval(v); plot(t,v) 使用這樣的方法求解,但從結果看好像你的方程有問題! 齊次特徵方程 r 2 r 0 r 0,r 1 所以齊次通解是y c1 c2e x 非齊次分兩部分 y y x 2和y y cosx設第一部分特解是y1 ax 4 bx 3 cx 2 dx ey 4ax 3 3bx 2 2cx d y 12x 2 6bx 2c 代入得12x 2 6bx 2c 4ax ... 哇哇,才初一就知道有微分方程呀,厲害,可惜今天才看到。現在高一了吧,同齡人耶!我現在也高一,不知現在怎麼樣,我分享下我的經歷吧 初二下學期才接觸微積分,找了本小書,很老很老,叫 中學生手冊 上面只有幾頁的微積分初步,沒有微分方程,但很有用,當然不是最好的,我當時找不到別的書,但他講的非常省略,我看了... 首先,把原式化簡一下,等式兩邊先同時除以dx,再同時除以x,就可以得到 y x 1 y x dy dx 0的等式 0 設u y x 1 推出dy dx xdu dx u 2 將 1 2 同時帶入 0 式 u 1 u xdu dx u 0 化簡以後可以得到 x 1 u du dx u 2 2u 繼續化...求解微分方程yy cosx,求解微分方程y y cosx
求解微分方程,解微分方程?
求微分方程通解,求詳細過程,求解微分方程通解的詳細過程