Нахождение корня тремя методами - 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();
}

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

  1. Объявлены переменные:
    • vibir (тип int)
    • a, b, c, d, e, e1, z, x, x1, x2, y1, y2, fa, fc (тип float)
    • k (тип int)
    • flag (тип bool)
  2. В функции 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 и количество итераций.
  3. В функции main() также выполняется второй метод поиска корня - метод простых итераций.
    • Запускается цикл do-while, который выполняется до тех пор, пока значение e1 не станет меньше или равно e.
    • В каждой итерации цикла выполняется:
      • Вычисление значения x1.
      • Вычисление нового значения x1 на основе формулы x1 = x - 1/(50f(x)(exp(x),-2)).
      • Вычисление значения e1.
      • Если e1 меньше или равно e, то выполняется вычисление нового значения z.
    • После завершения цикла выводится значение z и количество итераций.

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


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

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

12   голосов , оценка 4.083 из 5
Похожие ответы