用MATLAB算ode23、ode45求解初值等问题
function dx = rigid(t,x)dx = ones(6,1); dx(1) = 0.0515*x(2)-0.388*x(1)-0.136*x(1);dx(2) = 0.388*x(1)-0.0515*x(2);dx(3) = 0.136*x(1)+0.0254*x(6)-0.067*x(3)-0.0788*x(3);dx(4) = 0.0788*x(3)-0.0068*x(4)+0.001*x(5);dx(5) = 0.0068*x(4)-0.001*x(5);dx(6) = 0.067*x(3)-0.0254*x(6);end以上代码应该保存在rigid.m文件中
然后在命令行中或者另一个m文件中运行一下代码
ts=[0 10]; %这是求解的范围,可以需要自己设置x0=[100 0 0 0 0 0]';[t x]=ode45(@rigid,ts,x0);
得到的结果t是nx1的数列,x是nx6的矩阵
x中每一行的6个数对于t中相应行时间的x1~x6的值
引用一下matlab论坛里大神的回答:
总得来说:二者算法相似,只不过ode45比ode23精度要高一点,其它没什么差别。
具体ode是Matlab专门用于解微分方程的功能函数;solver有变步长(variable-step)和定步长(fixed-step)两种类型,不同类型有着不同的求解器。ode45求解器属于变步长的一种,采用Runge-Kutta算法;和他采用相同算法的变步长求解器还有ode23。ode45表示采用四阶,五阶runge-kutta单步算法,截断误差为(Δx)3。解决的是Nonstiff(非刚性)的常微分方程.是解决数值解问题的首选方法,若长时间没结果,应该就是刚性的,换用ode23来解。
编写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
Matlab中ode23是什么意思?
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及...
用matlab求解数值计算问题,matlab中已有各种数值计
用matlab求解数值计算问题方法:1、使用MATLAB中提供的ode45,ode23等函数,将微分方程直接输入函数,即可得到所求解的解析解。2、使用MATLAB中提供的函数linsolve,solve,inv等,将方程组参数输入函数,即可得到所求解的解析解。3、使用MATLAB中提供的fsolve函数,将非线性方程参数输入函数,即可得到所求解的...
一阶常微分方程的初值
将这两个函数文件保存在工作目录下,然后求出初值问题的数值解以及微分方程解析解在对应自变量的离散点处的函数值,最后同时绘出两个函数的图形加以比较。在MATLAB环境中键入下列指令:[x,y]=ode23('ff1',0,1,1);y=ff2(x);plot(x,y,’o’,x,y)计算机屏将显示出数值解(用小圆o表示)和解析...
MATLAB数学实验,急求!!
我用MATLAB求出了解析解和数值解,程序如下:clear;clc;解析解 y1=dsolve('Dy-0.02*(1-0.001*y)*y=0','y(0)=10');pretty(y1);数值解 f=@(x,y)0.02*(1-0.001*y)*y;[X,Y]=ode23(f,[-100,500],[10]);plot(X,Y);运行结果解析解为:1000 --- \/ t \\ exp| log...
ode23和ode45之间的区别
ode23和ode45都是MATLAB中用于求解常微分方程的函数。它们之间的主要区别在于使用的数值方法和稳定性。1. ode23:这个函数使用2阶龙格-库塔方法(Runge-Kutta method)来求解常微分方程。2阶龙格-库塔方法是一种改进的欧拉方法,它通过将步长分为两半来提高计算效率。虽然它的精度不如更高阶的龙格-库塔...
Matlab\/simulink中,什么叫Oder45和Ode23bt算法?
ode45是基于四点法和五点法的解微分方程数值解的方法,ode23等也一样,都是基于已知点“预测”下一个点的函数值的方法,不同的算法“预测”的方法不一样。比较著名的“预测”方法有欧拉法,改进的欧拉法,龙格库塔法,多点法等。在matlab一般使用中这些方法的差别不大,可以不予理会,会用一个即可...
Matlab解ODE,需要有例子说明,方法多者优!
这是最简单的单步Euler方法解初值ODE的代码。其中,diffeq是微分方程右端,是一个需要你自己编写的m文件 在matlab中,你可以使用ode23或是ode45来进行常微分方程求解。这是自适应方法,效率很高。推荐你看一下:数值方法和MATLAB实现与应用这本书。内容比较简单,贴合实际,看完就能用~最后附上Euler方法...
matlab 中能将pdepe工具中的ode45改为ode23吗
当然可以,ode23求解器为基于显示Runge-Kutta公式(2,3阶),为单步求解器,对于略带刚性的问题ode23比ode45更有效。ode45求解器为基于显示Runge-Kutta公式(4,5阶),对于非刚性问题它为最好的试探性求解器。对于刚性比较大或纯刚性问题,得用ode15s求解器。希望我的回答能令你满意!互相学习!
用matlab或者mathematica求积分解微分方程
例子:求定积分和广义积分 syms x I2=int(1\/(3+2*x+x^2),x,0,1)I3=int(1\/(3+2*x+x^2),x,-inf,inf)(2)当难以求得微分方程的解析解时,可以求其数值解. Matlab中求微分方程数值解的函数有五个:ode45, ode23, ode113, ode15s, ode23s.用法为:[t,x] = solver(‘f’...
matlab中maxstepsize在哪
在调用求解器函数里。在MATLAB中,maxstepsize是ode23、ode45、ode113和ode15s等求解常微分方程的函数中的一个选项参数,用于指定求解器在每一步中的最大步长。