Найти 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;
- }
Объяснение кода листинга программы
В этом коде решается задача нахождения корней уравнения методом Ньютона.
- В функции y(x) и dy(x) определены функции для уравнения и его производной.
- В функции main() определены начальное приближение x0, шаг итерации step и требуемая точность e.
- Цикл while исполняется пока текущее значение переменной a меньше 3.
- На каждой итерации цикла происходит следующее:
- Переменная x0 принимает текущее значение a.
- Вычисляется приближение к корню x1 с помощью формулы Ньютона x1 = x0 - y(x0)/dy(x0).
- Если изменения x1 относительно x0 больше заданной точности e, то выполняется итерация.
- На каждой итерации значение переменной a увеличивается на шаг step.
- После каждой итерации выводится сообщение с текущими значениями x0, x1 и количеством итераций i.
- После завершения цикла while программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д