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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2013, 15:27   #1
Olga2002
 
Регистрация: 08.09.2013
Сообщений: 3
Восклицание Решение нелинейных уравнений за численными методами

Помогите пожалуйста написать программу на языке Си.
Задание:

1. Решить нелинейное уравнение с точностью 0,1% по методам:
- половинного деления;
- простой итерации;
- хорд;
- Ньютона;
- Рафсона.
уравнение : x+Cosx=1
2.Сравнить эффективность каждого метода по затратам времени
Вот пример программы только под другое уравнение,помогите пожалуйста написать код но под это уравнение: x+Cosx=1
(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;
}
}

Последний раз редактировалось Stilet; 29.09.2013 в 15:44.
Olga2002 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Делфи. Решение диф. ур.-ов численными методами Kvizl Помощь студентам 10 09.04.2013 18:46
Delphi. Решение системы нелинейных уравнений методами Ньютона и простых итераций. Помогите найти ошибку! Sianessa Помощь студентам 8 13.04.2012 17:32
Решение нелинейных уравнений Kazik Помощь студентам 0 13.02.2012 14:26
Решение систем линейных уравнений численными методами. Spyke Паскаль, Turbo Pascal, PascalABC.NET 7 02.10.2011 17:46
Решение нелинейных уравнений Альбина123456 Помощь студентам 0 18.12.2009 20:52