求教龙格库塔法解速率方程的实例

 火...
7.2k 8
发表于 2009-4-15 13:34:42|哈尔滨工程大学 | 查看全部 阅读模式
RT求教龙格库塔法解速率方程的实例,MATLAB实现。

回复|共 8 个

teapot Lv.8 发表于 2009-4-15 15:09:09|北京 | 查看全部
这个不是有ode的系列命令吗?直接用就行了啊
难道lz要自编的算法程序?
linjipeng Lv.8 发表于 2009-4-16 10:38:58|澳大利亚 | 查看全部
用matlab的帮助ode45,可以查到实例。误差个人觉得不用很在意,使用默认值就可以
jieweili Lv.7 发表于 2009-4-16 11:47:36|湖北 | 查看全部
%四阶Runge_kutta算法
x=zeros(1,10001);
for i=1:N
K1=h*[a*x(i)-b*x(i)^3+x3(i+1)];
K2=h*[a*(x(i)+K1/2)-b*(x(i)+K1/2)^3+x3(i+1)];
K3=h*[a*(x(i)+K2/2)-b*(x(i)+K2/2)^3+x3(i+1)];
K4=h*[a*(x(i)+K3)-b*(x(i)+K3)^3+x3(i+1)];
x(i+1)=x(i)+K1/6+K2/3+K3/3+K4/6;
end
istanbul Lv.8 发表于 2010-5-15 16:34:27|吉林 | 查看全部
??? Undefined function or variable 'N'.
泪光 Lv.2 发表于 2012-9-19 09:08:11|清华大学 | 查看全部
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
调用的子函数以及其调用语句:
function dy=test_fun(x,y)
dy = zeros(3,1);%初始化列向量
dy(1) = y(2) * y(3);
dy(2) = -y(1) + y(3);
dy(3) = -0.51 * y(1) * y(2);
对该微分方程组用ode45和自编的龙格库塔函数进行比较,调用如下:
[T,F] = ode45(@test_fun,[0 15],[1 1 3]);
subplot(121)
plot(T,F)%Matlab自带的ode45函数效果
title('ode45函数效果')
[T1,F1]=runge_kutta1(@test_fun,[1 1 3],0.25,0,15);%测试时改变test_fun的函数维数,别忘记改变初始值的维数
subplot(122)
plot(T1,F1)%自编的龙格库塔函数效
回复 支持 反对

使用道具 举报

hkgd Lv.6 发表于 2012-11-12 15:35:31|湖北 | 查看全部
回复 支持 反对

使用道具 举报

kcatchy Lv.2 发表于 2012-11-16 22:08:19|吉林 | 查看全部
其实如果不用ode45自己编写也很快,单步循环几十次就可以解决的。
回复 支持 反对

使用道具 举报

laisai0623 Lv.6 发表于 2012-11-21 19:56:24|广东 | 查看全部
个人认为不用ode45自己编写也好很快
回复 支持 反对

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

投诉/建议联系

admin@discuz.vip

未经授权禁止转载,复制和建立镜像,
如有违反,追究法律责任
  • 关注公众号
  • 添加微信客服
Copyright © 2026 光电工程师社区 版权所有 All Rights Reserved. Powered by Discuz! X5.0 Licensed 鄂ICP备17021725号-1
关灯 在本版发帖
扫一扫添加微信客服
返回顶部
快速回复 返回顶部 返回列表