如何在 MATLAB 中定义微分函数中的代数方程?

计算科学 matlab 线法
2021-12-06 05:13:10

我想求解 7 个 pde,它们是时间、半径(j)和长度(i)的函数。我使用了行的方法,并及时将它们转换为颂歌系统,它变成了这样:

dy/dt=((y(i,j)y(i,j1))Δr)+(y(i,j)y(i1,j))Δx
我在 MATLAB 的一个函数中定义了所有方程。这是我的功能:
dy/dt=f(t,y)
然后我使用 ode15s 求解器求解这些 ode。现在边界条件之一是代数方程,它也应该在这个函数中。它是以下形式的代数方程:
y=f(r,x)
所以我认为如果方程具有相同的外观,我可以将它们全部写在一个函数中。所以我这样写:
(1010)×dy=yf(r,x)
我把这个小系数消除dy影响并求解代数方程,但 MATLAB 无法求解。我该如何定义这个函数?

1个回答

你的问题不是很清楚,但如果你的问题大致类似于

dxdt=f[x,y],g[x,y]=0

那么您只需要在调用 ode15s时使用质量矩阵。这就是你如何“告诉” Matlab 你有一个代数方程。

也就是说,在 Matlab 伪代码中,您可以将上述内容表示为

eye(n)*dxdt = f(x,y) % n=length(x)
  0   *dydt = g(x,y) % y is a scalar

您将作为单个系统传递给 ode15s

M*dzdt = h(z) % here z=[x;y] , h=[f;g], and M = blkdiag(eye(n),0)    

特定的语法将取决于特定的系统。上述链接中帮助的相关部分开始于它说:“如果质量矩阵M是单数,那么M(t,y)y=f(t,y)是微分代数方程组。”

(编辑:这里的解释可能更清楚。)