Нахождение корня тремя методами - 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 и количество итераций.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д