教你用matlab快速解決煩人的高數的微分方程的符號解法問題(這棵樹數雖高,看了這個你肯定掛不上去),非常全面,爆肝推薦!!!

函數 :dsolve

格式 :r = dsolve('eq1,eq2,…','cond1,cond2,…','v')

說明 :對給定的常微分方程(組)eq1,eq2,…中指定的符號自變量 v,與給定的邊界條件和初始條件 cond1,cond2,….求符號解(即解析解)r;若沒有指定變量 v,則缺省變量爲 t;在微分方程(組)的表達式 eq 中,大寫字母 D 表示對自變量(設爲 x)的微分算子:D=d/dx,D2=d2/dx2,…。微分算子 D 後面的字母則表示爲因變量,即待求解的未知函數。

初始和邊界條件由字符串表示:y(a)=b,Dy(c)=d,D2y(e)=f,等等,分別表示y(x)|_{x=a}=b,y^{'}(x)|_{x=c}=d,y^{''}(x)|_{x=e}=f;若邊界條件少於方程(組)的階數,則返回的結果 r 中會出現任意常數 C1,C2,…;

dsolve 命令最多可以接受 12 個輸入參量(包括方程組與定解條件個數,當然我們可以做到輸入的方程個數多於 12 個,只要將多個方程置於一字符串內即可)。若沒有給定輸出參量,則在命令窗口顯示解列表。若該命令找不到解析解,則返回一警告信息,同時返回一空的 sym 對象。這時,用戶可以用命令 ode23 或 ode45 求解方程組的數值解。

【例 1】求 \frac{dx}{dt}=y,\frac{dy}{dt}=-x的解。

matlab代碼:

S=dsolve('Dx=y,Dy=-x') 
disp([blanks(12),'x',blanks(21),'y']),disp([S.x,S.y])

運行結果:

S =
x: [1x1 sym]
y: [1x1 sym]
             x                   y
[ -C1*cos(t)+C2*sin(t), C1*sin(t)+C2*cos(t)]

【例 2】圖示微分方程y=xy^{'}-(y^{'})^2 的通解和奇解的關係。

matlab 代碼:

y=dsolve('(Dy)^2-x*Dy+y=0','x') 
clf,hold on,
ezplot(y(1),[-6,6,-4,8],1) 
cc=get(gca,'Children'); 
set(cc,'Color','r','LineWidth',5) 
for k=-2:0.5:2
    ezplot(subs(y(2),'C1',k),[-6,6,-4,8],1);
end
hold off,title('\fontname{ 隸書}\fontsize{16} 通解和奇解')

運行結果:

y =
1/4*x^2
-C1^2+x*C1

【例 3】求解兩點邊值問題:xy^{''}-3y^{'}=x^{2},y(1)=0,y(5)=0

%matlab代碼:
y=dsolve('x*D2y-3*Dy=x^2','y(1)=0,y(5)=0','x')
%運行結果:
y =
31/468*x^4-1/3*x^3+125/468

畫圖:

ezplot(y,[-1,6])
hold on
plot([1,5],[0,0],'.r','MarkerSize',20)
text(1,1,'y(1)=0')
text(4,1,'y(5)=0')
title(['x*D2y-3*Dy=x^2',', y(1)=0,y(5)=0'])
hold off 

備註

>>D1 = dsolve('D2y – Dy =exp(x)')
>>D2 = dsolve('t*D2f = Df*log((Dy)/t)')
>>D3 = dsolve('(Dy)^2 + y^2 = 1','s')
>>D4 = dsolve('Dy = a*y', 'y(0) = b') % 帶一個定解條件
>>D5 = dsolve('D2y = -a^2*y', 'y(0) = 1', 'Dy(pi/a) = 0') % 帶兩個定解條件
>>[x,y] = dsolve('Dx = y', 'Dy = -x') % 求解線性微分方程組
>>[u,v] = dsolve(‘Du=u+v,Dv=u-v’)
計算結果爲:
D1 =
-exp(x)*t+C1+C2*exp(t)

D2 =
y(t)=Int(exp(t*diff(f(t),`$`(t,2))/diff(f(t),t))*t,t)+C1

D3 =
[ -1]
[ 1]
[ sin(s-C1)]
[ -sin(s-C1)]

D4 =
b*exp(a*t)

D5 =
cos(a*t)
x =
cos(t)*C1+sin(t)*C2
y =
-sin(t)*C1+cos(t)*C2
u =
1/2*C1*exp(2^(1/2)*t) - 1/4*C1*2^(1/2)*exp(-2^(1/2)*t) + 1/4*C1*2^(1/2) *exp (2^(1/2)*t) +
1/2*C1*exp(-2^(1/2)*t) - 1/4*C2*2^(1/2)*exp(-2^(1/2)*t) + 1/4*C2 *2^(1/2)*exp(2^(1/2)*t)
v =
-1/4*C1*2^(1/2)*exp(-2^(1/2)*t)+1/4*C1*2^(1/2)*exp(2^(1/2)*t)+1/2*C2*exp
(2^(1/2)*t)+1/4*C2*2^(1/2)*exp(-2^(1/2)*t)-1/4*C2*2^(1/2)*exp(2^(1/2)*t)+
1/2*C2*exp(-2^(1/2)*t)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章