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小时内删除。
作 者 | 郭志龙
编 辑 | 郭志龙
校 对 | 郭志龙