Модифицированный метод Secant Javascript алгоритм? - PullRequest
0 голосов
/ 17 ноября 2018

Мне нужна ваша помощь для кодирования этого нового метода Secant в Javascript.

В методе secant используются два начальных параметра, в то время как для этого нового метода требуется только один начальный параметр.

Заранее спасибо.


Спасибо за ваш ответ [ред .: комментарий], вот что я пробовал, но это не сработало:

<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>

1 Ответ

0 голосов
/ 18 ноября 2018

Это похоже на вариацию метода Штеффенсена, известного своей тесной связью с процессом дельта-квадрата Эйткена.Это менее секущий метод и больше похожий на Ньютон метод, заменяющий производную 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 к корню.Метод Штеффенсена использует h(x)=f(x), в то время как цитируемый метод по некоторым причинам предпочитает h(x)=abs(f(x))/2.Ни один из них не является инвариантом при повторном масштабировании f, поэтому нет четких предпочтений, будут случаи, когда любой из методов имеет небольшое преимущество.

По отношению к методу Ньютона можно ожидать квадратичногосходимость к простым корням, если есть сходимость вообще.


Ваша проблема в том, что вы используете y как в качестве значения, так и в качестве функции.Помимо проблемы безопасности использования eval в предоставленных пользователем фрагментах кода, вам необходимо предоставить аргумент x для дополнения строки функции, а затем вызвать оценку строки функции, и этодля всех различных точек, для которых вы хотите значения функции.

Обсуждение того, как безопасно анализировать и оценивать строки выражений: Оценка строки как математического выражения в JavaScript .

...