微分方程组:向后(隐)欧拉法(一、两步)matlab代码

该博客展示了如何利用后欧拉一阶法(BDF1)结合fsolve函数来求解两个耦合的一阶常微分方程。代码详细解释了时间步长设置、初始条件以及fsolve在反解过程中的应用。同时,提到了与BDF2方法的关联。
摘要由CSDN通过智能技术生成
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可联系博主。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值