Решение уравнений методами Ньютона и итерации - 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;
}

Объяснение кода листинга программы

  1. В функции target_xfx происходит вычисление целевой функции f(x) для уравнения x^3 - 1.2502 = 0 real_t target_xfx(real_t x) { return 1.2502 - 0.25xx*x; }
  2. В функции используется переменная x типа real_t для хранения значения аргумента функции f(x).
  3. Значение функции f(x) вычисляется путем разности 1.2502 и значения x в кубе, умноженного на 0.25.
  4. Возвращаемое значение функции target_xfx будет использоваться в качестве функции, которую необходимо приблизить методом Ньютона или итерации.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.25 из 5
Похожие ответы