Решение уравнений методами Ньютона и итерации - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Написал программу, но она не хочет мне считать методом итерации. Помогите, пожалуйста, найти ошибку Функция 0.25*x*x*x + x - 1.2502 Интервал: от 0 до 2
Листинг программы
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <float.h>
  4. typedef double real_t;
  5. typedef real_t (*fun_t) (real_t);
  6. const real_t REAL_EPSILON = DBL_EPSILON;
  7. const real_t TARGET_A = 0.0, TARGET_B = 2.0;
  8. real_t target(real_t x)
  9. {
  10. return 0.25*x*x*x + x - 1.2502;
  11. }
  12. real_t target_xfx(real_t x)
  13. {
  14. return 1.2502 - 0.25*x*x*x;
  15. }
  16. real_t target_derivative(real_t x)
  17. {
  18. return 0.75*x*x + 1;
  19. }
  20. real_t newton(fun_t fun, fun_t derivative, real_t a_0, real_t b_0)
  21. {
  22. real_t a = a_0;
  23. real_t b = b_0;
  24. real_t x_0 = (a + b) / 2;
  25. real_t x = x_0 - (fun(x_0) / derivative(x_0));
  26. while (fabs(x - x_0) >= REAL_EPSILON)
  27. {
  28. x_0 = x;
  29. x = x_0 - (fun(x_0) / derivative(x_0));
  30. }
  31. return x;
  32. }
  33. real_t iterations(fun_t fun, real_t a_0, real_t b_0)
  34. {
  35. real_t a = a_0;
  36. real_t b = b_0;
  37. real_t x_0 = (a + b) / 2;
  38. real_t x = fun(x_0);
  39. while (fabs(x - x_0) >= REAL_EPSILON)
  40. {
  41. x_0 = x;
  42. x = fun(x_0);
  43. }
  44. return x;
  45. }
  46. int main()
  47. {
  48. int epswidth = ceil(-log10(REAL_EPSILON));
  49. printf(
  50. "target_2 = 0, x = %.*f; newton, x ? [%f, %f]\n",
  51. epswidth,
  52. newton(target, target_derivative, TARGET_A, TARGET_B),
  53. TARGET_A, TARGET_B
  54. );
  55. printf(
  56. "target_2 = 0, x = %.*f; iterations, x ? [%f, %f]\n",
  57. epswidth,
  58. iterations(target_xfx, TARGET_A, TARGET_B),
  59. TARGET_A, TARGET_B
  60. );
  61. return 0;
  62. }

Решение задачи: «Решение уравнений методами Ньютона и итерации»

textual
Листинг программы
  1. real_t target_xfx(real_t x)
  2. {
  3.     return 1.2502 - 0.25*x*x*x;
  4. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы