【问题标题】:MATLAB want to convert explicit euler algorithm to implicit euler algorithm for SYSTEM of 1st order ODEsMATLAB 想要将显式欧拉算法转换为一阶 ODE 系统的隐式欧拉算法
【发布时间】:2018-12-03 03:25:20
【问题描述】:

首先,我不能为此使用任何内置的 ODE 求解器。我用显式欧拉方法对这个 ODE 系统进行了编码,但我需要用隐式欧拉方法重写它。如果我只是将“i”切换为“i+1”(例如“y(1,i)”切换为“y(1,i+1)”),那么答案就大错特错了。

A_init= 4; 
B_init= 1.1;
C_init= 4;
y0 = [A_init; B_init; C_init];
h = 20/100;
n = 100;
t0 = 0;
tf = 20;
t = linspace(t0,tf,n);
y = zeros(numel(y0) , n); 
y(:, 1) = y0(:);

dAdt= @(a,b) 7.27*(b-a*b+ a-(8.375*10^-5)*a^3);
dBdt= @(b,a,c)(-b-a*b+c)/77.27;
dCdt= @(c,a) 0.4*(a-c);

for i = 1:n-1
    y(1,i+1) = y(1,i) +h*feval(dAdt,y(1,i),y(2,i));
    y(3,i+1) = y(3,i) +h*feval(dCdt,y(3,i),y(1,i));
    y(2,i+1) = y(2,i) +h*feval(dBdt,y(2,i),y(1,i),y(3,i));
end

【问题讨论】:

    标签: matlab system implicit explicit


    【解决方案1】:

    您的想法是正确的,但请记住,如果您将右侧的i 更改为i+1,您将在等式的两边 出现y(1,i+1), y(2,i+1), y(3,i+1)。这意味着您实际上必须在每一步求解y(1,i+1), y(2,i+1)y(3,i+1)。由于您的三个方程是耦合的,因此您必须在每个时间步求解一个非线性方程组,使用 fsolvefzero

    阅读此question 的答案,其中显示了如何针对单个方程情况执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多