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 而不是 y1
、y2
、y3
和 y4
因此,通过将它们初始化为 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]
我正在计算一个二体问题的 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 而不是 y1
、y2
、y3
和 y4
因此,通过将它们初始化为 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]