我正试图解决一个在力{k1 + k2 * y,k3 * t}下找到物体位置这个非常简单的问题。这就是我进入Mathematica 7的原因:
DSolve[{
x''[t]*m == k1 + k2*y[t],
y''[t]*m == k3*t,
y'[0] == 0,
y[0] == 0,
x'[0] == 0,
x[0] == 0
}, {x[t], y[t]}, t]
我收到此错误:
DSolve :: deqn:在第一个参数{-C m(x ^ [Prime])[t] ^ 2 == k1 + k2 y [t]中预期而不是True的等式或等式列表, m(y ^ [Prime] [Prime])[t] == k3 t,True,y [0] == 0,True,x [0] == 0}。
似乎Mathematica对边界条件x'[0] == 0不满意。为什么会这样?
答案 0 :(得分:3)
答案 1 :(得分:2)
当我剪切并粘贴您已发布到M'ma 7.0.1并评估的代码时,我得到了结果
{{x[t] -> (60*k1*m*t^2 + k2*k3*t^5)/(120*m^2), y[t] -> (k3*t^3)/(6*m)}}
你的M'ma错误信息告诉我你在实际的M'ma输入中实际上只有一个素数(即x'[t]
)。它引用的等式-C m (x^[Prime])[t]^2==k1+k2 y[t]
与上面代码的第一行不匹配。
我还怀疑先前已将x'[0]和y'[0]分配为零,这导致x'[0]==0, ..., y'[0]==0
折叠为True
。最好的测试方法:杀死你的内核并重新评估上面的输入(在修复拼写错误之后)。
答案 2 :(得分:0)
belisarius和Eric Towers都建议杀死内核并重新评估。它们最有可能是正确的,因为某些东西有先前的定义。您可以通过
检查是否属实?<variable name>
作为杀死内核的替代方法,我建议通过
清除它们的值Clear[x, y, k1, k2, k3, m]
或者,如果你真的想摆脱变量的任何定义,那就是Remove
。这样,您就不必重新计算当前会话中的任何其他内容。