Реферат: Решение прикладных задач методом дихотомии

Кафедра

информатики ивычислительной информатики

Дисциплина«ИНФОРМАТИКА»

ОТЧЕТ

покурсовой работе

Тема:«Решение прикладных задач методом дихотомии »


Москва 2009г.


ЗАДАНИЕ НА КУРСОВУЮРАБОТУ

Вариант № 11.

Часть 1

Использование численныхметодов решения нелинейных уравнений, используемых в прикладных задачах.

Для выполнения 1 частинеобходимо:

·         Составитьпрограмму и рассчитать значение функции в левой части нелинейного уравнения длярешения задачи отделения корней;

/>·         Составитьлогическую схему алгоритма, таблицу идентификаторов и программу нахождениякорня уравнения методом дихотомии и методом Ньютона;

·         Ввести программув компьютер, отладить, решить задачу с точностью ε=0.0001 и вывести результат;

·         Предусмотреть впрограмме вывод на экран дисплея процесса получения корня.

Уравнение: />, [1,2];

Метод численного решения:метод дихотомии, метод хорд.

Решение.

Метод дихотомии

 

1. Этот метод позволяет отыскать кореньуравнения f(/>)=0 с любой наперед заданнойточностью ε.

Предполагается, чтоискомый корень уравнения уже отделен, т.е. указан отрезок [ a; b ] непрерывности функции f(x) такой, что наконцах этого отрезка функция принимает различные значения.

Суть метода в том, что [ a ;b ] делится пополам.Половина, где нет корня отбрасывается, адругая делиться на два.

1-й Шаг. Вычисление середины отрезка

 

/> 

Если f(/>)=0, то мы нашли точный корень уравнения.

Если f(/>) · f(x0)<0, то /> находится в интервале [/>] следовательно />; /> 

 Иначе />

2-й Шаг. Вычисление середины отрезка

 

/> 

Если f(/>)=0, то мы нашли точный корень уравнения.

