循环中的Javascript赋值乘法运算符作为数学函数

循环中的Javascript赋值乘法运算符作为数学函数,javascript,math,Javascript,Math,我在循环中进行以下计算: 我想把它重写为一个数学函数,如果可能的话,消除循环 通过JavaScript数学对象查看:我没有看到处理这个问题的方法 有没有更好的方法用数学公式得出最终结果?用数学解决: // v_1 = v_0 * f // p_1 = p_0 + v_1 // // p_2 = p_1 + v_1 * f // = p_0 + v_1 + v_1 * f // = p_0 + v_0 * f + v_0 * f * f // = p_0 + v_0 *

我在循环中进行以下计算:

我想把它重写为一个数学函数,如果可能的话,消除循环

通过JavaScript数学对象查看:我没有看到处理这个问题的方法

有没有更好的方法用数学公式得出最终结果?

用数学解决:

// v_1 = v_0 * f
// p_1 = p_0 + v_1
// 
// p_2 = p_1 + v_1 * f
//     = p_0 + v_1 + v_1 * f
//     = p_0 + v_0 * f + v_0 * f * f
//     = p_0 + v_0 * (f + f^2)
此时,您可能会看到p_n=p_0+v_0*f+f^2+f^3+…+f^n

从你的处方集中,你可能知道这是真的:

因此p_n=p_0+v_0*f*1-f^n/1-f

传输到JavaScript后,您会看到:

var n = 200;
var friction = 0.9925;
var velocity_0 = 10.0;
var position_0 = 100.0;

var velocity_n = velocity_0 * Math.pow(friction, n);
var position_n = position_0 + velocity_0 * friction * (1 - Math.pow(friction, n)) / (1 - friction);


alert(velocity_n);
alert(position_n);
用数学解决它:

// v_1 = v_0 * f
// p_1 = p_0 + v_1
// 
// p_2 = p_1 + v_1 * f
//     = p_0 + v_1 + v_1 * f
//     = p_0 + v_0 * f + v_0 * f * f
//     = p_0 + v_0 * (f + f^2)
此时,您可能会看到p_n=p_0+v_0*f+f^2+f^3+…+f^n

从你的处方集中,你可能知道这是真的:

因此p_n=p_0+v_0*f*1-f^n/1-f

传输到JavaScript后,您会看到:

var n = 200;
var friction = 0.9925;
var velocity_0 = 10.0;
var position_0 = 100.0;

var velocity_n = velocity_0 * Math.pow(friction, n);
var position_n = position_0 + velocity_0 * friction * (1 - Math.pow(friction, n)) / (1 - friction);


alert(velocity_n);
alert(position_n);

变量“velocity”是几何级数的项,请参见,而“position”是几何级数项的总和,因此您可以用以下内容替换代码中的for循环:

var power = Math.pow(friction, times);
position += velocity * (1 - power) * friction / (1 - friction);
velocity *= power;

然而,我不清楚移除for循环是否真的能产生更好的效率或精度。事实上,这取决于Math.pow实现细节,而Math.pow实现细节反过来也应该使用一些循环。

变量“velocity”是一个几何级数的项,例如,而“position”是一个几何级数的项之和,因此您可以用以下内容替换代码中的for循环:

var power = Math.pow(friction, times);
position += velocity * (1 - power) * friction / (1 - friction);
velocity *= power;


然而,我不清楚移除for循环是否真的能产生更好的效率或精度。事实上,这取决于Math.pow的实现细节,反过来也应该使用一些循环。

速度非常简单,因为它只有10*Math.pow0.9925200。总和将接近曲线下的面积积分加上100。@Pointy Good one!谢谢,至少我从中得到了一些东西loop@Pointy你有没有攻读过数学博士学位,或者这是你在大学里学到的东西?@AmitJoki-ha-ha-no,我根本不是数学家。我不得不说服自己,位置和真的是积分,我仍然只能部分确定:我还必须在控制台中测试Math.pow这个东西。@Pointy,但你仍然比我知道很多,比如curve。希望他们能在印度的高级课堂上教授这个:速度很简单,因为它只有10*Math.pow0.9925200。总和将接近曲线下的面积积分加上100。@Pointy Good one!谢谢,至少我从中得到了一些东西loop@Pointy你有没有攻读过数学博士学位,或者这是你在大学里学到的东西?@AmitJoki-ha-ha-no,我根本不是数学家。我不得不说服自己,位置和真的是积分,我仍然只能部分确定:我还必须在控制台中测试Math.pow这个东西。@Pointy,但你仍然比我知道很多,比如curve。希望他们能在印度的高级课堂上教授:太好了!非常感谢,有时我想知道我为什么要写代码:实际上,您需要对我的计算应用一个小的修正,将另一个速度0添加到位置,以使用第一次位置更改计算中更改的速度来解释您的循环。那么你的代码和我的代码的输出应该差不多,但是由于舍入的不同,可能不完全相等。这里有一个小错误,f+f^2+…+f^n=f*1+f+…+f^n-1=f*1-f^n/1-f。太好了!非常感谢,有时我想知道我为什么要写代码:实际上,您需要对我的计算应用一个小的修正,将另一个速度0添加到位置,以使用第一次位置更改计算中更改的速度来解释您的循环。那么,您的代码和我的代码的输出应该几乎相同,但可能由于舍入差异而不完全相等。在f+f^2+…+f^n=f*1+f+…+f^n-1=f*1-f^n/1-f中有一个小错误。实际上,没有循环时速度要快得多:。没有循环,ThanksIt实际上要快得多。谢谢