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

Кафедра №83

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

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

 

 

КУРСОВАЯ РАБОТА

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


Москва 2009 г.


ЦЕЛЬ РАБОТЫ:

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

Время: 12 часов.

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

Работа состоит из 2-хчастей.

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

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

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

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

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

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

Задание на выполнениепервой части курсовой работы:


Вариант №21.

 

Уравнение: 0,25x3+x-1,2502=0:

 

Отрезок, содержащийкорень: [0;2].

I.         Математическоеописание численных методов решения

 

Метод деленияотрезка пополам (метод дихотомии).

Этот метод позволяет отыскатькорень уравнения с любой наперёд заданной точностью εε. искомый корень xуравнения уже отделен, т.е.указанотрезок [а, в] непрерывности функции f(x) такой, что на концах этого отрезка функция  f(x) принимает различные значения:

f(a)*f(b)>0

 

/>В началенаходится середина отрезка [ a, b ]:

и вычисляется значениефункции в точке с, т.е. находится  f(c). Если f(c)=0, то мы точно  нашли корень уравнения.Если же  f(c)≠0, то знак этой величины сравниваетсясо знаками функции y= f(x) в концах отрезка [ a, b ]. Из двухотрезков  [ a, с], [ с, b ] для дальнейшего рассмотрения оставляется тот, в концахкоторого функция имеет разные знаки. С оставленным отрезком поступаеманалогичным образом. расчет прекращается, когда оставленный отрезок будет иметьдлину меньше 2ε. В этом случае принимаем за приближенное значение корнясередину оставленного отрезка и требуемая точность будет достигнута.  

II.       Графикфункции.


Для выделения корней рассчитаемзначения функции на заданном отрезке [0,2] с шагом 0,0001 и по полученнымданным построим график функции.

/>

Как видно из рисункаграфик пересекает ось Х один раз, следовательно, на данном отрезке [ 0, 2] нашеуравнение имеет один корень.


Алгоритмынахождения корней уравнения

 

I.       Cтруктурная схема алгоритма:  Методдихотомии

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

f(a0), f(b0)

  /> /> /> /> /> /> />

 


                                                                            да

/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> />

x=c

  /> /> /> /> /> />

an+1=an ;  bn+1=c

  />

an+1= c ;  bn+1= bn

  /> /> /> /> /> /> />

n=n+1

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

X=an+bn

   2

  /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> />

 


Листинг программы имеетвид

 

#include<stdio.h>

#include<math.h> 

doublef(double x)

{

return0.25*(pow(x,3))+x-1.2502;

}

int main(void)

{

int n=0;

doublex,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;

}

/>

 

Метод хорд:

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

Шаг первый:

/> 

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

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

y=0

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

/>x0

f(/>)=f(x0)

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

/>

Отсюда

x1=x0-/>

Шаг  второй:

x2=x1-/>

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

xn=xn-1-/>

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


2. Нелинейноеуравнение и условие его решения: 0,25x3+x-1,2502=0:

 

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

 

/>

 

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

/> /> /> /> /> /> /> <td/> /> /> /> <td/> /> /> /> <td/> /> /> /> <td/> /> /> /> <td/> /> /> /> /> /> /> <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)

{

FILE*jad;

jad=fopen(«D:text.txt»,«w»);

int n=0;

doublex,a=0,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=%3i x=%11.8lf  f(x)=%11.8lf\n»,n,xn,f(xn));

fprintf(jad,«step=%3i x=%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);

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

fclose(jad);

return 0;

}

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

/>

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

 

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

метод хорд

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

-0.28766

-0.287700

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

-0.000045

-0.00002140

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

13

6

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


Часть 2

 

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

Вариант №21.

Задание на выполнениявторой части курсовой работы:

 

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

/>

 

Точное решениеуравнения:

/>

 

Начальные условия: x0= 0, y0=0, xmax=2.

 

Метод решения: метод Эйлера-Коши, Δx = 0,01; 0,005; 0,001.

Метод Эйлера-Коши

Метод Эйлера-Коши (илиусовершенствованный метод Эйлера) является методом второго порядка изаключается в следующем. Интегральная кривая на каждом шаге интегрированиязаменяется прямой с тангенсом угла наклона, равным среднему арифметическомутангенсов углов наклона касательных к искомой функции в начале и в конце шага.Вычисления проводятся в следующем порядке:

1.   Выбираем шаг интегрирования />.

2.   Полагаем номер шага />.

3.   Вычисляем />,находим оценку для приращения функции на этом шаге методом Эйлера />, />, вычисляем среднееарифметическое тангенсов углов наклона /> иокончательно получаем:

/>.

4.   Если />,то увеличиваем номер шага /> наединицу и повторяем п.3. В противном случае переходим к выполнению п.5.

5.   Оформляем полученный результат.

Достоинство метода –более высокая точность вычисления по сравнению с методом Эйлера. Недостаток –больший объем вычислений правых частей.

 

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

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

xmax

x_max float x1 x1 float

Δx/>

h[i] float y y float d d float f(x) f(x) float k k(x,y) float K1 f1 float K2 f2 float K3 f3 float K4 f4 float

 


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

/>


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

#include<stdio.h>

#include<math.h>

int s,i;

double x, x1, x_max=2,y, d, q;

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

doublek(double x,double y )

{

return((x)/(4+(pow(x,4))));

}

doublee(double x)

{

return0.25*atan(pow(x,2)/2);

}

doublef1=k(x,y);

doubleyw=y+f1*h[i];

doubler=x+h[i];

doublefl=k(r,yw);

int main(void)

{

FILE*sev;

sev=fopen(«E:result34.xls»,«w+»);

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

{

s=0; y=0;

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

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

{

s++;

x1=x+h[i];

y+=(f1+fl)*h[i]/2;

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

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

fprintf(sev,"\t step =\t%4.i\t x=\t%10.5lf\t y=\t%10.5lf\t yt=\t%10.5lf\td=\t%10.5f\n",s,x1,y,e(x1),d);

}

}

fclose(sev);

return 0;

}

/>

/>

/>

 

/>

/>

/>

/>

/>

/>

 

Вывод:

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

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