Решение численных задач методом Ньютона - PullRequest
0 голосов
/ 07 октября 2011

Я изучаю численный анализ, а также решаю алгоритмы, которые описаны в книге.Моя проблема связана с методом Ньютона.В общем, если дана некоторая функция и нам нужно найти root, как мы можем определить производную функции в коде?или даже ограничить?потому что, как вы знаете, метод Ньютона включает в себя производную и делает итерацию, как это.Предположим, что некоторая функция f(x) и начальное предположение, p0,, тогда p(n)=p(n-1)+f(p(n-1))/f'(p(n-1)) здесь f' обозначает производную от f.

Как я могу приблизить ее в коде?Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 07 октября 2011

Если вы хотите использовать метод Ньютона, вам нужно будет знать производную функции и кодировать ее.

В противном случае вы можете воспользоваться Secant Method , который не 'не требует знания производной.Но он сходится медленнее.

1 голос
/ 07 октября 2011

В зависимости от того, как задана функция, вы можете сделать пару вещей

  1. символическое дифференцирование, если у вас есть символическое представление вашей функции
  2. Числовое дифференцирование, если у вас есть только пары точка-значение
  3. Интерполировать с полиномом и дифференцировать это (символически, конечно)

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

Редактировать: Если вы уже знаете функцию до времени выполнения, то вычислите разность вручную и реализуйте ее как функцию. Вы также должны были реализовать f(x) как функцию, подобную этой

float f (float x) {
    // ...
}

И, таким образом:

float df_dx (float x) {
    // ...
}
...