用matlab解微分方程數值解並作圖

2021-03-19 18:34:11 字數 4008 閱讀 3167

1樓:高等數學答案

先定義個函

bai數:

function f=fffff(t,y)f=[y(2);cos(y(1))];

然後du

[t,y]=ode45(@fffff,[0,2],[0,0]);

plot(t,y(:,1),'r',t,y(:,2),'b')即可。我給你設了初值zhi【0,0】,你可以自己定dao義。紅線版為y,藍線為y'.

你先把權上面的函式fffff寫成m檔案,儲存到你的matlab工作目錄裡,然後再在命令視窗輸入:

[t,y]=ode45(@fffff,[0,2],[0,0]);

plot(t,y(:,1),'r',t,y(:,2),'b')我作過,能做出影象的。

matlab求解微分方程並畫圖 20

2樓:李修靈

看標題以為你要求微分方程吶,結果是畫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)

那麼這個微分方程在不同的初值條件下的解, 就可以畫成下圖

3樓:華凡劍春竹

如何用matlab求解微分方程並畫圖,可以先用dsolve()或ode()求出其微分方程(組)的解析解或數值解,然後用plot()繪製其圖形。

例如:解微分方程 y'=y-2t/y,y(0)=1,0

3、當然嘍,使用dsolve()或ode()求解要根據題意去分析,來決定用那個函式。一般來說,用ode45求解微分方程(組)的數值解用點比較多。

4樓:莫悟軒轅良俊

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)

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

用matlab求一個微分方程的數值解,並畫出解曲線

5樓:匿名使用者

syms x y t;

s=dsolve('dx=-10*x+10*y','dy=28*x-y-x*z','dz=-8/3*z+x*y','x(0)=0','y(0)=0','z(0)=1','t');

x=s.x

y=s.y

z=s.z

hold on;

ezplot(x);

ezplot(y);

ezplot(z);

%祝樓主學有所

成 嘿嘿

matlab解微分方程數值解並畫圖,求**,謝謝y

6樓:匿名使用者

這個我會,數值解可用ode45求解然後畫圖

關於全微分方程,關於全微分方程的解

不可能對,您的理解有問題,沒明白全微分方程的實質。全微分方程實際上是方程可以寫成d f x,y 0的形式,然後對兩邊同時取積分,解得f x,y c為原方程的解,例如2xdx 3y 2 方程可以化為d x 2 d y 3 0等價於d x 2 y 3 0直接積分得x 2 y 3 c,因此原方程也可以直接...

2道高數解微分方程題求解,在高數解微分方程的時候,全微分方程的求解公式是怎麼來的?望達人告知一下推導過程!感激不盡!

1.先解齊線性方程 xy 1 x y 0的通解,得到 y ce x lnx c為 任意常數 其次利用常數變易法求非齊線性方程 xy 1 x y e 2x 的通解,把c看成是 c x 微分 後將其代入原方程得到xe x lnx c x e 2x 所以c x e x c1,c1為任意常數 從而原方程的通...

關於解微分方程的一道問題,關於微分方程解的結構的一道題目疑問

解法中有問題,是需要帶絕對值符號的,只是在最後一步可以把絕對值符號去掉。還有我真的很想吐槽糾結是c還是lnc的事,請你搞清楚,不定積分中c是任意常數,既然是個任意常數,我一定要用字母c來表示嗎?lnc不也是任意常數?我甚至可以用abdefg,你要搞清楚任意常數的定義好嗎?根據泰勒公式 f x h f...