Нахождение корня тремя методами - C (СИ)
Формулировка задачи:
нужно создать программу нахождения корня нелинейного уравнения методами хорд,касательных,итераций в общем виде?)помогите пожалуйста
Решение задачи: «Нахождение корня тремя методами»
textual
Листинг программы
- #include <stdio.h>
- #include <conio.h>
- #include <math.h>
- int vibir;
- float f(float x)
- { if(vibir==2)
- return tan(0.55*x+0.1)-pow(x,2);
- else
- return pow(x, 3)-2* pow(x, 2)+7*x+3;
- }
- float f1(float x)
- { if(vibir==2)
- return (0.55)/(pow(cos(0.55*x+0.1), 2))-2*x;
- else
- return (3*pow(x, 2)-4*x+7);
- }
- float f2(float x)
- { if(vibir==2)
- return ((0.605*tan(0.55*x+0.1))/(pow(cos(0.55*x+0.1),2)))-2;
- else
- return (6*x-4);
- }
- int main()
- {
- int k=0;
- float a, b, c, d, e, e1=0, z,x, x1, x2, y1, y2, fa, fc;
- bool flag=true;
- printf("Vuberit` integral:\n");
- printf ( "1 -- pow(x, 3)-2* pow(x, 2)+7*x+3 \n");
- printf ( "2 -- tan(0.55*x+0.1)-pow(x,2) \n");
- scanf("%d", &vibir);
- if (vibir==2)
- {a=0.6; b=0.8; e=0.001;}
- else
- { a=-1; b=0;}
- e=0.001;
- // metod kombin
- k=0; flag=true;
- fa=f1(a);
- fc=f2(a);
- if ((fa*fc)>0)
- { x2=a; d=b; y2=b;}
- else
- {x2=b; d=a; y2=a; }
- do
- { k=k++;
- x1=x2;
- y1=y2;
- x2=d-f(d)*((x1-d)/(f(x1)-f(d)));
- y2=y1-f(y1)/f1(y1);
- e1=fabs(x2-y2);
- if (e1<=e)
- { z=(x2+y2)/2; flag=false;}
- }
- while (flag);
- printf("kombinovany metod: z=%f\n", z);
- printf("kilkist` iteraciy: k=%d\n\n", k);
- // metod prostuh iteraciy
- k=0; flag=true;
- x1=(a+b)/2;
- do
- {
- k=k++;
- x=x1;
- printf("x1=%f", x1);
- x1=x-1/(50*f(x)*(exp(x),-2));
- e1=fabs(x1-x);
- z=x1;
- }
- while(e1<=e);
- printf("metod prostuh iteraciy: x1=%f\n", x1);
- printf("kilkist` iteraciy: k=%d\n", k);
- getch();
- }
Объяснение кода листинга программы
- Объявлены переменные:
- vibir (тип int)
- a, b, c, d, e, e1, z, x, x1, x2, y1, y2, fa, fc (тип float)
- k (тип int)
- flag (тип bool)
- В функции main() выполняется следующее:
- Выводится приветствие и два варианта для выбора метода поиска корня.
- Переменная vibir инициализируется значением 0.
- Если выбран второй метод, то выполняется инициализация переменных a, b, e.
- Запускается цикл do-while, который выполняется до тех пор, пока флаг не станет false.
- В каждой итерации цикла выполняется:
- Вычисление значения функции f1(x) и f2(x) для текущего значения x.
- Если значения f1(x) и f2(x) имеют одинаковый знак, то выполняется вычисление нового значения x2 и y2.
- Если значения f1(x) и f2(x) имеют разные знаки, то выполняется вычисление нового значения x2 и y2.
- Вычисление значения e1, которое представляет разницу между x2 и y2.
- Если e1 меньше или равно e, то выполняется вычисление нового значения z.
- После завершения цикла выводится значение z и количество итераций.
- В функции main() также выполняется второй метод поиска корня - метод простых итераций.
- Запускается цикл do-while, который выполняется до тех пор, пока значение e1 не станет меньше или равно e.
- В каждой итерации цикла выполняется:
- Вычисление значения x1.
- Вычисление нового значения x1 на основе формулы x1 = x - 1/(50f(x)(exp(x),-2)).
- Вычисление значения e1.
- Если e1 меньше или равно e, то выполняется вычисление нового значения z.
- После завершения цикла выводится значение z и количество итераций.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д