⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rk4.m

📁 数学建模的源代码
💻 M
字号:
function [tout, yout] = rk4(ypfun, tspan, y0, h)
%定步长四阶Runge-Kutta法求常微分方程数值解
%[tout,yout] = rk4('ypfun', tspan, y0,h)
%    这里字符串ypfun是用以表示f(t, y)的M文件名,
%    tspan=[t0, tfinal]表示自变量初值t0和终值tf
%    y0表示初值向量y0,h是步长。 
%    输出列向量tout表示节点 (t0 , t1 , … , tn)'
%    输出矩阵yout 表示数值解,每一列对应y的一个分量
%例 解微分方程
%							y' = y-2t/y, y(0)=1, 0<t<1	(步长0.1)			
%  先写M函数quadeg5fun.m
%             function f=quadeg5fun(t,y)
%             f=y-2*t./y;
%             f=f(:);			%保证f为一个列向量
%  再用
%   [t,y]=rk4('quadeg5fun',[0,1],1,0.1)
%   plot(t,y); 
%
%Purpose: Solve differential equations by 4 order Runge_Kutta method.
% Synopsis:	[tout,yout] = rk4('ypfun', [t0, tfinal], y0,h) 
%	INPUT:
%	ypfun - String containing name of M-file user-supplied problem description.
%	        Call: f = ypfun(t,y) 
%	        t      - Time (scalar).
%	        y      - Solution column-vector.
%	        f      - Returned derivative column-vector; f(i) = dy(i)/dt.
%	t0    - Initial value of t.
%	tfinal- Final value of t.
%	y0    - Initial value vector.
%	h     - Step size
%	OUTPUT:
%	tout     - Returned integration time points (column-vector).
%	yout     - Returned solution, one solution column-vector per tout-value.
%
%	The result can be displayed by: plot(t, y).
%
%	See also EULER, ODE23, ODE45, ODEDEMO.

%	L.J.Hu  8-20-98

t=tspan(1):h:tspan(2);
y(:,1)=y0(:);

for i=1:length(t)-1,
   k1=feval(ypfun,t(i),y(:,i));
   k2=feval(ypfun,t(i)+h/2,y(:,i)+h*k1/2);
   k3=feval(ypfun,t(i)+h/2,y(:,i)+h*k2/2);
   k4=feval(ypfun,t(i)+h,y(:,i)+h*k3);
   y(:,i+1)=y(:,i)+h*(k1+2*k2+2*k3+k4)/6;
end

tout=t';yout=y';

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -