![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 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; } } |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
нелинейные уравнения | 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 |