重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
function [Y] = RK45(t,X,f,h)
成都创新互联-专业网站定制、快速模板网站建设、高性价比百色网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式百色网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖百色地区。费用合理售后完善,十年实体公司更值得信赖。
K1=f(t,X);
K2=f(t+h/2,X+h/2*K1);
K3=f(t+h/2,X+h/2*K2);
K4=f(t+h,X+h*K3);
Y=X+h/6*(K1+2*K2+2*K3+K4);
end
以上是4阶龙格库塔法的代码:
自己写函数,存为f.m
function dxdt = f (t,x)
dxdt(1)=exp(x(1)*sin(t))+x(2);
dxdt(2)=exp(x(2)*cos(t))+x(1); % x(1)是你的f,x(2)是你的g
dxdt=dxdt(:);
end
自己给出t0,x0,h的值(初始时间,初值,步长)
如果求t0到t1的轨迹的话:给个例子如下
t0=0;t1=5;h=0.02;x0=[-1;-1];
T=t0:h:t1;X=zeros(length(x0),length(T));X(:,1)=x0;
for j=1:length(T)-1
X(:,j+1)=RK45(T(j),X(:,j),@(t,x) f(t,x),h);
end
plot(T,X(1,:));
hold on;
plot(T,X(2,:),'r');
具体参数自己设置
题主给出的运行龙格库塔法求微分方程为什么会出错?出错的根本原因自定义函数的变量与函数体里的变量不一致,即F=f(t,y)的y,不等同于Y(1)和Y(2)。正确的写法为
function F=f(t,Y)
x=Y(1);y=Y(2);
f1=-x^2*(5-y);
f2=y*(4-3*x);
F=[f1;f2];
end
完善代码可以得到如下图形。
经典龙格库塔公式的精度为p=2。亚当斯-巴什福思(Adams-Bashorth)法,亚当斯-莫尔顿(Adams-Monlton)法,都是常微分方程的积分方法。它们需要在每一次迭代时重新计算一遍等式右边的结果(非线性隐含问题忽略计算多个f(ω)值的可能性龙格-库塔(Runge-Kutta)法是一种不同的处理,作为多级方法为人们所知。它要求对于一个简单的校正计算多个f的值。
MATLAB求解x''+0.7x'+0.8x'|x'|+25.6x-25.6x³=0二阶微分方程组的方法,可以按下列步骤进行:
1、建立自定义函数func()
function
f
=
func(t,x)
%x''+0.7x'+0.8x'|x'|+25.6x-25.6x³=0
f(1)=x(2);
f(2)=25.6*x(1)^3-25.6*x(1)-0.8*x(2)*abs(x(2))-0.7*x(2);
f=f(:);
2、建立龙格库塔算法函数runge_kutta()
调用格式:[t,x]
=
runge_kutta(@(t,x)func(t,x),x0,h,a,b);
3、然后根据x和x'数据,绘制出x(t)、x′(t)的图形。
plot(x(:,1),x(:,2))