adams_wjl.asv

来自「(有源代码)数值分析作业,本文主要包括两个部分,第一部分是常微分方程(ODE)的」· ASV 代码 · 共 46 行

ASV
46
字号
function [x,y]=adams_wjl(odefile,xi,xf,yi,h,varargin)

% odefile is the filename of ode , xi<x <xf,  yi is the initial value, h is
% the step , varargin  is used by odefile

%
%  See also ODE23, ODE45, ODE113, ODE15S, ODE23S,
%           

x = [xi:h:xf]';		% Vector of x values
if x(end) ~= xf
   x(end+1) = xf;
end

d = diff(x);
% if you don't have this sentence,change d(i) to h is OK

% Starting values
% tic;

% [a,b] = rk_wjl(odefile,x(1),x(4),h,yi,varargin{:});
[a,b] = rk_wjl(odefile,x(1),x(4),yi,h,varargin{:});
%do not wr
y(1:4) = b;
for i = 1:4
   f(i) = feval(odefile,x(i),y(:,i),varargin{:});
end


% Solution
for i = 4:length(x)-1
   % Predictor
   y(i+1) = y(i) + d(i)/24 * (55*f(i) - 59*f(i-1) ...
      + 37*f(i-2) - 9*f(i-3));
   f(i+1) = feval(odefile,x(i+1),y(i+1),varargin{:});
   % Corrector
   y(i+1) = y(i) + d(i)/24 * (9*f(i+1) + 19*f(i) ...
      - 5*f(i-1) + f(i-2));
   f(i+1) = feval(odefile,x(i+1),y(i+1),varargin{:});
end
% time=toc;
% you use time out the programme



⌨️ 快捷键说明

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