Найти 2 корня уравнения - C (СИ)

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

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

Нужно найти 2 корня. Уравнение y1 = 3^(x-1) - 4 - x = 0; На отрезке -5 2 должно быть 2 корня (-3.995 и 2.736)... Что здесь не так?
Листинг программы
  1. double ur1(double x){
  2. return pow(3, x-1)- 4 - x;
  3. }
  4. double pr1(double x){
  5. return log(3) * pow(3, x-1) - 1;
  6. }
  7. int main(int argc, char *argv[])
  8. {
  9. double x = 0, en = 0;
  10. double e = 0.001;
  11. int a, b;
  12. printf("Enter a, b: ");
  13. scanf("%d %d", &a, &b);
  14. en = abs(a - b);
  15. x = (double)b;
  16. int i = 1;
  17. do{
  18. x = x - (ur1(x) / pr1(x));
  19. printf("%d - %lf\n", i, x);
  20. en = abs(x - b);
  21. b = x;
  22. i = i+1;
  23. }while((abs(en)) > e);
  24. return 0;
  25. }

Решение задачи: «Найти 2 корня уравнения»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <locale.h>
  4.  
  5. double y(double x)
  6. {   return pow(3, x-1)- 4 - x;
  7. }
  8.  
  9. double dy(double x)
  10. {   return log(3.) * pow(3, x-1) - 1;
  11. }
  12.  
  13. int main()
  14. {   setlocale (LC_CTYPE, "Russian");
  15.     double a = -5., step = 1., e = 1.E-6;
  16.     double x0, x1;
  17.     int i;
  18.    
  19.     while (a < 3.)
  20.     {   i = 0;
  21.         x0 = a;
  22.         x1 = x0-y(x0)/dy(x0);
  23.         printf("Точка входа х0 = %.1lf\n", x0);
  24.         while (fabs(x1-x0)>e)
  25.         {   x0 = x1;
  26.             x1 = x0-y(x0)/dy(x0);
  27.             i++;
  28.         }
  29.         printf("\tКоличество итераций i = %3d\n\tПолученный корень х = %lf\n\n", i, x1);
  30.         a += step;
  31.     }
  32.  
  33.     getchar();
  34.     return 0;
  35. }

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

В этом коде решается задача нахождения корней уравнения методом Ньютона.

  1. В функции y(x) и dy(x) определены функции для уравнения и его производной.
  2. В функции main() определены начальное приближение x0, шаг итерации step и требуемая точность e.
  3. Цикл while исполняется пока текущее значение переменной a меньше 3.
  4. На каждой итерации цикла происходит следующее:
    • Переменная x0 принимает текущее значение a.
    • Вычисляется приближение к корню x1 с помощью формулы Ньютона x1 = x0 - y(x0)/dy(x0).
    • Если изменения x1 относительно x0 больше заданной точности e, то выполняется итерация.
    • На каждой итерации значение переменной a увеличивается на шаг step.
  5. После каждой итерации выводится сообщение с текущими значениями x0, x1 и количеством итераций i.
  6. После завершения цикла while программа завершается.

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


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

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

12   голосов , оценка 4.333 из 5

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

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

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