matlab 龙格-库塔 法求解常微分方程
来源:互联网 发布:在网络上遇到诈骗 编辑:程序博客网 时间:2024/05/15 16:41
最近学习分室模型,里面碰到了用matlab 龙格-库塔 法求解常微分方程
研究了一阵子终于明白到底怎么实现了:
1. matlab 新建.m文件,编写龙格-库塔法求解函数
function [x,y]=runge_kutta1(ufunc,y0,h,a,b)%参数表顺序依次是微分方程组的函数名称,初始值向量,步长,时间起点,时间终点(参数形式参考了ode45函数)
n=floor((b-a)/h); %求步数
x(1)=a;%时间起点
y(:,1)=y0;%赋初值,可以是向量,但是要注意维数
for ii=1:n
x(ii+1)=x(ii)+h;
k1=ufunc(x(ii),y(:,ii));
k2=ufunc(x(ii)+h/2,y(:,ii)+h*k1/2);
k3=ufunc(x(ii)+h/2,y(:,ii)+h*k2/2);
k4=ufunc(x(ii)+h,y(:,ii)+h*k3);
y(:,ii+1)=y(:,ii)+h*(k1+2*k2+2*k3+k4)/6;
%按照龙格库塔方法进行数值求解
end
2.另外再新建一个.,m文件,定义要求解的常微分方程函数
function dx=fun1(t,x)
dx =zeros(2,1);%初始化列向量
dx(1) =0.08574*x(2)-1.8874*x(1)-20.17;
dx(2) =1.8874*x(1)-0.08574*x(2)+115.16;
3,再新建一个.m文件,利用龙格-库塔方法求解常微分方程
[T1,F1]=runge_kutta1(@fun1,[46.30 1296 ],1,0,20); %求解步骤2定义的fun1常微分方程,@fun1是调用其函数指针,从0到20,间隔为1
subplot(122)
plot(T1,F1)%自编的龙格库塔函数效果
title('自编的龙格库塔函数')
grid
运行步骤3文件即可得到结果,F1为估测值
或者可以调用matlab自带函数ode45求解
方法如下:
[T,F] = ode45(@fun1,0:1:20,[17.64 37800 ]);
subplot(121)
plot(T,F)%Matlab自带的ode45函数效果
title('ode45函数效果')
grid
- matlab 龙格-库塔 法求解常微分方程
- MATLAB数学建模(8)-常微分方程求解
- matlab求解常微分方程数值解
- Matlab基础学习-----------Matlab求解常微分方程边值问题的方法
- 求解常微分方程初值问题之Runge_Kutta法
- 求解常微分方程初值问题之Runge_Kutta_Fehlberg法
- 求解常微分方程边值问题之试射法
- 四阶龙格-库塔法求解常微分方程的初值问题-matlab通用程序
- MATLAB求解常微分方程:ode45函数与dsolve函数
- Matlab解常微分方程
- matlab求解微分方程
- 利用 Maxima 求解常微分方程
- 使用Maxima求解常微分方程~
- 求解常微分方程初值问题之多变量Runge_Kutta_Gill法
- 求解常微分方程初值问题之多步Euler预报-校正法
- 求解常微分方程初值问题之Milne预报-校正法
- 【整理】MATLAB之常微分方程
- 用MATLAB求解非线性微分方程
- 运行C-Free时出错,总是弹出窗口Control 'Message' has no parent window 的解决方案
- uboot详解
- c++中的引用与指针的区别
- opencv 读取 yuv(4:2:0)
- android 完全退出应用程序
- matlab 龙格-库塔 法求解常微分方程
- iOS segue
- 编程之美 1的数目【转】
- 经营好自己的生活,别人才会想靠近
- 使用cufon选择网页字体
- 泛型的一些随笔
- Data retrieval over DNS in SQL injection attacks
- 再不疯狂 我们就老了
- RFT无法回放故障排除记录