如何存储方程/常数的冲击来求解任何元素方程或数值

时间:2011-03-06 21:48:17

标签: algorithm wolfram-mathematica

让我们说,问题相当简单 - 这是学位理论物理学生将要解决的问题。学生完成任务中最难的部分 - 功能阅读:解析语言自由形式文本,获取输入和输出变量以及输入变量值。

例如:一个关于运动方程的问题,其中有变量{a,d,t,va,vf},并且很少有函数描述你如何依赖彼此。因此,使用在适合你的拟合块中获得的技能,你可以使用方程式来获得你想要的输出变量。

在任何情况下,你可能想要的输出正好有2个(以工作为例):

1)该变量的等式

Physics[have_, find_] := Solve[Flatten[{
    d == vf * t - (a * t^2) /2, (* etc. *)
    have }], find]
Physics[True, {d}]
{{d -> (1/2)*(2*t*vf - a*t^2)}}

2)该变量的精确或一般数值

Physics[have_, find_] := Solve[Flatten[{
    d == vf * t - (a * t^2) /2, (* etc. *)
    have }], find]
Physics[{t == 9.7, vf == -104.98, a == -9.8}, {d}]
{{d->-557.265}}

我不确定,我正在接近问题。

3 个答案:

答案 0 :(得分:4)

我认为我可能更喜欢像

这样的方法
In[1]:= Physics[find_, have_:{}] := Solve[
  {d == vf*t - (a*t^2)/2 (* , etc *)} /. have, find]

In[2]:= Physics[d]
Out[2]= {{d -> 1/2 (-a t^2 + 2 t vf)}}

In[2]:= Physics[d, {t -> 9.7, vf -> -104.98, a -> -9.8}]
Out[2]= {{d -> -557.265}}

have变量作为替换规则列表给出。

顺便说一句,在这些类型的物理问题中,一件好事就是定义你的物理常数,如

N[g] = -9.8;

NValues生成g。然后

N[tf] = 9.7;N[vf] = -104.98;
Physics[d, {t -> tf, vf -> vf, a -> g}]
%//N

产生

{{d->1/2 (-g tf^2+2 tf vf)}}
{{d->-557.265}}

答案 1 :(得分:2)

让我展示西蒙方法的一些优点:

enter image description here

答案 2 :(得分:1)

你至少可以合理地解决这个问题。我看到一个很好的通用功能,我看到你得到的结果,这是最重要的。没有“正确”的解决方案,因为可能存在大量可接受的解决方案。在某些情况下,某些解决方案可能比其他解决方案更受欢迎,例如由于性能,而在其他情况下则可能是相反的方式。

我对你的例子唯一的轻微问题是可疑的参数名称'have'。 为什么你认为这是一个错误的方法?