1

我目前正在编写一个程序,该程序将计算物理学中简单运动学方程的剩余变量。我需要有 4/6 个变量,然后我可以计算其他两个变量的结果。就目前而言,我正在使用布尔类型的数组来检测是否输入了哪个变量,并且我必须比较每种情况并重新编写三个公式中的一个来求解该变量。这最终会导致大量臃肿的代码。

这是我的代码中仅一个方程式的示例:



    if(variableEntered[1] == false && variableEntered[3] == false) {
        // calculate final velocity
       double fvNumber = getInitialVelocity() + (getAcceleration() * (getFinalTime() - getInitialTime())); 
       setFinalVelocity(fvNumber);
       // calculate final position
       double fpNumber = (getInitialPosition() + (getInitialVelocity() * (getFinalTime() - getInitialTime())) + 
           ((0.5 * getAcceleration()) * ((getFinalTime() - getInitialTime()) * (getFinalTime() - getInitialTime()))));
       setFinalPosition(fpNumber);
       System.out.printf("The final velocity is: %.2f m/s.", getFinalVelocity());
       System.out.println();
       System.out.printf("The final position is: %.2f meters.", getFinalPosition());
       System.out.println(); 
       }

 

我使用的三个方程是: Vf = Vi + a(tf - ti) Xf = Xi + Vi(tf - ti) + (1/2)a(tf - ti)2 Vf2 - Vi2 = 2a(Xf - Xi)

有什么方法可以缩短它或使它更容易实现吗?使用数组列表会以某种方式工作吗?

4

2 回答 2

1
  1. 使用 BigDecimal 来避免精度损失和因此导致的错误答案。
  2. 您可以将每个公式分解为自己的方法,并逐步完成每个部分。括号越多越难阅读。例如 deltaT = tf-ti; vf = vi + a*deltaT;

  3. 如果您使用 BigDecimal 或 Strings 或 Wrapper 类型(例如 Double),则可以检查 null 而不是保留布尔数组。

于 2014-05-14T02:24:02.890 回答
-1

您可以将其视为 6 个变量中的 3 个方程。在每个步骤中计算完整的梯度/导数,并使用自由变量的偏导数来执行牛顿步骤以达到一致的状态。

于 2014-05-14T11:25:39.147 回答