首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一阶微分方程组的显式欧拉算法到隐式欧拉算法的MATLAB转换

一阶微分方程组的显式欧拉算法到隐式欧拉算法的MATLAB转换
EN

Stack Overflow用户
提问于 2018-12-03 11:25:20
回答 1查看 168关注 0票数 0

首先,我不能使用任何内置的ODE解算器来解决这个问题。我用显式的欧拉方法编写了这个系统的常微分方程,但是我需要用隐式的欧拉方法重写它。如果我只是把"i“改成"i+1”(例如"y(1,i)“to "y(1,i+1)"),那么答案就会大错特错。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2018-12-03 12:44:35

您的想法是正确的,但请记住,如果您将右侧的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的答案,其中显示了如何在单方程情况下执行此操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53587066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档