求教龙格库塔法解速率方程的实例
RT求教龙格库塔法解速率方程的实例,MATLAB实现。 这个不是有ode的系列命令吗?直接用就行了啊难道lz要自编的算法程序? 用matlab的帮助ode45,可以查到实例。误差个人觉得不用很在意,使用默认值就可以 %四阶Runge_kutta算法
x=zeros(1,10001);
for i=1:N
K1=h*;
K2=h*;
K3=h*;
K4=h*;
x(i+1)=x(i)+K1/6+K2/3+K3/3+K4/6;
end ??? Undefined function or variable 'N'. 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和自编的龙格库塔函数进行比较,调用如下:
= ode45(@test_fun,,);
subplot(121)
plot(T,F)%Matlab自带的ode45函数效果
title('ode45函数效果')
=runge_kutta1(@test_fun,,0.25,0,15);%测试时改变test_fun的函数维数,别忘记改变初始值的维数
subplot(122)
plot(T1,F1)%自编的龙格库塔函数效 {:6_143:}{:6_143:} 其实如果不用ode45自己编写也很快,单步循环几十次就可以解决的。 个人认为不用ode45自己编写也好很快
页:
[1]