matlab求微分方程同届,Matlab学习——求解微分方程(组)
介紹:
1.在 Matlab 中,用大寫字母 D 表示導(dǎo)數(shù),Dy 表示 y 關(guān)于自變量的一階導(dǎo)數(shù),D2y 表示 y 關(guān)于自變量的二階導(dǎo)數(shù),依此類推.函數(shù) dsolve 用來解決常微分方程(組)的求解問題,調(diào)用格式為
X=dsolve(‘eqn1’,’eqn2’,…)
如果沒有初始條件,則求出通解,如果有初始條件,則求出特解
系統(tǒng)缺省的自變量為 t。
2.函數(shù)?dsolve 求解的是常微分方程的精確解法,也稱為常微分方程的符號解.但是,有大量的常微分方程雖然從理論上講,其解是存在的,但我們卻無法求出其解析解,此時,我們需要尋求方程的數(shù)值解,在求常微分方程數(shù)值解方面,MATLAB 具有豐富的函數(shù),將其統(tǒng)稱為?solver,其一般格式為:
[T,Y]=solver(odefun,tspan,y0)
說明:(1)solver 為命令?ode45、ode23、ode113、ode15s、ode23s、ode23t、ode23tb、ode15i 之一.
(2)odefun 是顯示微分方程?y?'??=?f?(t?, y) 在積分區(qū)間?tspan =?[t?0?,?t?f?]?上從?t0?到?t?f??用初始條件y0求解.
(3)如果要獲得微分方程問題在其他指定時間點?t?0?,?t1?,?t?2?, , t?f??上的解,則令tspan =?[t?0?,?t1?,?t?2?, t f](要求是單調(diào)的).
(4)因為沒有一種算法可以有效的解決所有的?ODE 問題,為此,Matlab 提供了多種求解器?solver,對于不同的?ODE 問題,采用不同的?solver
3.在?matlab 命令窗口、程序或函數(shù)中創(chuàng)建局部函數(shù)時,可用內(nèi)聯(lián)函數(shù)?inline,inline 函數(shù)形式相當于編寫?M 函數(shù)文件,但不需編寫?M-文件就可以描述出某種數(shù)學(xué)關(guān)系.調(diào)用?inline 函數(shù),只能由一個?matlab 表達式組成,并且只能返回一個變量,不允許[u,v]這種向量形式.因而,任何要求邏輯運算或乘法運算以求得最終結(jié)果的場合,都不能應(yīng)用?inline 函數(shù),inline 函數(shù)的一般形式為:
FunctionName=inline(‘函數(shù)內(nèi)容’, ‘所有自變量列表’)
例如:(求解?F(x)=x^2*cos(a*x)-b ,a,b 是標量;x 是向量 )在命令窗口輸入:
Fofx=inline('x.^2.*cos(a.*x)-b','x','a','b');g = Fofx([pi/3 pi/3.5],4,1)
系統(tǒng)輸出為:g=-1.5483 -1.7259注意:由于使用內(nèi)聯(lián)對象函數(shù)?inline 不需要另外建立?m 文件,所有使用比較方便,另外在使用?ode45 函數(shù)的時候,定義函數(shù)往往需要編輯一個?m 文件來單獨定義,這樣不便于管理文件,這里可以使用?inline 來定義函數(shù)。
例子:
一、ex(求精確解):
1. 求解微分方程?y?'?+?2xy?=?xe-x2
syms x y; y=dsolve('Dy+2*x*y=x*exp(-x^2)','x')
運行結(jié)果:
2. 求微分方程?xy?'?+?y?-?e?x??=?0?在初始條件?y?(1)?=?2e?下的特解并畫出解函數(shù)的圖形.
syms x y; y=dsolve('x*Dy+y-exp(1)=0','y(1)=2*exp(1)','x');ezplot(y)
運行結(jié)果:
3. 求解微分方程組
在初始條件x|t=0=1,y|t=0=0下的特解,并畫出解函數(shù)的圖像。
syms x y t;
[x,y]=dsolve('Dx+5*x+y=exp(t)','Dy-x-3*y=0','x(0)=1','y(0)=0','t');
simplify(x);
simplify(y);
ezplot(x,y,[0,1.3]);axis auto
其中,simplify函數(shù)可以對符號表達式進行簡化。以下是運行結(jié)果:
二、ex(近似解):
1.?求解微分方程初值問題
的數(shù)值解,求解范圍為區(qū)間 [0,0.5] 。
fun=inline('-2*y+2*x^2+2*x','x','y');
[x,y]=ode23(fun,[0,0.5],1);
plot(x,y,'o-')
2.求解微分方程
,y(0) = 1,y(0) = 0 的解,并畫出解的圖像。
通過變換,將二階方程化為一階方程組求解.令
,則
編寫 vdp.m 文件:
function fy=vdp(t,x)
fy=[x(2);7*(1-x(1)^2)*x(2)-x(1)];
end
命令行輸入:
y0=[1;0]
[t,x]=ode45('vdp',[0,40],y0);
y=x(:,1);dy=x(:,2);
plot(t,y,t,dy)
在使用ode45函數(shù)的時候,定義函數(shù)往往需要編輯一個 .m文件來單獨定義,這樣不便于管理文件,因此編寫 inline 函數(shù):
fy=inline('[x(2);7*(1-x(1)^2)*x(2)-x(1)]','t','x')
運行:
結(jié)果一致!
三、ex(用 Euler 折線法求解):
Euler 折線法求解的基本思想是將微分方程初值問題
化成一個代數(shù)(差分)方程,主要步驟是用差商
替代微商
,于是
記
,從而
,于是
1.?用 Euler 折線法求解微分方程初值問題
的數(shù)值解(步長h取 0.4),求解范圍為區(qū)間[0,2]
本題的差分方程為:
clear;
f=sym('y+2*x/y^2');a=0;b=2;
h=0.4;
n=(b-a)/h+1;
x=0;
y=1;
szj=[x,y];%數(shù)值解for i=1:n-1y=y+h*subs(f,{'x','y'},{x,y});%subs,替換函數(shù)
x=x+h;
szj=[szj;x,y];
end;
szj;
plot(szj(:,1),szj(:,2))
說明:替換函數(shù)?subs 例如:輸入?subs(a+b,a,4) 意思就是把?a 用?4 替換掉,返回?4+b,也可以替換多個變量,例如:subs(cos(a)+sin(b),{a,b},[sym('alpha'),2])分別用字符?alpha 替換?a 和?2 替換?b,返回?cos(alpha)+sin(2)。
偏微分方程解法
Matlab 提供了兩種方法解決?PDE 問題,一是使用?pdepe 函數(shù),它可以求解一般的?PDEs,具有較大的通用性,但只支持命令形式調(diào)用;二是使用?PDE 工具箱,可以求解特殊?PDE 問題,PDEtoll 有較大的局限性,比如只能求解二階?PDE問題,并且不能解決片微分方程組,但是它提供了?GUI 界面,從復(fù)雜的編程中解脫出來,同時還可以通過?File—>Save As 直接生成?M 代碼.
實例:
求解一個正方形區(qū)域上的特征值問題:
正方形區(qū)域為:
。
(1)使用?PDE 工具箱打開?GUI 求解方程
(2)進入?Draw 模式,繪制一個矩形,然后雙擊矩形,在彈出的對話框中設(shè)置Left=-1,Bottom=-1,Width=2,Height=2,確認并關(guān)閉對話框
(3)進入?Boundary 模式,邊界條件采用?Dirichlet 條件的默認值
(4)進入?PDE 模式,單擊工具欄?PDE 按鈕,在彈出的對話框中方程類型選擇Eigenmodes,參數(shù)設(shè)置?c=1,a=-1/2,d=1,確認后關(guān)閉對話框
(5)單擊工具欄的?D?按鈕,對正方形區(qū)域進行初始網(wǎng)格剖分,然后再對網(wǎng)格進一步細化剖分一次
(6)點開?solve 菜單,單擊?Parameters 選項,在彈出的對話框中設(shè)置特征值區(qū)域為[-20,20]
(7)單擊?Plot 菜單的?Parameters 項,在彈出的對話框中選中?Color、Height(3-D plot)和?show mesh 項,然后單擊?Done 確認
(8)單擊工具欄的“=”按鈕,開始求解
得到結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的matlab求微分方程同届,Matlab学习——求解微分方程(组)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小米最强自拍机升级!小米Civi新机规格
- 下一篇: 2d fft matlab,证明2D-F