您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 关于ode45函数的说明
关于ode45函数的说明求解器solver在求解常微分方程方面,matlab具有丰富的函数,将其统称为solver,其一般格式为:[T,Y]=solver(odefun,tspan,y0)该函数表示在区间tspan=[t0,t1]上,用初始条件y0求解显式常微分方程y’=f(t,y)。odefun为显式常微分方程中的f(t,y)函数,tspan为求解区间。要获得问题在制定时刻的解,可以令tspan=t0,t1,t2…(单调递增或递减),y0为初始条件。求解器solver功能说明ode45一步算法;4,5阶龙格库塔方程;累计截断误差(Δx)3大部分尝试的首选算法ode23一步算法;2,3阶龙哥库塔方程;累计截断误差(Δx)3适用于精度较低的情形ode113多步算法;Adams算法;高低精度均可到10-6~10-3计算时间比ode45短非刚性ODE求解命令求解器solver功能说明ode23t梯形算法适度刚性情形ode15s多步法;Gear’s反向数值微分;精度中等若ode45失效时,可尝试使用ode23s一步法;2阶Rosebrock算法;精度低当精度较低时,计算时间比ode15s短ode23tb梯形算法;精度低当精度较低时,计算时间比ode15s短刚性ODE求解命令[T,Y]=ode45(‘odefun’,tspan,y0)tspan为求解区间y0为初始条件(1)根据问题所属学科中的规律、定律、公式,用微分方程与初始条件进行描述。,,,...,,0nFyyyyt10110,0,...,0nnycycyc微分方程初始条件(2)若微分方程的阶数(n阶)大于1,则作变量替换:把高阶(大于2阶)的方程(组)写成一阶微分方程组:1121,,...,nnyyyyyy000121110121220121110121,,,,...,,,,,...,,,,,...,,,,,...,nnnnnndyftyyyydtdyftyyyydtdyftyyyydtdyftyyyydt(3)根据(1)和(2)的结果,编写计算导数的M函数文件。000121110121220121110121,,,,...,,,,,...,,,,,...,,,,,...,nnnnnndyftyyyydtdyftyyyydtdyftyyyydtdyftyyyydt待求解函数m文件:functionDx=myfun(t,x)%Dx为返回值,是一个列数组%t表示时间%x也是一个数组0121...ndydtdydtDxdydtdydt0121...nyyyxy自定义函数中的Dx和x与一阶微分方程组的关系是Dx是一个数组,其第一个元素Dx(1)表示dy0/dt第二个元素Dx(2)表示dy1/dt如此类推。x也是一个数组,其第一个元素x(1)表示y0第二个元素x(2)表示y1如此类推。根据这个关系,很容易可以把一阶微分方程组用数组Dx与数组x的元素表示出来。例如(见下页)例如:20dytkytdt微分方程初始条件000,0yyv001,dyyyydt令,二阶微分方程可以化为01210dyydtdykydt函数m文件写成functionDx=myfun(t,x)01dydtDxdydt01yxy变量与方程的量的对应关系方程翻译成m文件为:函数m文件写成functionDx=myfun(t,x)Dx=[0;0];%初始化Dx,使其为列数组k=1;Dx(1)=x(2);%对微分方程的描述Dx(2)=-k^2*x(1);编写完函数文件myfun.m后,就可以调用ode45命令,求解微分方程tspan=[0,2];y0=[010];[T,Y]=ode45(‘myfun’,tspan,y0)返回值有两个:T和Y。T为保存时间的列数组。Y为时间T所对应时刻的待求解变量的值。如果有N个方程组,Y就有N列。上述例子中,有两个一阶微分方程,那面此时Y就有两列。Y的第一列对应变量x(1),也就是前面的y(也就是y0)。Y的第二列对应变量x(2),也就是dy/dt。把解随时间的变化关系画出来plot(T,Y(:,1))%画Y的第一列数据,即yplot(T,Y(:,2))%画Y的第二列数据,即dy/dt初始条件直接写出数组形式[0,v0]000,0yyv
本文标题:关于ode45函数的说明
链接地址:https://www.777doc.com/doc-4571145 .html