MATLAB ODE45 问题

作者&投稿:焦波 (若有异议请与网页底部的电邮联系)
matlab ode45的问题~

大哥,你这错误也太太太明显了,把函数中的Dy改成dy 大小写都没搞对

%定义函数
function dy = For_y( t,y )
dy=zeros(2,1);
dy(1)=y(2);
dy(2)=2;
end

编写M文件cdq.m
function dy=cdq(x,y)
dy=zeros(2,1);
dy(1)=y(2);
dy(2)=-2*y(2)-y(1)+cos(x);
编写M文件cdq1.m
function dY=cdq1(x,Y)
dY=[0 1;-1 -2]*Y+[0;1]*cos(x);
命令窗口
>> subplot(1,2,1),ode23(@ cdq,[0,2*pi],[0,3/2]),grid
>> subplot(1,2,2),ode45(@ cdq,[0,2*pi],[0,3/2]),grid
>> [x,Y]=ode23(@ cdq1,[0,2*pi],[0,3/2]),grid

x =

0
0.0001
0.0003
0.0017
0.0083
0.0417
0.1276
0.2556
0.4238
0.6344
0.8650
1.0990
1.3340
1.5637
1.8325
2.2382
2.6170
2.9650
3.2904
3.4980
3.7056
3.9507
4.2760
4.6394
4.7487
4.8580
4.9902
5.1739
5.4015
5.6654
5.9586
6.2249
6.2832

Y =

0 1.5000
0.0001 1.4999
0.0005 1.4994
0.0025 1.4967
0.0124 1.4834
0.0608 1.4188
0.1760 1.2638
0.3244 1.0602
0.4831 0.8328
0.6329 0.5964
0.7450 0.3810
0.8118 0.1941
0.8376 0.0292
0.8275 -0.1145
0.7763 -0.2626
0.6317 -0.4416
0.4422 -0.5515
0.2416 -0.5947
0.0495 -0.5812
-0.0677 -0.5454
-0.1754 -0.4902
-0.2851 -0.4029
-0.3928 -0.2583
-0.4528 -0.0735
-0.4576 -0.0160
-0.4562 0.0412
-0.4463 0.1088
-0.4180 0.1981
-0.3613 0.2975
-0.2700 0.3911
-0.1443 0.4611
-0.0172 0.4891
0.0114 0.4904
>> [x,Y]=ode45(@ cdq1,[0,2*pi],[0,3/2]),grid

x =

0
0.0000
0.0001
0.0001
0.0001
0.0003
0.0005
0.0006
0.0008
0.0016
0.0025
0.0033
0.0042
0.0083
0.0125
0.0167
0.0209
0.0418
0.0628
0.0837
0.1046
0.2093
0.3140
0.4186
0.5233
0.6667
0.8101
0.9535
1.0969
1.2540
1.4111
1.5682
1.7252
1.8823
2.0394
2.1965
2.3536
2.5106
2.6677
2.8248
2.9819
3.1390
3.2960
3.4531
3.6102
3.7497
3.8892
4.0288
4.1683
4.3147
4.4612
4.6076
4.7540
4.8899
5.0258
5.1617
5.2976
5.4425
5.5874
5.7323
5.8773
5.9787
6.0802
6.1817
6.2832

Y =

0 1.5000
0.0001 1.4999
0.0001 1.4999
0.0002 1.4998
0.0002 1.4997
0.0005 1.4994
0.0007 1.4991
0.0010 1.4987
0.0012 1.4984
0.0025 1.4967
0.0037 1.4951
0.0050 1.4934
0.0062 1.4917
0.0124 1.4834
0.0186 1.4751
0.0248 1.4669
0.0309 1.4587
0.0610 1.4185
0.0903 1.3792
0.1188 1.3410
0.1465 1.3037
0.2737 1.1305
0.3838 0.9767
0.4787 0.8393
0.5599 0.7156
0.6515 0.5640
0.7226 0.4291
0.7752 0.3073
0.8111 0.1958
0.8329 0.0833
0.8377 -0.0207
0.8268 -0.1171
0.8014 -0.2061
0.7625 -0.2876
0.7114 -0.3610
0.6495 -0.4259
0.5781 -0.4813
0.4989 -0.5265
0.4134 -0.5607
0.3234 -0.5834
0.2307 -0.5941
0.1374 -0.5928
0.0452 -0.5792
-0.0439 -0.5536
-0.1282 -0.5166
-0.1975 -0.4751
-0.2603 -0.4258
-0.3160 -0.3697
-0.3633 -0.3078
-0.4033 -0.2380
-0.4327 -0.1644
-0.4513 -0.0883
-0.4587 -0.0114
-0.4554 0.0591
-0.4426 0.1277
-0.4208 0.1933
-0.3903 0.2547
-0.3490 0.3143
-0.2996 0.3666
-0.2432 0.4107
-0.1810 0.4457
-0.1348 0.4644
-0.0869 0.4781
-0.0379 0.4867
0.0117 0.4902
另外,站长团上有产品团购,便宜有保证

