我需要您的帮助才能将此New Secant Method编码为Javascript。
割线方法使用两个起始参数,而这种新方法仅需要一个起始参数。
谢谢。
谢谢您的回答[ed:comment],这是我尝试过的方法,但是没有用:
<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>
答案 0 :(得分:0)
这看起来像是Steffensen方法的一种变体,以与Aitken的平方平方过程密切相关而著称。它不是割线方法,而更像是牛顿式方法,用除数近似值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))
会在x
逼近根时强制向导数收敛。 Steffensen的方法使用h(x)=f(x)
,而由于某种原因,引用的方法更喜欢h(x)=abs(f(x))/2
。在f
的重新缩放下,它们都不是不变的,因此没有明确的优先选择,在某些情况下,这两种方法都具有轻微的优势。
根据与牛顿法的关系,如果根本没有收敛,人们将期望二次收敛到简单根。
您的问题是您同时使用y
作为值和函数。除了用户提供的代码段上的the security problem of using eval
以外,您还需要提供x
参数来补充函数字符串,然后调用函数字符串的求值,以及针对所有所需要点的求值功能值。
关于如何安全地分析和评估表达式字符串的讨论是Evaluating a string as a mathematical expression in JavaScript。