教你用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)

 

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