编写M文件cdq.m
function dy=cdq(x,y)
dy=zeros(2,1);
dy(1)=y(2);
dy(2)=-2*y(2)-y(1)+cos(x);
编写M文件cdq1.m
function dY=cdq1(x,Y)
dY=[0 1;-1 -2]*Y+[0;1]*cos(x);
命令窗口
>> subplot(1,2,1),ode23(@ cdq,[0,2*pi],[0,3/2]),grid
>> subplot(1,2,2),ode45(@ cdq,[0,2*pi],[0,3/2]),grid
>> [x,Y]=ode23(@ cdq1,[0,2*pi],[0,3/2]),grid

x =

0
0.0001
0.0003
0.0017
0.0083
0.0417
0.1276
0.2556
0.4238
0.6344
0.8650
1.0990
1.3340
1.5637
1.8325
2.2382
2.6170
2.9650
3.2904
3.4980
3.7056
3.9507
4.2760
4.6394
4.7487
4.8580
4.9902
5.1739
5.4015
5.6654
5.9586
6.2249
6.2832

Y =

0 1.5000
0.0001 1.4999
0.0005 1.4994
0.0025 1.4967
0.0124 1.4834
0.0608 1.4188
0.1760 1.2638
0.3244 1.0602
0.4831 0.8328
0.6329 0.5964
0.7450 0.3810
0.8118 0.1941
0.8376 0.0292
0.8275 -0.1145
0.7763 -0.2626
0.6317 -0.4416
0.4422 -0.5515
0.2416 -0.5947
0.0495 -0.5812
-0.0677 -0.5454
-0.1754 -0.4902
-0.2851 -0.4029
-0.3928 -0.2583
-0.4528 -0.0735
-0.4576 -0.0160
-0.4562 0.0412
-0.4463 0.1088
-0.4180 0.1981
-0.3613 0.2975
-0.2700 0.3911
-0.1443 0.4611
-0.0172 0.4891
0.0114 0.4904
>> [x,Y]=ode45(@ cdq1,[0,2*pi],[0,3/2]),grid

x =

0
0.0000
0.0001
0.0001
0.0001
0.0003
0.0005
0.0006
0.0008
0.0016
0.0025
0.0033
0.0042
0.0083
0.0125
0.0167
0.0209
0.0418
0.0628
0.0837
0.1046
0.2093
0.3140
0.4186
0.5233
0.6667
0.8101
0.9535
1.0969
1.2540
1.4111
1.5682
1.7252
1.8823
2.0394
2.1965
2.3536
2.5106
2.6677
2.8248
2.9819
3.1390
3.2960
3.4531
3.6102
3.7497
3.8892
4.0288
4.1683
4.3147
4.4612
4.6076
4.7540
4.8899
5.0258
5.1617
5.2976
5.4425
5.5874
5.7323
5.8773
5.9787
6.0802
6.1817
6.2832

Y =

0 1.5000
0.0001 1.4999
0.0001 1.4999
0.0002 1.4998
0.0002 1.4997
0.0005 1.4994
0.0007 1.4991
0.0010 1.4987
0.0012 1.4984
0.0025 1.4967
0.0037 1.4951
0.0050 1.4934
0.0062 1.4917
0.0124 1.4834
0.0186 1.4751
0.0248 1.4669
0.0309 1.4587
0.0610 1.4185
0.0903 1.3792
0.1188 1.3410
0.1465 1.3037
0.2737 1.1305
0.3838 0.9767
0.4787 0.8393
0.5599 0.7156
0.6515 0.5640
0.7226 0.4291
0.7752 0.3073
0.8111 0.1958
0.8329 0.0833
0.8377 -0.0207
0.8268 -0.1171
0.8014 -0.2061
0.7625 -0.2876
0.7114 -0.3610
0.6495 -0.4259
0.5781 -0.4813
0.4989 -0.5265
0.4134 -0.5607
0.3234 -0.5834
0.2307 -0.5941
0.1374 -0.5928
0.0452 -0.5792
-0.0439 -0.5536
-0.1282 -0.5166
-0.1975 -0.4751
-0.2603 -0.4258
-0.3160 -0.3697
-0.3633 -0.3078
-0.4033 -0.2380
-0.4327 -0.1644
-0.4513 -0.0883
-0.4587 -0.0114
-0.4554 0.0591
-0.4426 0.1277
-0.4208 0.1933
-0.3903 0.2547
-0.3490 0.3143
-0.2996 0.3666
-0.2432 0.4107
-0.1810 0.4457
-0.1348 0.4644
-0.0869 0.4781
-0.0379 0.4867
0.0117 0.4902
另外,站长团上有产品团购,便宜有保证

