Решение задачи

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

Ответы

#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.04.12
Рекомендуем личную консультацию

Елена Васильевна

Меня зовут Елена Васильевна, я репетитор по математике из г. Гомель (Беларусь). Занимаюсь со школьниками (8 по 11 класс), а также со студентами.
Посмотреть всех экспертов из раздела Учеба и наука > Информатика
Пользуйтесь нашим приложением Доступно на Google Play Загрузите в App Store