Если f(/>· f(x1)<0, то /> ; />

Иначе />

n-ый Шаг. Вычисление середины отрезка

/>

Если f(/>)=0, то мы нашли точный корень уравнения.

Если f(/>·f(xn)<0, то /> ; />

Иначе />

 Условием нахождениякорня является:

 

 />

 />

 2. Нелинейноеуравнение и условие его решения:

 

 />, [1,2], ε = 0,0001;

 3. График функции:

 />


4. Схема алгоритма:

/> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> />  

5. Таблица идентификаторов:

 

Обозначение Идентификатор Тип n n int

/>

a double

/>

b double

/>

eps double x x double f(x) f(x) double

6. Листингпрограммы:

#include<stdio.h>

#include<math.h>

doublef(double x)

{

return 0.25*(pow(x,3))+x-1.2502;

}

int main(void)

{

int n=0;

double x,a=0.,b=2.,eps=0.0001;

 while(fabs(a-b)>2*eps)

{

 x=(a+b)/2,

 n++;

 printf(«step=%3ix=%11.8lf f(x)=%11.8lf\n»,n,x,f(x));

 if (f(x)==0)

{

printf(«Tothniikoreni x=%lf\nkolithestvo iteratsii n=%i\n»,x,n);

return 0;

}

 else if(f(a)*f(x)<0) b=x;

 else a=x;

}

 printf(«Resheniex=%11.8lf pri Eps=%lf\nkolithestvo iteratsii n=%i\n»,x,eps,n);

 return 0;

}

 

7. Листинг решения:

step= 1x= 1.50000000f(x)=-0.21392288

step= 2x=1.25000000f(x)=-0.00893133

step= 3x=1.12500000f(x)= 0.08982692

step= 4x=1.18750000f(x)= 0.04080796

step= 5x=1.21875000f(x)= 0.01602415

step= 6x=1.23437500f(x)= 0.00356738

step= 7x=1.24218750f(x)=-0.00267680

step= 8x=1.23828125f(x)= 0.00044659

step= 9x=1.24023438f(x)=-0.00111478

step= 10 x=1.23925781f(x)=-0.00033401

step= 11 x=1.23876953f(x)= 0.00005631

step= 12 x=1.23901367f(x)=-0.00013885

step= 13 x=1.23889160f(x)=-0.00004127

Reshenie x=1.23889160 pri Eps=0.0001

kolithestvoiteratsii n=13


Метод хорд:

 

1. Этот метод заключается в том, что кграфику функции проводится хорда. Находим точку пересечения с осью OX и опускаем из этой точки прямуюпараллельную OY. Из точки пе-ресечения прямой играфика проводим хорду и операция повторяется до тех пор, пока точкапересечения хорды с осью OX неприблизиться к корню функции до заданной погрешности.

Шаг первый:

 

 /> 

Нас интересует точкапересечения с осью ОХ.

Сделаем допущение: х=x1

 y=0

Введем обозначение

/>x0

f(/>)=f(x0)

Подставим в уравнение

 />

Отсюда

 x1=x0-/>

Шаг второй:

 

 x2=x1-/>

Для n-го шага:

 

 xn=xn-1-/>

Условием нахождениякорня является: />

2. Нелинейноеуравнение и условие его решения:

 

 />, [1,2], ε = 0,0001;

 3. График функции:

/>


Таблицаидетификаторов:

Обозначение Идентификатор Тип n n int

/>

a double

/>

b double

/>

eps double x x double f(x) f(x) double

6. Листингпрограммы:

 #include<stdio.h>

 #include<math.h>

 doublef(double x)

{

 return(0.25*(pow(x,3)))+x-1.2502;

}

int main(void)

{

int n=0;

doublex,a=1.,b=2.,eps=0.0001,xn;

xn=a;

while(fabs(xn-x)>eps)

 {

x=xn;

n++;

xn=x-f(x)*(b-x)/(f(b)-f(x));

printf(«step=%3ix=%11.8lf f(x)=%11.8lf\n»,n,xn,f(xn));

}

printf(«pribligennoeznathenie x=%lf pri Eps=%lf\nkolithestvo iterasii n=%i\n»,xn,eps,n);

return 0;

}

7. Листинг решения:

step= 1 x= 1.22334934 f(x)= 0.01236182

step= 2 x=1.23796144 f(x)= 0.00070219

step= 3 x=1.23879055 f(x)= 0.00003951

step= 4 x=1.23883720 f(x)= 0.00000222

pribligennoeznathenie x=1.238837 pri Eps=0.0001

kolithestvo iterasii n=4

 

Анализ результатов:

 

метод дихотомии

метод хорд

значение корня

1.23889160

1.23883720

значение функции

-0.00004127

0.00000222

количество итераций

13

4

Вывод: Метод дихотомии прост в реализации, нообладает малой скоростью сходимости по сравнению с методом хорд, что выражаетсяв количестве шагов. Метод хорд к тому же обладает большей точностью.


Часть 2

Решение дифференциальногоуравнения.

Вариант №11.

Метод Эйлера

1.Математическоеописание

 /> 

Геометрический смыслметода Эйлера состоит в следующем: дифференциальное уравнение определяет в точке(x0,y0) направление касательной к искомойинтегральной кривой

k=y'(x)=f(x,y)

Отрезок интегральнойкривой, соответствующий x/>(x,x1), x1=x+h заменяется участком касательной с угловымкоэффициентом k. Найденнаяточка (x1,y1) используется в качестве нового начального условия дляуравнения y(x1)=y1, в ней вновь вычисляется угловой коэффициент полянаправлений и процедура повторяется.

На n-ом шаге имеем точку (xn-1,yn-1), задающую начальное условие дляуравнения:

 

y(xn-1)=yn-1

Уравнение определяетугловой коэффициент касательной к интегральной кривой в этой точке

 />

Соответствующее уравнениекасательной:y-yn-1=k(x-xn-1)

Отсюда получаем значениех=хn<sub/>, соответствующее точке: хnn-1+h,

А именно: yn-yn-1=kn-1(xn-1+h-xn-1), или

yn=yn-1+h·kn-1

 yn=yn-1+h·f(xn-1,yn-1)

Полученная формулаявляется основной расчетной формулой метода Эйлера.

Процесс вычислений заканчивается,когда аргумент после очередного приращения выйдет за пределы исследуемогоотрезка />.

2. Дифференциальноеуравнение:

 

 /> x0= 0, y0= 1, xmax<sub/>=1, Δx = 0.01; 0.005; 0.001

3. Схема алгоритма:

/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> <td/> /> /> /> /> /> /> /> />

5. Таблица идентификаторов:

Обозначение Идентификатор Тип s s int i i int x x double

xmax

x_max double x1 x1 double

Δx/>

h[i] double y y double d d double f(x) f(x) double k k(x,y) double

6. Листинг программы:

#include<stdio.h>

 #include<math.h>

 doublek(double x,double y )

 {

return((x/exp(x*x))-2.*x*y);

 }

 doublef(double x)

 {

return((1./exp(x*x))*(1+x*x/2.));

 }

 intmain(void)

 {

int s,i;

 doublex,x1,x_max=1,y,d;

 doubleh[3]={0.01,0.005,0.001};

 FILE*file;

 file=fopen(«result.txt»,«w+»);

 for(i=0;i<=2;i++)

 { s=0;y=1;

 fprintf(file,«h(%i)=%lf\n»,i,h[i]);

 for(x=0;x<=x_max;x+=h[i])

 {

 s++;

 x1=x+h[i];

 y=y+k(x,y)*h[i];

  d=y-f(x1);//y- pribl. f(x)- tochnoe

 printf("step =%4.i x=%6.4lf y=%6.4lf yt=%6.4lf d=%10.8lf\n",s,x1,y,f(x1),d);

 fprintf(file,"step =%4.i x=%10.8lf y=%10.8lf yt=%10.8lf d=%10.8lf\n",s,x1,y,f(x1),d);

 }

 }

 fclose(file);

return 0;

/>


 />

 />

/>

 />


 />

Вывод: Интегрированнаясреда Visual С позволяет обрабатывать программы, записанные на языке С++.Для программирования циклических алгоритмов были использованыоператоры организации циклов с параметрами, решение использует форматируемыйвывод и оператор присваивания, а также использовались операторы вызова функций.Чем больше шаг, тем точнее вычисления.

еще рефераты
Еще работы по информатике, программированию