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

Кафедра №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.8lf\n»,n,x,f(x));

if (f(x)==0)

{

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

return 0;

}

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

else a=x;

}

printf(«Reshenie x=%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,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.8lf\n»,n,xn,f(xn));

fprintf(jad,«step=%3i x=%11.8lf f(x)=%11.8lf\n»,n,xn,f(xn));

}

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

fprintf(jad,«pribligennoe znathenie 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;

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)=%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\t d=\t%10.5f\n",s,x1,y,e(x1),d);

}

}

fclose(sev);

return 0;

}

Вывод:

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

еще рефераты
Еще работы по информатике