您好 我正在尝试开发一个物理问题求解器。该程序将专门为Android编写,但这并不重要。我知道物理学的所有人都会熟悉这三个方程式。
vf = vi + a * t
y = vi * t + .5 * t ^ 2
vf ^ 2 = vi ^ 2 + 2 * a * y
我想开发一个应用程序,它使用这三个方程来解决用户在给定用户拥有的任何已知变量时想要的其他值。这是我遇到问题的地方。如果我每次都知道用户会有什么变量,我会没事的。但是,由于我没有,我需要我的程序能够重新排列方程式并在必要时替换单个变量来评估它们。
我知道答案可能是我需要为每个用户输入组合编写一组单独的代码,但如果有人知道另一种方式我会很感激,所以我不需要写出代码全部100左右的变化。
感谢您的帮助。
答案 0 :(得分:0)
if(vfField.getText() != "") && (viField.getText() != "") && (aField.getText() != "") && (tField.getText() != "") {
printf("you've already solved it!!")
}
if(vfField.getText() != "") && (viField.getText() != "") && (aField.getText() != "") && (tField.getText() == "") {
time = vf / (vi + a)
printf(time)
}
等..:)
答案 1 :(得分:0)
根据我的经验(编写几周的代码),编写自己的程序可以重新排列方程式非常耗时。在这种情况下,应避免使用它。
但是,我也不建议手动编码排列,因为那时有很多代码可以检查错误。就像在问题中第二个方程式中遗漏了a一样。而且,很难添加新的方程式。
我认为您应该使用外部方程求解器程序,例如maxima,matlab,mathematika等。将所有可能的组合未知数输入其中,以使用2个现有方程进行求解。 (第三个方程式取决于第一个方程式2,因此您将保留它)
最大代码如下:
solve([vf = vi + a*t, y= vi*t + .5*a*t^2], [vi,vf]);
solve([vf = vi + a*t, y= vi*t + .5*a*t^2], [vi,y]);
solve([vf = vi + a*t, y= vi*t + .5*a*t^2], [vi,t]);
solve([vf = vi + a*t, y= vi*t + .5*a*t^2], [vi,a]);
solve([vf = vi + a*t, y= vi*t + .5*a*t^2], [vf,y]);
solve([vf = vi + a*t, y= vi*t + .5*a*t^2], [vf,t]);
solve([vf = vi + a*t, y= vi*t + .5*a*t^2], [vf,a]);
solve([vf = vi + a*t, y= vi*t + .5*a*t^2], [y,t]);
solve([vf = vi + a*t, y= vi*t + .5*a*t^2], [y,a]);
solve([vf = vi + a*t, y= vi*t + .5*a*t^2], [t,a]);
由于涉及二次方,因此您会得到许多+-答案,其中许多答案显然是不正确的(例如返回负时间)。您可以手动选择正确的+-解决方案,因为数量不多。
或者,自动解决方案是从示例数字开始,求解原始方程,并丢弃所有没有给出相同数字的解决方案方程。