如何解决android中的线性方程?

时间:2014-04-03 12:08:14

标签: java math equation

我想知道如何在android中解决方程式

我的等式如下: -
SV = A*((1-R)^N) * (1-(R*(M/12)))

其中SV是某个值,
A是金额,
R是Rate,
N是年,
M是几个月。

我想找到 R

我不知道如何在编码中执行此操作 如果还需要任何其他 lib 文件,请与我们联系。

2 个答案:

答案 0 :(得分:1)

我尝试简化上述内容并达到了这一点,

SV = A * ((1-R)^N) * (1-(R*(M/12)))
SV = A * (1-R)^N * (1-R) * (1-(M/12))

(1-R)^ N+1 = SV/ (A * (1-(M/12))

(1-R) = (N+1) root of (SV/ (A * (1-(M/12)))

R = ((N+1) root of (SV/ (A * (1-(M/12)))) + 1

现在,RHS上的所有值都是已知的,可以替换。希望这可以帮助。我也热衷于输出。

答案 1 :(得分:0)

通过除以A重新排列公式,然后考虑没有A的右侧。也许R被约束在1和0之间?由此产生的右侧似乎在区间(0,1)上R单调递减,因此R的期望值可以通过二分搜索来近似。可以使用Java中的以下代码完成。

double R( double SV, double A, double N, double M){
  double DESIRED_ACCURACY = 0.01f; // customize this value
  double targetvalue = SV / A;     // left hand side after rearranging
  double upperbound = 1.0f;        // bounds for binary search
  double lowebound = 0.0f;

  double frac = M / 12.0f;

  while ( upperbound - lowebound > accuracy ){
      double mid = ( upperbound - lowerbound ) / 2.0f;
      double evaluation = Math.Pow( 1.0f - midpoint, N ) * ( 1.0f - midpoint * frac );
      if ( evaluation > targetvalue ){
        upperbound = midpoint;
      } else {
         lowerbound = midpoint;
      }
  }

  return ( upperbound - lowerboud ) / 2.0f;
}