Решение уравнений методами Ньютона и итерации - C (СИ)
Формулировка задачи:
Написал программу, но она не хочет мне считать методом итерации.
Помогите, пожалуйста, найти ошибку
Функция 0.25*x*x*x + x - 1.2502
Интервал: от 0 до 2
#include <stdio.h> #include <math.h> #include <float.h> typedef double real_t; typedef real_t (*fun_t) (real_t); const real_t REAL_EPSILON = DBL_EPSILON; const real_t TARGET_A = 0.0, TARGET_B = 2.0; real_t target(real_t x) { return 0.25*x*x*x + x - 1.2502; } real_t target_xfx(real_t x) { return 1.2502 - 0.25*x*x*x; } real_t target_derivative(real_t x) { return 0.75*x*x + 1; } real_t newton(fun_t fun, fun_t derivative, real_t a_0, real_t b_0) { real_t a = a_0; real_t b = b_0; real_t x_0 = (a + b) / 2; real_t x = x_0 - (fun(x_0) / derivative(x_0)); while (fabs(x - x_0) >= REAL_EPSILON) { x_0 = x; x = x_0 - (fun(x_0) / derivative(x_0)); } return x; } real_t iterations(fun_t fun, real_t a_0, real_t b_0) { real_t a = a_0; real_t b = b_0; real_t x_0 = (a + b) / 2; real_t x = fun(x_0); while (fabs(x - x_0) >= REAL_EPSILON) { x_0 = x; x = fun(x_0); } return x; } int main() { int epswidth = ceil(-log10(REAL_EPSILON)); printf( "target_2 = 0, x = %.*f; newton, x ? [%f, %f]\n", epswidth, newton(target, target_derivative, TARGET_A, TARGET_B), TARGET_A, TARGET_B ); printf( "target_2 = 0, x = %.*f; iterations, x ? [%f, %f]\n", epswidth, iterations(target_xfx, TARGET_A, TARGET_B), TARGET_A, TARGET_B ); return 0; }
Решение задачи: «Решение уравнений методами Ньютона и итерации»
textual
Листинг программы
real_t target_xfx(real_t x) { return 1.2502 - 0.25*x*x*x; }
Объяснение кода листинга программы
- В функции
target_xfx
происходит вычисление целевой функцииf(x)
для уравнения x^3 - 1.2502 = 0 real_t target_xfx(real_t x) { return 1.2502 - 0.25xx*x; } - В функции используется переменная
x
типаreal_t
для хранения значения аргумента функцииf(x)
. - Значение функции
f(x)
вычисляется путем разности 1.2502 и значения x в кубе, умноженного на 0.25. - Возвращаемое значение функции
target_xfx
будет использоваться в качестве функции, которую необходимо приблизить методом Ньютона или итерации.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д