看看是不是程序调用有问题啊


白水县19270668808: 关于matlab中ode45的问题 -
东郭政复方: 对于二阶微分方程的数值解,y有两列 第一列是y(1),表示的是一阶微分方程的解,就是y 第二列是y(2),表示的是二阶微分方程的解,就是y的一阶导数,y'=dy/dt 而dy也有两行,第一行是一阶微分方程,dy(1)/dt=y(2); 第二行是二阶微分方程, dy(2)/dt=2*y(2)-y(1)

白水县19270668808: 请教MATLAB高手关于ode45函数的问题 -
东郭政复方: 原因是你的步长取得太小了,也就是1:20:400这里,把中间的20改小试试: clear; clc; tspan=[0:0.1:400]; x0=[5.91e-10;2.62e-12]; [t,x]=ode45('ff2',tspan,x0); figure plot(t,x(:,1),'r-') figure plot(t,x(:,2),'b-') fprintf('%24.16f %24.16f %24.16f %24.16f %24.16f %24.16f %24.16f\n',x);

白水县19270668808: matlab里用ode45的问题 -
东郭政复方: y1"=y1,令y1'=y2,则y2'=y1 下面函数中的dy(2)就是二阶导数的结果! ....... plot(t,dy(2))%二阶导数 .......function dy=myode(t,y) dy=zeros(2,1); dy(1)=y(2) dy(2)=y(1)

白水县19270668808: MATLAB ODE45 问题 -
东郭政复方: 编写M文件cdq.mfunction dy=cdq(x,y)dy=zeros(2,1);dy(1)=y(2);dy(2)=-2*y(2)-y(1)+cos(x);编写M文件cdq1.mfunction dY=cdq1(x,Y)dY=[0 1;-1 -2]*Y+[0;1]*cos(x);命令窗口>> subplot(1,2,1),...

白水县19270668808: matlab ode45初值问题 -
东郭政复方: 首先,起始点不同时可以用ode45求解的~ 其次,y(50)=50就是一个已知的初值,当然可以用了~ 或者你把y(50)=50当做一个微分方程就可以啦~

白水县19270668808: MATLAB 中的ODE45 -
东郭政复方: 没有必要 只要是选取的初值对应的t等于tspan(1) 我们看下面一个例子,对于dx/dt=2t来说吧 我们知道精确解是x=t^2 下面我们给出数值解法,编写代码 % %选取状态变量 %x1=x % %则各个状态变量的一阶导数为 %x1'=x'=2*t % %by dynamic %...

白水县19270668808: matlab问题:使用ode45求如下微分方程的数值解,绘制y - t图 -
东郭政复方: 用ode45()求微分方程的格式来为 [T,Y] =ode45(odefun,tspan,y0) odefun—源—微分方程2113自定义函数;tspan——t的区间;y0——y,dy的初始值.5261 用plot()绘出微分方程的解,即y(t)函数图形.对于本提问,可以按下列代4102码实施.下图是精确解与数值解的图形比较1653.

白水县19270668808: MATLAB软件用ode45指令求解,出现如下情况,请大神指导 -
东郭政复方: 出现这种提示,就说明没有解,可用其它解法试试,或者改变初始条件再试试.

白水县19270668808: 我在编matlab程序的过程中,需要用ode45解一个一阶微分方程组,怎么做呢??? -
东郭政复方: 只告诉你调用ode45的方法 [x,y]=ode45('odex',[t0,tf],y0,tol,trace) odex代表定义函数f(x,y)的m文件名;t0,tf分别为积分的初值和终值;y0是初始状态的列向量;tol是控制解的精度,可省略,缺省值为1E-6;trace决定求解过程中中间结果是否省略,缺省值为0,表示不显示.举个应用的例子:解y'=y-2*x/y,y(0)=1 先编个M函数文件,比如命名为pp.m function dy=pp(x,y) dy=[y-2*x/y]; 然后只需使用命令:[x,y]=ode45('pp',[0 20],1) 即可求解

白水县19270668808: matlab数值解法求解二阶微分方程 ODE45函数 -
东郭政复方: 因为你x=0时2/x是无穷大呀,然后y'又是0,然后(2/x)y'就是nan了,所以后面算的全是nan了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网