先定义个函数:
function
f=fffff(t,y)
f=[y(2);cos(y(1))];
然后
[t,y]=ode45(@fffff,[0,2],[0,0]);
plot(t,y(:,1),'r',t,y(:,2),'b')
即可。我给你设了初值0,0,你可以自己定义。红线为y,蓝线为y'
你先把上面的函数fffff写成m文件,保存到你的matlab工作目录里,然后再在命令窗口输入:
[t,y]=ode45(@fffff,[0,2],[0,0]);
plot(t,y(:,1),'r',t,y(:,2),'b')
我作过,能做出图像的。
如何用matlab求解微分方程并画图,可以先用dsolve()或ode()求出其微分方程(组)的解析解或数值解,然后用plot()绘制其图形。
例如:解微分方程 y'=y-2t/y,y(0)=1,0<t<4
1、用dsolve()求解,代码及结果如下
2、用ode45()求解,代码及结果如下
3、当然喽,使用dsolve()或ode()求解要根据题意去分析,来决定用那个函数。一般来说,用ode45求解微分方程(组)的数值解用点比较多。
在Matlab下输入:edit zhidao_feiyingm,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=zhidao_feiying(t,x)
a=1;
b=2;
c=3;
d=4;
%%比方说
%f=ax+y-z;
%g=bsin(xy)-ccos(z);
%h=dy-ax;
%%注意x用x(1)代,y用x(2)代,z用x(3)代
f=ax(1)+x(2)-x(3);
g=bsin(x(1)x(2))-ccos(x(3));
h=dx(2)-ax(1);
y=[f;g;h];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
在Matlab下面输入:
t_end=5;
x0=[1;1;1];
[t,x]=ode45('zhidao_feiying',[0,t_end],x0);
plot(t,x)
legend('x','y','z')
上面只是固定d的情况,
你如果想做出随d的变化,估计比较麻烦一些,一方面ode45并不是等不长的。
另一方面,参数不好弄。
方程或者初始条件有问题,请认真核实。
原因:如果按照现在的初始条件,则第一个微分方程各项为0,方程不起作用。而且就算法而言,二阶(最高阶)导数的系数为0,会导致数值积分算法无法启动。
参考代码大致如下:
m=1;g=98;
k=100;
l0=11;
x0=[01 0 0 0];
% 定义x1=l, x2=l', x3=a, x4=a'
dx=#(t,x)[x(2); (mx(1)x(4)^2-mgcos(x(3))-k(x(1)-l0))/m;
x(4); (-2mx(1)x(2)x(4)+mgx(1)sin(x(3)))/(mx(1)^2)];
[t,x]=ode15s(dx,[0 10],x0);
lstr = { '\itl', '{\itl}''', '\alpha', '\alpha''' };
for i=1:length(lstr)
subplot(2,2,i)
plot(t, x(:,i));
xlabel('Time')
ylabel( lstr{i} )
end
注意:其中的#应为电子邮件的AT符,在MATLAB中表示匿名函数。因出现这个字符就会被识别为邮件地址,很可能回答无法正常显示(恶心的度娘,鄙视),所以,慎重起见,这里以#代替。
以上就是关于用matlab 解这个简单微分方程的数值解,急全部的内容,包括:用matlab 解这个简单微分方程的数值解,急、如何用matlab求解微分方程并画图、如何用matlab求解微分方程组的数值解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)