MATLAB的ode45函数实例求常微分方程数值解 | 您所在的位置:网站首页 › 变分方程的求解 › MATLAB的ode45函数实例求常微分方程数值解 |
ode45函数是常微分方程的数值求解。MATLAB提供了求常微分方程数值解的函数。当难以求得微分方程的解析解时,可以求其数值解,Matlab中求微分方程数值解的函数有七个:ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb 。 ode是Matlab专门用于解微分方程的功能函数。该求解器有变步长(variable-step)和定步长(fixed-step)两种类型。不同类型有着不同的求解器,其中ode45求解器属于变步长的一种,采用Runge-Kutta算法;其他采用相同算法的变步长求解器还有ode23。 ode45表示采用四阶-五阶Runge-Kutta算法,它用4阶方法提供候选解,5阶方法控制误差,是一种自适应步长(变步长)的常微分方程数值解法,其整体截断误差为(Δx)^5。解决的是Nonstiff(非刚性)常微分方程。 ode45是解决数值解问题的首选方法,若长时间没结果,应该就是刚性的,可换用ode15s试试。 [T,Y] = ode45(odefun,tspan,y0) [T,Y] = ode45(odefun,tspan,y0,options) [T,Y,TE,YE,IE] = ode45(odefun,tspan,y0,options) sol = ode45(odefun,[t0tf],y0...) [T,Y] = ode45(odefun,tspan,y0) odefun 是函数句柄,可以是函数文件名,匿名函数句柄或内联函数名 tspan 是区间 [t0 tf] 或者一系列散点[t0,t1,...,tf] y0 是初始值向量 T 返回列向量的时间点 Y 返回对应T的求解列向量 [T,Y] = ode45(odefun,tspan,y0,options) options 是求解参数设置,可以用odeset在计算前设定误差,输出参数,事件等 [T,Y] = ode45(odefun,tspan,y0,options) options 是求解参数设置,可以用odeset在计算前设定误差,输出参数,事件等 [T,Y,TE,YE,IE] =ode45(odefun,tspan,y0,options) 在设置了事件参数后的对应输出 TE 事件发生时间 YE 事件发生时之答案 IE 事件函数消失时之指针i sol =ode45(odefun,[t0 tf],y0...) sol 结构体输出结果实例1首先创建一个func2.m函数存放方程表达式 function Biubiu = func2(h, t) g = 9.8; Biubiu = (10000*pi/sqrt(2*g))*(h.^(3/2) - 2*(h.^(1/2))); end主程序 clc; clear all; close all; tspan = [1 0];%函数范围 t_1 = 0;%初值 [h,t] = ode45(@func2, tspan, t_1); plot(h,t);%绘图 xlabel('h值') ylabel('y值') title('一阶微分方程')结果 二阶微分方程实例定义的微分函数: function dydt = myfunY(t,Y) %定义函数 dydt = zeros(2,1); %初始化 dydt(1) = Y(2); dydt(2) = -4/7*Y(2)-5/7*Y(1)-1+6/7*sin(8*t); end主程序 clc; clear all; close all; tspan = [0,50];%变量t的范围 x0 = [0;0]; %初值 [t,x] = ode45(@myfunY,tspan,x0)%使用ode45函数 %画图 figure; plot(t,x(:,1),'r'); hold on; plot(t,x(:,2),'b'); xlabel('t');%设置x轴坐标 legend('x(t) ','dx/dt');%设置图例 data1 = [t x]; xlswrite('data1.xlsx',data1);运行结果 本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。 作 者 | 郭志龙 编 辑 | 郭志龙校 对 | 郭志龙 |
CopyRight 2018-2019 实验室设备网 版权所有 |