MATLAB 中非线性 ODE 的雅可比矩阵

Jacobian of non-linear ODE in MATLAB

我正在计算一个二体问题的 jacobian,它的定义如下

我已经建立了我的方程组如下

syms y1(t) y2(t) y3(t) y4(t)

r = sqrt(y1^2 + y2^2)
y3 = diff(y1)
y4 = diff(y2)
yd = [y3; y4; -y1/r^3; -y2/r^3]

jacobian(yd, [y1 y2 y3 y4])

但是,当我 运行 jacobian 函数时,出现以下错误

The second argument must be a vector of variables.

我做错了什么?

编辑:

我也尝试过为 t y(t) 参数化 y 但无济于事。

由于错误消息表明第二个参数必须是变量向量,而在您的情况下它是:[y1, y2, 1, 1]

也不需要将它们初始化为 symfun class 即 y1(t)y2(t)y3(t)y4(t),你可以将它们定义为 sym class 而不是 y1y2y3y4

因此,通过将它们初始化为 sym 并删除使 [​​=21=] 和 y4 等于 1 的行,即

syms y1 y2 y3 y4
r = sqrt(y1^2 + y2^2);
yd = [y3; y4; -y1/r^3; -y2/r^3];
jacobian(yd, [y1 y2 y3 y4])

你会得到这个输出:

[                                                    0,                                                    0, 1, 0]
[                                                    0,                                                    0, 0, 1]
[ (3*y1^2)/(y1^2 + y2^2)^(5/2) - 1/(y1^2 + y2^2)^(3/2),                        (3*y1*y2)/(y1^2 + y2^2)^(5/2), 0, 0]
[                        (3*y1*y2)/(y1^2 + y2^2)^(5/2), (3*y2^2)/(y1^2 + y2^2)^(5/2) - 1/(y1^2 + y2^2)^(3/2), 0, 0]