2016-12-29 37 views
1

我计算jacobian用于双体问题,这是像这样 two-body problem雅可比 <p>然而,当我运行<code>jacobian</code>功能我收到以下错误</p> <blockquote> <p>第二个参数必须是变量的矢量。</p> </blockquote> <p>我在做什么错?</p> <p>编辑:</p> <p>我也曾尝试进行参数<code>y</code>对于T <code>y(t)</code>无济于事。</p>

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

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]) 
非线性ODE的

回答

4

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

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

因此,通过初始化它们作为sym和删除您在其中进行y3y4等于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] 
+2

具体来说,'symfun'对象不是象征性的变量,但象征性的功能。 – horchler

相关问题