Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2013, 20:25   #1
Olga2002
 
Регистрация: 08.09.2013
Сообщений: 3
По умолчанию Нелинейные уравнения

Помогите пожалуйста написать код на языке Си,вот по такому заданию:
1. Решить нелинейное уравнение x+Cosx=1 c точностью 0,1% за методами:
- половинного деления;
- простой итерации ;
- хорд;
- Ньютона;
- Рафсона.
2. Сравнить эффективность каждого метода по затраченному времени.
вот пример программы только к другому примеру (x-1)^2=1/2 e^x
Файл nm2.C:

# include <stdio.h>
# include <math.h>
# include <stdlib.h>
# include <time.h>
# include <sys/time.h>
# define eps 0.001
# define E 2.71
# define n 100000

Функція знаходження розв’язку рівняння:

double Func(double x){
return (x-1)*(x-1)-0.5*pow(E,x);
}

Диференціал функції знаходження розв’язку рівняння:

double dFunc(double x){
return 2*(x-1)-0.5*pow(E,x);
}

Ітератор функції знаходження розв’язку рівняння:

double iFunc(double x){
return 0.5*(0.5*pow(E,x)-x*x);
}

Метод половинного поділу:

double PolovPodil(double a, double b){
double x;
int i;
for (i=0;i<n;i++)
do{
x=(a+b)/2;
if (Func(x)*Func(a)>0) a=x;
else b=x;
} while (((a-b)/2)>eps);
return x;
}

Метод хорд:

double Hordy(double a, double b){
double x=a,xn;
int i;
for (i=0;i<n;i++)
do{
xn=x;
x=a-((b-a)/(Func(b)-Func(a)))*Func(a);
if (Func(x)*Func(a)>0) a=x;
else b=x;
} while (abs(x-xn)>eps);
return xn;
}

Метод Ньютона:

double Newton(double a, double b){
double x,xn;
x=(a+b)/2;
int i;
for (i=0;i<n;i++)
do{
xn=x;
x=xn-Func(xn)/dFunc(xn);
if (Func(a)*Func(x)>0) a=x;
else b = x;
} while (abs(x-xn)>eps);
return x;
}

Метод Ньютона-Рафсона:

double NewtonRafson(double a){
double x=a;
int i;
for (i=0;i<n;i++)
do{
x=x-Func(x)/dFunc(x);
} while (Func(x)>eps);
return x;
}


Метод простої ітерації:

double Iteration(double a){
double x=a,xn;
int i;
for (i=0;i<n;i++)
do{
xn=x;
x=iFunc(xn);
} while (abs(x-xn)>eps);
return x;
}

Головна програма:

void main(){
double a=-100.0,b=0.0,h=0.5;
clock_t timer;
while (a<=100){
b=a+h;
if (Func(a)*Func(b)<0){
timer=clock();
printf("PolovPodil: %g\n",PolovPodil(a,b));
timer=clock()-timer;
printf("Processing (100000 times) time is: %.4f seconds\n",(double)timer/CLK_TCK);
timer=clock();
printf("Hordy: %g\n",Hordy(a,b));
timer=clock()-timer;
printf("Processing (100000 times) time is: %.4f seconds\n",(double)timer/CLK_TCK);
timer=clock();
printf("Newton: %g\n",Newton(a,b));
timer=clock()-timer;
printf("Processing (100000 times) time is: %.4f seconds\n",(double)timer/CLK_TCK);
timer=clock();
printf("NewtonRafson: %g\n",NewtonRafson(a));
timer=clock()-timer;
printf("Processing (100000 times) time is: %.4f seconds\n",(double)timer/CLK_TCK);
timer=clock();
printf("Iteration: %g\n",Iteration(a));
timer=clock()-timer;
printf("Processing (100000 times) time is: %.4f seconds\n",(double)timer/CLK_TCK);

}
a=b;
}
}
Olga2002 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нелинейные уравнения joks Паскаль, Turbo Pascal, PascalABC.NET 0 22.05.2011 10:13
Нелинейные системы Diplomnik Помощь студентам 2 13.12.2010 18:05
Уравнения varyat Паскаль, Turbo Pascal, PascalABC.NET 3 02.12.2010 08:19
Линейные и нелинейные структуры данных в Паскале катя123 Помощь студентам 0 03.01.2010 23:52
Нелинейные уравнения prikolist Общие вопросы C/C++ 15 07.06.2009 01:08