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

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

Кафедра №83


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


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


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


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


Москва 2009 г.


ЦЕЛЬ РАБОТЫ:


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


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


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


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


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


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


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


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


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


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


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


Вариант №21.


Уравнение: 0,25
x
3

+
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
труктурная схема алгоритма: Метод дихотомии


















f(a0
), f(b0
)




да





























x=c





an+1
=an
; bn+1
=c





an+1
= c ; bn+1
= bn





n=n+1





X

=
a
n
+b
n


2




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


#include<stdio.h>


#include<math.h>


double f(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=%3i x=%11.8lf f(x)=%11.8lfn",n,x,f(x));


if (f(x)==0)


{


printf("Tothnii koreni x=%lfnkolithestvo iteratsii n=%in",x,n);


return 0;


}


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


else a=x;


}


printf("Reshenie x=%11.8lf pri Eps=%lfnkolithestvo iteratsii n=%in",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,25
x
3

+

>x
-1,2502=0:


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



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



















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>


double f(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;


double x,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.8lfn",n,xn,f(xn));


fprintf(jad,"step=%3i x=%11.8lf f(x)=%11.8lfn",n,xn,f(xn));


}


printf("pribligennoe znathenie x=%lf pri Eps=%lfnkolithestvo iterasii n=%in",xn,eps,n);


fprintf(jad,"pribligennoe znathenie x=%lf pri Eps=%lfnkolithestvo iterasii n=%in",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;


double h[3]={0.01,0.005,0.001};


double k(double x,double y )


{


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


}


double e(double x)


{


return 0.25*atan(pow(x,2)/2);


}


double f1=k(x,y);


double yw=y+f1*h[i];


double r=x+h[i];


double fl=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)=%lfn",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.8fn",s,x1,y,e(x1),d);


fprintf(sev," t step =t%4.it x=t%10.5lft y=t%10.5lft yt=t%10.5lft d=t%10.5fn",s,x1,y,e(x1),d);


}


}


fclose(sev);


return 0;


}











Вывод:


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

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

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

Слов:1331
Символов:15590
Размер:30.45 Кб.