function main() % 后欧拉一阶法
clear all
clc
hold off
T = 1
dt = 10e-5;
y0=[2,1]'; % y[0] X, y[1] Y
minx=0.2;
n = (T-minx)/dt; %the number of required time steps
tspan = [minx,T]
a = -20201;
b = 20402;
c = 20000;
options = optimoptions ( 'fsolve', 'Display', 'off' );
m = length ( y0 );
t = zeros ( n + 1, 1 );
y = zeros ( n + 1, m );
dt = ( tspan(2) - tspan(1) ) / n;
t(1,1) = tspan(1);
y(1,:) = y0(:);
for i = 1 : n
to = t(i,1);
yo = y(i,:);
tp = to + dt;
%size(yo) % 初始的yo
yp = yo + dt * ( f (yo ) );
rhs= f(yp) ;
[yp, fval] = fsolve(@(yp)fsolve_test_1_function_1(yp,yo,dt,rhs), yp, options);
t(i+1,1) = tp;
y(i+1,:) = yp;
% return
end
plot(t,y(:,1),'r-')
hold on
plot(t,y(:,2),'b-')
title ("BFD1")
function res= f( yp)
a = -20201;
b = 20402;
c = 20000;
res (1,1)= a*yp(1,1) + b *yp(1,2);
res (1,2)= c*yp(1,1) + a *yp(1,2) ;
function F = fsolve_test_1_function_1(yp,yo,dt, rhs)
F(1) = yp(1)-yo(1)- dt* rhs(1);
F(2)= yp(1)-yo(1)- dt* rhs(2);
技术难题: 利用fsolve 反解y(n+1)
题目是:两个一阶微分方程
上面的是BDF1, 至于BDF2可联系博主。