Статьи по c++

Метод Ньютона в C ++

Сегодня мы рассмотрим, как реализовать метод Ньютона для нахождения приближений или корней вещественной функции на C++.

Решение производных и уравнений

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

float solveEquation(float value) { // Уравнение: x^3 + 4x^2 -10 return pow(value, 3) + 4 * pow(value, 2) - 10; } float solveDerivative(float value) { // Уравнение: 2x^2 + 8x return pow((2 * value), 2) + 8 * value; }
Code language: JavaScript (javascript)

Эти функции будут вызываться для каждого значения в последующем цикле.

Метод Ньютона в C++

Далее мы можем реализовать метод Ньютона в C++ следующим образом:

#include <cmath> #include <iostream> using namespace std; float solveEquation(float value) { // Уравнение: x^3 + 4x^2 -10 return pow(value, 3) + 4 * pow(value, 2) - 10; } float solveDerivative(float value) { // Уравнение: 2x^2 + 8x return pow((2 * value), 2) + 8 * value; } int main() { int iterator = 0; float xi = 0.75; float xi_xi = 0; float last_xi = 0; printf("Метод Ньютона\n"); printf("Задача: x^3 + 4x^2 -10\n"); printf("Производная: 2x^2 + 8x\n\n\n"); printf("+----+-------------+-------------+-------------+-------------+-------" "-----+\n"); printf("+ i | xi | f(xi) | f'(xi) | xi + 1 | " "xi_xi |\n"); printf("+----+-------------+-------------+-------------+-------------+-------" "-----+\n"); while (1) { float fxi = solveEquation(xi); float _fxi = solveDerivative(xi); float xi_1 = xi - (fxi / _fxi); printf("|%3d |%12.8f |%12.8f |%12.8f |%12.8f |%12.8f|\n", iterator, xi, fxi, _fxi, xi_1, xi_xi); iterator++; last_xi = xi; xi = xi_1; xi_xi = abs(xi - last_xi); if (xi_xi == 0) { printf("+----+-------------+-------------+-------------+-------------+---" "---------+\n"); break; } } }
Code language: PHP (php)

Как вы можете видеть, мы создаем бесконечный цикл, который прервется только тогда, когда xi_xi будет равен 0. Также мы используем функцию abs.

Внутри цикла мы также вызываем solveEquation и solveDerivative для каждого значения, выводим и выводим их с помощью printf.

В нашем случае, если я запускаю программу, результат выглядит следующим образом:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *