javascript - JS 中的牛顿法不准确

标签 javascript math numerical-methods polynomial-math

所以,我试图编写一个 js 函数,它接受 3 个输入(多项式、猜测和极限)并使它们返回多项式的近似根。问题是,即使限制为 1000,结果仍然非常不准确。有人知道为什么会这样吗?

The Method

代码:

var derivativeOfATerm = function(arr) {
  var one = arr[0];
  var two = arr[1];
  var derivative = [];
  if (two <= 0) {
    return [0, 0];
  } else {
    derivative.push(one * two);
    derivative.push(two - 1);
    return derivative;
  }
};

var derivativeOfPolynomial = function(arr, order = 1) {
  var derivative = [];
  for (var i = 0; i < arr.length; i++) {
    //console.log(arr[i]);
    derivative.push(derivativeOfATerm(arr[i]));
  }
  if (order === 1) {
    return derivative;
  } else {
    return derivativeOfPolynomial(derivative, order - 1);
  }
};

var runPolynomial = function(poly, num) {
  var array = [];
  for (var i = 0; i < poly.length; i++) {
    array.push(Math.pow(num, poly[i][1]) * poly[i][0]);
  }
  return array.reduce((a, b) => a + b);
};

var newtonRootFind = function(polynomial, guess, limit = 10) {
  var derivative = derivativeOfPolynomial(polynomial);
  var previous = guess;
  var next;
  for (var i = 0; i < limit; i++) {
    next = previous - (runPolynomial(polynomial, previous)) / (runPolynomial(derivative, previous));
    previous = next;
    console.log("%o : x=%o, p(x)=%o", i+1, next, runPolynomial(polynomial, next));
  }
  return previous;
};

console.log("result x=",newtonRootFind([[1,2],[1,1],[-5,0]], 5, 10));

我只有 12 岁,所以尽量不要使用那么多技术术语。 例如,输入 [[1,2],[1,1],[-5,0]]x^2+x-5,它将返回 1.79128784747792,不够准确。它等于 4.79...,而它应该非常接近 5

最佳答案

正如评论中所指出的,所提供的代码按预期工作,问题是在检查解决方案时,x^2 用于正方形x*x

但是,在大多数类似 C 或 Java 的语言中,x^y 是按位“异或”、XOR,而不是幂运算。 x^y 作为幂运算的符号通常出现在计算机代数系统中。 python 或 gnuplot 等脚本语言倾向于使用 x**y

关于javascript - JS 中的牛顿法不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41307126/

相关文章:

c++ - 检查输入的数字,如果找不到数字则默认为一个值

javascript - 尝试计算在 svg 和 javascript 中创建的饼图切片的 Angular

c - 为什么我的一个功能运行得这么慢?

python - 对加速度进行数值积分的更好方法

matrix - 使用 CUDA 计算数百个小矩阵的特征值/特征向量

javascript - getJson 键/值参数作为变量语法问题

javascript - Mootools JSON : result outside of method/scope

javascript - ui.position 相对位置的错误值

javascript - 如何使内容脚本在内容脚本文件之前运行?

javascript - Angular 的平方根