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

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

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

Нужно найти 2 корня. Уравнение y1 = 3^(x-1) - 4 - x = 0; На отрезке -5 2 должно быть 2 корня (-3.995 и 2.736)... Что здесь не так?
double ur1(double x){
    return pow(3, x-1)- 4 - x;
}
 
double pr1(double x){
    return log(3) * pow(3, x-1) - 1;
}
 
int main(int argc, char *argv[])
{
    double x = 0, en = 0;
    double e = 0.001;
    int a, b;
    printf("Enter a, b: ");
    scanf("%d %d", &a, &b);
    en = abs(a - b);
    x = (double)b;
    int i = 1;
    do{
        x = x - (ur1(x) / pr1(x));
        printf("%d - %lf\n", i, x);
        en = abs(x - b);
        b = x;
        i = i+1;
    }while((abs(en)) > e);
 
    return 0;
}

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

textual
Листинг программы
#include <stdio.h>
#include <math.h>
#include <locale.h>
 
double y(double x)
{   return pow(3, x-1)- 4 - x;
}
 
double dy(double x)
{   return log(3.) * pow(3, x-1) - 1;
}
 
int main()
{   setlocale (LC_CTYPE, "Russian");
    double a = -5., step = 1., e = 1.E-6;
    double x0, x1;
    int i;
    
    while (a < 3.)
    {   i = 0;
        x0 = a;
        x1 = x0-y(x0)/dy(x0);
        printf("Точка входа х0 = %.1lf\n", x0);
        while (fabs(x1-x0)>e)
        {   x0 = x1;
            x1 = x0-y(x0)/dy(x0);
            i++;
        }
        printf("\tКоличество итераций i = %3d\n\tПолученный корень х = %lf\n\n", i, x1);
        a += step;
    }
 
    getchar();
    return 0;
}

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

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

  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
Похожие ответы