matlab常微分方程求解方法plot画出质点轨迹初始值自定

常微分方程教学中的Matlab_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
常微分方程教学中的Matlab
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
你可能喜欢君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
4matlab常微分方程求解
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口Matlab带初始值的微分方程求解画图 要求用plot并画在1张图上 求高手看我哪错了_百度知道
Matlab带初始值的微分方程求解画图 要求用plot并画在1张图上 求高手看我哪错了
x=0:0.01:2;y1=dsolve('Dy=x*exp(x)订偿斥锻俪蹬筹拳船哗*(cos(y))^2','y(1)=0');y2=dsolve('Dy=x*exp(x)*(cos(y))^2','y(1)=pi/2');y3=dsolve('Dy=x*exp(x)*(cos(y))^2','y(1)=pi');x1=eval(y1.y);x2=eval(y2.y);x3=eval(y3.y);plot(x,x1,x,x2,x,x3);title('figure 1');
%你的方法我不知道错哪,我用自己的方法给你做了一下%所用方法为有限差分法,程序如下x(1)=1;y1(1)=0;y2(1)=pi/2;y3(1)=dx=0.001;i=1;while&x&=3&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%如果你想得到更大范围的曲线,就把3改为更大的数&&&&dy1=x(i)*exp(x(i))*(cos(y1(i)))^2*&&&&dy2=x(i)*exp(x(i))*(cos(y2(i)))^2*&&&&dy3=x(i)*exp(x(i))*(cos(y3(i)))^2*&&&&x(i+1)=x(i)+&&&&y1(i+1)=y1(i)+dy1;&&&&y2(i+1)=y2(i)+dy2;&&&&y3(i+1)=y3(i)+dy3;&&&&i=i+1;endhold&plot(x,y1,'b');plot(x,y2,'r');plot(x,y3,'g');legend('y1','y2','y3');xlabel('x');ylabel('y1,y2,y3');%结果见下图
其他类似问题
为您推荐:
微分方程的相关知识
其他2条回答
首先x订偿斥锻俪蹬筹拳船哗是自变量 如果不声明 默认是对t求导&& x=0:0.01:2;y1=dsolve('Dy=x*exp(x)*(cos(y))^2','y(1)=0','x')y2=dsolve('Dy=x*exp(x)*(cos(y))^2','y(1)=pi/2','x')y3=dsolve('Dy=x*exp(x)*(cos(y))^2','y(1)=pi','x') y1 = atan(exp(x)*(x - 1))y2 = pi/2 Warning: Explicit solution could not be found. & In dsolve at 101 y3 = [ empty sym ]其次y2为一常数 pi/2y3matlab求不出解析式(其实应该和y1一样的)所以你带入x值是不行的
clear [I,f]=dsolve('60=7.18*0.001*DI+1/36.8*30/pi*Df*93+1.4*I','8.74/93*D2f*1.15=259*0.001*I','f(0)=15/180*pi','Df(0)=11.4028','I(0)=0') t=0:0.001:0.1; I=subs(I);f=subs(f); [AX,H1,H2]= plotyy(t,I,t,f) xlabel('t') set(get(AX(1),'Ylabel'),'String','I') set(get(AX(2),'Ylabel'),'String','\phi') figure(2) subplot(2,1,1) plot(t,I),xlabel('t'),ylabel('I') subplot(2,1,2) plot(t,f),xlabel('t'),ylabel('\phi') 图形参见我的博客:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁查看: 35359|回复: 17|关注: 0
怎么用MATLAB求解微分方程组并画出解函数图?
求解微分方程组,画出解函数图。
x'= -x^3-y, x(0)=1& &&&
y'= x-y^3, y(0)=0.5& &0&t&30
请教高手指点给出程序与结果,谢谢~~
关注者: 1
Using RK4&&method
关注者: 9
应该是ode45可以解决这个问题
同样深受matlab数据处理的煎熬:L
问一哈那个作业是什么时候交?16周周五晚上1514,还是17周周五晚1514?有实验好几周都没去了,作业有什么要求没有?和期中一样么?一定要回答啊,谢谢
突然发现一个专业的:L
关注者: 76
原帖由 gracesky 于
05:06 PM 发表
求解微分方程组,画出解函数图。
x'= -x^3-y, x(0)=1& &&&
y'= x-y^3, y(0)=0.5& &0
后面怎么还有0&t&30呢?
求达人告诉我这个
为了考察日照时间及温度对小麦产量的影响,进行12次试验得到如下结果,分析日照时间和温度的不同是否对小麦产品具有显著影响?
时间/温度 25℃& & 30℃& && &34℃
150h& && & 397/384& &425/416& &498/476
200h& && & 406/425& &482/464& & 518/523
230h& && &456/472& &&&521/514& & 560/579
用什么方法?具体怎么做
关注者: 1
碰巧正好学习了微分方程解法
matlab内置的函数(数值解法)有ode系列,help一下就可以了
如果你上的是有关数字分析的课程,我猜老师的意思应该让你自己写代码
我分别尝试了Euler法 梯形法 四阶RK法&&代码如下:
以y‘=|sin2x、,y(0)=1为例:
编写一阶导数m文件:
%一阶常微分方程的m文件
function y1=myfun(x,y)
y1=abs(sin(2*x));
复制代码
%向前差分Euler法解常微分方程
& & %fun:f(x)的一阶导数m文件
& & %x0,xt:自变量的初值和终值
& & %y0:f(x)在x0处的值
& & %h:步长
function [Eulerx,Eulery]=MyEuler(myfun,x0,xt,y0,h)
x=(x0:h:xt)';%定义自变量数组
y(1,:)=y0;%初始化因变量数组
for k = 1:length(x)-1
& & f=feval(myfun,x(k),y(k,:));%计算每个迭代点的一阶导数值
& & f=f(:)';
& & y(k+1,:)=y(k,:)+h*f; %向前迭代
end
Eulerx=x;
Eulery=y;
复制代码
%梯形法解常微分方程
& & %fun:f(x)的一阶导数m文件
& & %x0,xt:自变量的初值和终值
& & %y0:f(x)在x0处的值
& & %h:步长
function [Tixingx,Tixingy]=MyTixing(myfun,x0,xt,y0,h)
x=(x0:h:xt)';%定义自变量数组
y(1,:)=y0;%初始化因变量数组
Y(1,:)=y0;%中间量
for k=1:length(x)-1
& & f=feval(myfun,x(k),y(k,:));%计算每个迭代点的一阶导数值
& & f=f(:)';
& & Y(k+1,:)=y(k,:)+h*f; %y0(n+1)
& & F=feval(myfun,x(k+1),Y(k+1,:));%计算每个迭代点的一阶导数值
& & F=F(:)';
& & y(k+1,:)=y(k,:)+0.5*h*(f+F); %y(n+1)
end
Tixingx=x;
Tixingy=y;
复制代码
四阶RK法:
%四阶Runge-Kutta法解常微分方程
& & %fun:f(x)的一阶导数m文件
& & %x0,xt:自变量的初值和终值
& & %y0:f(x)在x0处的值
& & %h:步长
function [RK4x,RK4y]=RK4(myfun,x0,xt,y0,h)
x=(x0:h:xt)';%定义自变量数组[code]
x0=0;xt=2*%x0,xt:自变量的初值和终值
y0=1;%y0:f(x)在x0处的值
h=0.2;%h:步长
[Eulerx,Eulery]=MyEuler(@myfun,x0,xt,y0,h);%欧拉法
a=fliplr(Eulery');%求算f(22*pi)
y_Euler=a(1);
[Tixingx,Tixingy]=MyTixing(@myfun,x0,xt,y0,h);%梯形法
a=fliplr(Tixingy');%求算f(22*pi)
y_Tixing=a(1);
[RK4x,RK4y]=RK4(@myfun,x0,xt,y0,h);%四阶Runge-Kutta法法
a=fliplr(RK4y');%求算f(22*pi)
y_RK4=a(1);
[ode45x,ode45y]=ode45(@myfun,[x0:h:xt],[1]);%matlab内置函数
a=fliplr(ode45y');%求算f(22*pi)
y_ode45=a(1);
figure_FontSize=18; %修改字体
plot(Eulerx,Eulery,'ro',Tixingx,Tixingy,'g*',RK4x,RK4y,'bd',ode45x,ode45y,'ks','LineWidth',2);%做图
legend('Euler','Tixing','RK4','ode45');%图例
Y=[y_Euler,y_Tixing,y_RK4,y_ode45];
axis([x0 xt y0 max(Y)]); %定义坐标轴范围
label1={'方法';'Euler';'Tixing';'RK4';'ode45'};
label2={'y(2π)';y_Ey_Ty_RK4;y_ode45};
% label=[label1,label2];
text(x0+0.1*(xt-x0),0.8*max(Y),label1); %显示y(2π)
text(x0+0.3*(xt-x0),0.8*max(Y),label2); 复制代码
y(1,:)=y0;%初始化因变量数组
for k=1:length(x)-1
& & K1=feval(myfun,x(k),y(k,:));%计算系数
& & K2=feval(myfun,x(k)+0.5*h,y(k,:)+0.5*K1');
& & K3=feval(myfun,x(k)+0.5*h,y(k,:)+0.5*K2');
& & K4=feval(myfun,x(k)+h,y(k,:)+h*K3');
& & y(k+1,:)=y(k,:)+(1/6)*h*(K1'+2*K2'+2*K3'+K4');%迭代
关注者: 1
去年上数值分析的时候
还没有接触matlab
竟然用迭代&&用excel算得
然后用origin作图
今天用matlab尝试了一下
忽觉当年自己好天真啊
关注者: 2
楼主的图用Forcal绘制,代码:
!using[&XSLSF&];& && && && && & //使用命名空间XSLSF
//数组xArray存放x的值;ti为当前有效值的个数;tmax为ti对应的时间;tmin为起始时间。
xt(t:k:xArray,ti,tmax,tmin)=
{
&&k=(t-tmin)/(tmax-tmin)*ti-1,
&&if[k&0, k=0], if[k&=ti, k=ti-1],
&&xArray.getrai[k]
};
//数组yArray存放y的值;ti为当前有效值的个数;tmax为ti对应的时间;tmin为起始时间。
yt(t:k:yArray,ti,tmax,tmin)=
{
&&k=(t-tmin)/(tmax-tmin)*ti-1,
&&if[k&0, k=0], if[k&=ti, k=ti-1],
&&yArray.getrai[k]
};
//函数定义,用于计算微分方程组中各方程右端函数值,连分式法对微分方程组积分一步函数pbs1将调用该函数f。
//t为自变量,x,y为函数值,dx,dy为右端函数值(即微分方程的值)。
f(t,x,y,dx,dy)=
{
&&dx=-(x^3)-y,
&&dy=x-y^3
};
//用连分式法对微分方程组进行积分,获得理论值。
//t1,t2为积分的起点和终点。
//h,s为自动变量。
//模块变量:hf为函数f的句柄,要预先获得该句柄;Array为工作数组;step为积分步长;eps为积分精度。
积分(t1,t2:h,s:hf,Array,step,eps)=
{
&&s=ceil[(t2-t1)/step],& && &&&//计算积分步数
&&h=(t2-t1)/s,& && && && && &&&//重新计算积分步长
&&{& &pbs1[hf,t1,Array,h,eps], //对微分方程组积分一步
& && &t1=t1+h& && && && && && &//积分步长增加
&&}.until[abs(t1-t2)&h/2]& && &//连续积分至t2
};
数据(:i,h,t1,t2,x,y,static,free:hf,Array,step,eps,max,xArray,yArray,ti,tmax,tmin)= //微分方程组积分获得数据
{
&&if[free,delete(Array),delete(xArray),delete(yArray),return(0)],
&&hf=HFor(&f&),& && && && && && && && && && & //模块变量hf保存函数f的句柄,预先用函数HFor获得该句柄
&&step=0.01,eps=1e-6,& && && && && && && && & //积分步长step要合适,积分精度eps越小越精确,用于对微分方程组积分一步函数pbs1
&&Array=new[rtoi(real_s),rtoi(2*15)],& && && &//申请工作数组
&&max=1001,
&&xArray=new[rtoi(real_s),rtoi(max)],& && && &//申请工作数组
&&yArray=new[rtoi(real_s),rtoi(max)],& && && &//申请工作数组
&&Array.setra(0,1,0.5),& && && && && && && && & //设置积分初值,通过模块变量Array传递,Array是一个数组
&&xArray.setra(0,1),& && && && && && && && &&&//设置xArray的第一个值
&&yArray.setra(0,0.5),& && && && && && && && &&&//设置yArray的第一个值
&&ti=1, h=step*3, tmin=0, tmax=0, t1=0, t2=h,
&&i=1,(i&max).while{
& & 积分(&t1,t2),& && && && && && && && && &&&//从t1积分到t2
& & Array.getra(0,&x,&y),& && && && && && && &//从数组Array获得t2时的积分值
& & xArray.setra(i,x), yArray.setra(i,y),& &&&//将积分值保存到数组
& & ti=i+1, tmax=t1, t2=t2+h,
& & i++
&&}
};
//绘制函数图形
(::hxt,hyt)= hxt=HFor(&xt&), hyt=HFor(&yt&);&&//获得函数xt和yt的句柄,保存在模块变量中
gleDrawScene[HFor(&Scene&)],stop();& && &//设置场景绘制函数后退出
Scene(::hxt,hyt,tmax,tmin)=
{
& & glClear[],& && && && && && && && && &//清除屏幕以及深度缓存
& & glLoadIdentity[],& && && && && && &&&//重置视图
& & glTranslated[0,0,-20],& && && && && &//移动坐标,向屏幕里移动10个单元
& & glColor3d[0,0,1],& && && && && && &&&//设置颜色
& & fgPlot[hxt,tmin,tmax,FG_Y,-1,2],& &//绘制一元函数图象
& & glColor3d[1,0,0],& && && && && && &&&//设置颜色
& & fgPlot[hyt,tmin,tmax,FG_Y,-1,2]& & //绘制一元函数图象
};
复制代码
gracesky.PNG (22.39 KB, 下载次数: 0)
21:19 上传
[ 本帖最后由 forcal 于
21:22 编辑 ]
站长推荐 /1
Powered byMatlab求解微分方程final_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Matlab求解微分方程final
上传于||文档简介
&&常​微​分​方​程
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩4页未读,继续阅读
你可能喜欢

我要回帖

更多关于 常微分方程的求解 的文章

 

随机推荐