Модифицированный алгоритм метода секущей Javascript?

Мне нужна ваша помощь, чтобы закодировать этот новый метод секущих в 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>

person Shopify lover    schedule 17.11.2018    source источник
comment
что ты уже испробовал? Мы можем помочь вам исправить код, который вы уже написали, но мы здесь не для того, чтобы писать код для вас.   -  person MTCoster    schedule 17.11.2018


Ответы (1)


Это похоже на разновидность метода Штеффенсена, известного своей тесной связью с процессом дельта-квадрата Эйткена. Это не столько метод секущих, сколько ньютоновский метод, заменяющий производную 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.

person Lutz Lehmann    schedule 18.11.2018