Учеба и наука

Решение задачи - вопрос №262140

Помогите пожалуйста решить задачу на языке Си: нахождение приближенного значения методом касательных.есть готовое решение, но оно не работает, не понимаю где ошибка((.вот задание С заданной точностью ε найти приближенное значение корня уравнения f(x)=0 методом касательных. Считать, что требуемая точность ε достигнута, как только получено такое приближение хm (при m>0), для которого |f(xm)|<ε. В качестве f(x) рассмотреть функцию f(x)=ax4 – sin(bx)+ c. Начальное приближение к корню и параметры функции запрашиваются у пользователя. Процесс поиска корня должен отображаться на экране монитора.

апрель 28, 2012 г.

  • Всего ответов: 1

  • Валентина - аватарка

    Валентина

    3-й в

    #include  <stdio.h>
     #include  <conio.h>
     #include  <math.h>

    double a,b,c;

    double f(double x){
    return a*pow(x,4)-sin(b*x)+c;
    };

    double d1f(double x){
    return 4*a*pow(x,3)-b*cos(b*x);
    };

    void main(){

    double y, x;
    double x0;
    double eps;
    clrscr();
     printf(«a = „);
     scanf(“%lf»,&a);
     printf(«b = „);
     scanf(“%lf»,&b);
     printf(«c = „);
     scanf(“%lf»,&c);

    for (x0=-10; x0 < 10; x0+=1) {
     printf(«x = %lf y = %lf\n», x0, f(x0));
    }
    getch();

     printf(«x0 = „);
     scanf(“%lf»,&x0);
     printf(«eps = „);
     scanf(“%lf»,&eps);

    int i=1;
    do{
    x=x0;
    printf("\nx%i=%8.5lf",i,x);
    x0=x-f(x)/d1f(x);
    }while(fabs(x-x0)>eps);

    printf ("\n Kasatelnix: x=%.4lf y=%.6lf", x0, f(x0));

    getch();
    return;

    }

    Программу оттестировала. Она рабочая, но из-за параметров  a,b, c функция получается разная. Корни заранее не известны. Нужно задавать х0 поближе к реальному значению. Для этого выполняют операцию отделения корней. Нужно на определенном промежутке найти значения функции и проверить, есть ли смена знака у значения функции. Именно там имеется корень.

    В данной программе сначала просматривается промежуток от -10 до 10.

    Если ввести переметры а=-2 b=1 c=3

    то видно, что в районе -1 и 1 есть корни.

    После нажатия на Enter, можно вводить х0

    Вводила -1

    получила один корень

    за следующим разом вводила 1

    получила другой корень.

    Исходные данные нужно вводить осторожно, с пониманием. Т.к. вообще может не быть корней  или они будут на другом участке и первое значение х0 получится слишком далеким от реального значения, процесс вместо сходящегося превратится в расходящийся и результата не будет.

    Надеюсь, что ответ будет отмечен. 

    апрель 29, 2012 г.

Похожие вопросы