0

我需要你的帮助将这个新割线方法编码成 Javascript。

割线法使用两个起始参数,而这种新方法只需要一个起始参数。

先感谢您。


感谢您的回答[编辑:评论],这是我尝试过的,但它不起作用:

<script>
    var x
    var pi = 3.141592653589793, e = 2.7182818284590452;

    function meth_sec() {
        with (Math) {
            f = "sin(x)-x/2"; a = 1; s = 1;
            f = prompt("your function f(x) = ", f)
            while (s >= 0) {
                a = eval(prompt("type the approximation. = ", a))                   
                x = a;                     
            }
        }
    } function iter() {
        with (Math) {
            y = eval(f)
            x = a + (abs(y)/2) - abs(y)*((y(a+abs(y/2)))/((y(a+abs(y/2)))-y)
            return x
        }
    }
    function sgn(y) { return (y > 0) - (y < 0) }

</script>
4

1 回答 1

0

这看起来像是 Steffensen 方法的一种变体,以与 Aitken 的 delta-squared 过程密切相关而闻名。它不是一种割线方法,而是一种类似牛顿的方法,用除差近似代替导数f'(x),得到公式x_new = x-f(x)/f'(x)(f(x+h(x))-f(x))/h(x)

x_new = x - (f(x)*h(x))/(f(x+h(x))-f(x))
      = x + h(x) + (f(x+h(x))*h(x))/(f(x+h(x))-f(x))

当接近根时,在哪里h(x)=O(f(x))强制收敛到导数。xSteffensen 的方法使用h(x)=f(x),而引用的方法出于某种原因更喜欢h(x)=abs(f(x))/2. 两者在 的重新缩放下都不是不变的f,因此没有明确的偏好,在某些情况下,任何一种方法都有轻微的优势。

通过它与牛顿方法的关系,如果存在收敛,人们会期望二次收敛到简单的根。


您的问题是您y既将其用作价值又用作功能。除了在用户提供的代码片段上使用的安全问题eval外,您需要提供x参数来补充函数字符串,然后调用函数字符串的评估,以及您想要函数值的所有不同点。

关于如何安全地解析和评估表达式字符串的讨论是在 JavaScript 中将字符串评估为数学表达式

于 2018-11-18T10:28:54.330 回答