让我们说,问题相当简单 - 这是学位理论物理学生将要解决的问题。学生完成任务中最难的部分 - 功能阅读:解析语言自由形式文本,获取输入和输出变量以及输入变量值。
例如:一个关于运动方程的问题,其中有变量{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}}
我不确定,我正在接近问题。
答案 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)
让我展示西蒙方法的一些优点:
答案 2 :(得分:1)
你至少可以合理地解决这个问题。我看到一个很好的通用功能,我看到你得到的结果,这是最重要的。没有“正确”的解决方案,因为可能存在大量可接受的解决方案。在某些情况下,某些解决方案可能比其他解决方案更受欢迎,例如由于性能,而在其他情况下则可能是相反的方式。
我对你的例子唯一的轻微问题是可疑的参数名称'have'。 为什么你认为这是一个错误的方法?