Matlab求解微分方程並畫圖Matlab求解微分方程並畫圖

2021-03-08 09:19:43 字數 3141 閱讀 5384

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)

使用這樣的方法求解,但從結果看好像你的方程有問題!

求解微分方程yy cosx,求解微分方程y y cosx

齊次特徵方程 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 繼續化...