寻找衍生品脚本

5

我急需一段JavaScript代码,能够计算函数的一阶导数。该函数仅包含一个变量x。

e.g. f(x) = x²
  f'(3) = 2x
因此,该脚本应返回结果为6,因为2*3 = 6
希望你能理解我的意思。

4
“一个函数”?是什么类型的函数?仅仅是多项式函数吗?三角函数?超越函数?它们的线性组合吗? - duffymo
哦,忘了提一下。它可以是任何类型的函数。 - enne87
3的平方是9,这是您想要做的吗? - Ibu
3
@lbu:请查看“函数的导数”。y = x^2 => 导数:2*x => f(3) = 2 * 3 => 6。 - Liangliang Zheng
调用此函数的用户是否知道适当的 epsilon 值以便您可以进行采样和计算? - Mike Samuel
6个回答

10
function slope (f, x, dx) {
    dx = dx || .0000001;
    return (f(x+dx) - f(x)) / dx;
}

var f = function (x) { return Math.pow(x, 2); }

slope(f, 3)

对于那些不是解析的、具有奇点或间断的函数来说,这并不是很有帮助。 - duffymo
.00000009.0000001 更好。 - Abdennour TOUMI

3

试试 nerdamer

它可以进行导数运算,还能使用它构建 JavaScript 函数。

//Derivative of x^2
var result = nerdamer('diff(x^2,x)').evaluate();
document.getElementById('text').innerHTML = "<p>f'(x)="+result.text()+'</p>';
//Build a new function
var f = result.buildFunction();
//Evalute f'(3)
document.getElementById('text').innerHTML += "<p>f'(3)="+f(3).toString()+'</p>';
<!-- Use https -->
<script src="https://nerdamer.com/js/nerdamer.core.js"></script>
<script src="https://nerdamer.com/js/Algebra.js"></script>
<script src="https://nerdamer.com/js/Calculus.js"></script>
<div id="text"></div>


那是最好的答案。 - João Paulo

3

1

我认为在JavaScript中没有这样的东西。

这里有一些简单的解决方案,您需要根据代码进行调整:

var func = function(x) {return Math.pow(x, 2)}
function der(x, func, prec, isLeft){
    if(prec == undefined) prec = 0.000000001;
    var y = func(x);
    if(isLeft){
        var x1 = x - prec;
    } else {
        x1 = x + prec;
    }
    var y1 = func(x1);
    return (y1-y)/(x1-x);
}

1
isLeft => 单侧导数:http://www.ies.co.jp/math/java/calc/limrl/limrl.html - Liangliang Zheng
谢谢,我会看一下的。 - enne87

0

您可以使用diff.js来做类似的事情。您可以这样做:

x = range(-10, 10, 0.01); // works only in latest browsers
f = diffXY(x, x.map(F));

这将以步长为0.01的方式在x = -10到10处给出您的函数F的导数f的值。


0

math.js 对于这个任务来说看起来非常不错。看看this的例子:

math.derivative('x^2', 'x')                     // Node {2 * x}
math.derivative('x^2', 'x', {simplify: false})  // Node {2 * 1 * x ^ (2 - 1)
math.derivative('sin(2x)', 'x'))                // Node {2 * cos(2 * x)}
math.derivative('2*x', 'x').evaluate()          // number 2
math.derivative('x^2', 'x').evaluate({x: 4})    // number 8
const f = math.parse('x^2')
const x = math.parse('x')
math.derivative(f, x)                           // Node {2 * x}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接