【问题标题】:Formula replacement for iterative calculation迭代计算的公式替换
【发布时间】:2014-08-18 20:28:20
【问题描述】:

我被困在一个简单的计算中,我曾经在 for 循环中迭代计算。但是现在我不想再用循环来计算它了。

// What I know
double x0 =  p*J;
double x1 =  p*J -  p*J*J;
double x2 =  p*J -  p*J*J - p*J*J*J;
double x3 =  p*J -  p*J*J - p*J*J*J - p*J*J*J*J;

// What I want to know
double xi =  ?;

如何在不使用循环的情况下计算 xi?

【问题讨论】:

  • 你到底想做什么? xi 将收敛到 p*J - p*J*J/(1-J) 如果 |J| < 1 否则会发散,但你所说的问题没有意义。
  • @tmyklebu 为什么计算序列的部分和没有意义?
  • 顺便说一句,即使它已经得到回答,这个问题在 SO 上几乎是题外话。下次使用Maths SO
  • @Ordous:这就是他所追求的吗?我说不出来。
  • @tmyklebu 那么他所拥有的显然是一个系列(就此而言是一个简单的几何系列)。他在问如何计算没有循环的系列成员(即封闭形式表达式)。不是很重要,但对于一个简单的数学程序来说肯定是有意义的。

标签: loops math iteration formula taylor-series


【解决方案1】:

我们简化:

xi = pJ - pJ^2 - ... - pJ^(i+1)
   = pJ(1 - J - ... - J^i)
   = pJ(2 - 1 - J - ... - J^i)
   = pJ(2 - (1 + J + ... + J^i))

Wolfram Alpha 为我们提供了 1 + J + ... + J^i 的部分和;这是(J^(i + 1) - 1) / (J - 1)。我们将其代入我们的公式:

xi = pJ(2 - (J^(i + 1) - 1) / (J - 1))

您可以尝试以代数方式简化它,但您已经得到了 xi 的封闭式表达式。

【讨论】:

  • 这仅适用于 i=0..1。对于 i >= 2 的值,它会返回永远不正确的负值。例如,如果 p=1000, J=0.8 它应该返回 [800, 160, 32, 4.8] 但它确实返回 [800, 160, -352, -761,6]。你能确认一下吗?
  • @luftgewehrindianer 在您的示例中,请考虑i = 3。你给出的表达式是p*J - p*J*J - p*J*J*J - p*J*J*J*J。当我在计算器中执行此操作时,我得到:1000*0.8 - 1000*0.8*0.8 - 1000*0.8*0.8*0.8 - 1000*0.8*0.8*0.8*0.8 = 800 - 640 - 512 - 409.6 = -761.6。对于i = 2,它会给出-352。所以,我要说的是:您提供的公式给出的值与我的表达式相同。我不能说你的公式是否适合你的目的。
  • @luftgewehrindianer (正如 tmyklebu 在您的问题的 cmets 中正确指出的那样,对于J < 1,您的表达式会收敛到p*J - p*J*J/(1-J),或者在您的示例中大约是-2400 ......所以负值是很期待。
  • 你当然是对的。我在我的问题中的公式犯了一个错误,并没有注意到它。我的错。这点属于你!
猜你喜欢
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
相关资源
最近更新 更多