Численное интегрирование и дифференцирование

Лабораторная работа по предмету «Информатика»
Информация о работе
  • Тема: Численное интегрирование и дифференцирование
  • Количество скачиваний: 56
  • Тип: Лабораторная работа
  • Предмет: Информатика
  • Количество страниц: 13
  • Язык работы: Русский язык
  • Дата загрузки: 2014-12-15 09:44:26
  • Размер файла: 349.11 кб
Помогла работа? Поделись ссылкой
Информация о документе

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

Если Вы являетесь автором текста представленного на данной странице и не хотите чтобы он был размешён на нашем сайте напишите об этом перейдя по ссылке: «Правообладателям»

Можно ли скачать документ с работой

Да, скачать документ можно бесплатно, без регистрации перейдя по ссылке:

Министерство образования и науки Российской Федерации
Калужский филиал федерального государственного бюджетного образовательного учреждения высшего профессионального образования
«Московский государственный технический университет
имени Н.Э. Баумана»
(КФ МГТУ им. Н.Э. Баумана)



ФАКУЛЬТЕТ "Фундаментальные науки"
КАФЕДРА "Программное обеспечение ЭВМ, информационные технологии и прикладная математика"



О Т Ч Е Т

ЛАБОРАТОРНАЯ РАБОТА №6

ДИСЦИПЛИНА: "Вычислительные алгоритмы"
ТЕМА: "Численное интегрирование и дифференцирование"



Выполнила: студент гр. ИТД-41 _________________


Проверила: _________________



Дата сдачи (защиты) лабораторной работы:

Результаты сдачи (защиты):
Количество рейтинговых баллов

Оценка


Калуга, 2014 г.
Цель работы:
Сформировать практические навыки нахождения производных первого и второго порядков и вычисления определенных интегралов в среде Matlab.

Постановка задачи
Вариант 14.
1. На интервале [-5; 5]через равные промежутки с шагом h построить 10, 100, 1000 узлов
аппроксимации для вычисления производной и интеграла.
2. Рассчитать значения производных первого порядка (полученных с различным шагом)
посредством правых и центральных разностей, производных второго порядка
посредством центральных разностей. Сравнить результаты с производными первого и
второго порядка, вычисленными аналитически.
3. Рассчитать значения определенных интегралов (полученных с различным шагом)
методом прямоугольников, средних, трапеций, Симпсона, сплайнов.
4. Рассчитать значение определенного интеграла методом Монте-Карло (для 10, 100, 1000
и 10000 генераций случайной величины).
5. Сравнить результаты численного интегрирования с результатами, вычисленными
аналитически.
6. Реализовать один из методов интегрирования при помощи команды parfor. Сравнить
время работы параллельной и обычной версий.
7. Составить отчет.



Формальное описание решения
1. Правая разность

2. Левая разность

3. Центральная разность
Для производных 1-ого порядка:
Для производных 2-ого порядка:

4. Формула прямоугольников
Формула левых прямоугольников
Формула правых прямоугольников
Формула средних прямоугольников

5. Формула трапеций

6. Формула Симпсона

7. Метод средних

8. Метод сплайнов

9. Метод Монте-Карло


Блок-схемы








Листинг текста программ
function x = MakeXArray( n )
a = -5;
b = 5;
h = (b-a)/n;
x(1) = a;
fori=2:(n+1)
x(i) = x(i-1) + h;
end
end
>> xNode10 = MakeXArray(10);
>> xNode100 = MakeXArray(100);
>> xNode1000 = MakeXArray(1000);

function y = MakeYArray( x, n, f )
fori=1:(n+1)
y(i) = f(x(i));
end;
end
f = inline ( -(2).^cos(x)+2.^sin(x) );
>> yNode10 = MakeYArray(xNode10,10, f);
>> yNode100 = MakeYArray(xNode100,100, f);
>> yNode1000 = MakeYArray(xNode1000,1000, f);

1. Расчёт производных
function derivative = FirstOrderDerivative( type, y, n )
a = -5;
b = 5;
h = (b-a)/n;
if( type == 1) % левые разницы
fori=2:(n+1)
derivative(i) = (y(i)-y(i-1))/h;
end
end
if( type == 2) % правыеразницы
fori=1:n
derivative(i) = (y(i+1)-y(i))/h;
end
end
if( type == 3) % центральныеразницы
fori=2:n
derivative(i) = (y(i+1)-y(i-1))/2*h;
end
end
if(type == 4) % центральные разницы
fori=2:n
derivative(i) = ( y(i+1)-2*y(i)+(i-1) )/h^2;
end
end
end

Сравнение результатов:
1. 10 узлов аппроксимации
1.1. Центральные разницы
0 -0.1616 -0.6355 -0.6498 -0.3915
0.6169 1.0644 0.1308 -0.5863 -0.6511

1.2. Решение встроенными средствами Matlab
1.1913 -0.4321 -0.6715 -0.6259 -0.6392
0.6931 1.5193 -0.0694 -0.7075 -0.6016 -0.7079

2. 1000 узлов аппроксимации
2.1. Центральные разницы
0 1.1837 1.1683 1.1528 1.1370
……………………………………………………………..
-0.0710 -0.0710 -0.0709 -0.0709 -0.0709

2.2. Решение встроенными средствами Matlab
1.1913 1.1760 1.1606 1.1449 1.1291
……………………………………………………………..
-0.7099 -0.7097 -0.7094 -0.7090 -0.7085

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

Вычисление интегралов

1. Формула трапеций
function s = TrapeziumMethod( y, n )
a = -5;
b = 5;
h = (b-a)/n;
s = 0;
fori=1:n
s = s + ( (y(i)+y(i+1))/2 )*h;
end;
end

2. Формула Симпсона
function s = SimpsonFormula( y, n )
a = -5;
b = 5;
h = (b-a)/n;
mul = 1;
s = 0;
fori=1:(n+1)
s = s + mul*y(i);
if( rem((i+1), 2) == 0)
mul = 4;
else
mul = 2;
end
if( (i+1) == (n+1) )
mul = 1;
end
end
s = s*(h/3);
end

3. Метод прямоугольников
function s = RectanglesMethod( type, x, y, n, f )
a = -5;
b = 5;
h = (b-a)/n;
s = 0; s1 = 0; s2 = 0; s3 = 0;
if( type == 1) %левые прямоугольники
fori=1:n
s = s + y(i)*h;
end
end
if( type == 2) %правые прямоугольники
fori=1:(n+1)
s = s + y(i)*h;
end
end
if(type == 3) %средние прямоугольники
fori=1:n
s = s + f((x(i) + h/2))*h;
end
end
if( type == 4)
fori=1:n
s1 = s1 + y(i)*h;
end
fori=1:(n+1)
s2 = s2 + y(i)*h;
end
fori=1:n
s3 = s3 + f((x(i) + h/2))*h;
end
s = (s1+s2+s3)/3;
end
end

4. Метод средних
function s = AveragesMethod( f, x, n )
a = -5;
b = 5;
s = 0;
h = (b-a)/n;
fori=1:(n+1)
s = s + f(x(i))*h;
end
end

5. Метод сплайнов
function s = SplineMethod( x2, y, n)
a = -5;
b = 5;
h = (b-a)/n;
s = 0; s2 = 0;
syms x;
df2 = inline ( log(2)*(2^cos(x)*cos(x) - 2^cos(x)*log(2)*sin(x)^2) + log(2)*(2^sin(x)*log(2)*cos(x)^2 - 2^sin(x)*sin(x)) );
fori=2:(n+1)
s = s + h*(y(i-1)+y(i));
end
s = 1/2 * s;
fori=3:(n+1)
s2 = s2 + h^3*(1/2 * df2(x2(i-2)) + 1/2 * df2(x2(i-1)) );
end
s2 = s2/12;
s = s - s2;
end

6. Метод Монте-Карло
function s = MonteCarloMethod( n, f )
a = -5;
b = 5;
h = (b-a)/n;
s = 0;
fori=1:(n+1)
g = rand;
x(i) = a + g*(b-a);
s = s + f(x(i));
end;
s = s*h;
end
Вывод: наиболее точным методом вычисления интеграла является метод Симпсона; чем больше узлов аппроксимации, тем точнее получается результат.

7. Реализацияметодатрапеций при помощи команды parfor
>>matlabpool (open,2);
tic
fori=1:1000
s = s + ( (yNode1000(i)+yNode1000(i+1))/2 )*h;
end;
time2 = toc;
matlabpool close;
>> time2
time2 =
0.0186

>>tic
>>TrapeziumMethod(yNode1000, 1000);
>> time1 = toc
time1 =
16.0212


Результат работы программ

1. Решение интеграла встроенными функциями
1.1. >> F = @(x)-2.0.^cos(x)+2.0.^sin(x);
Q = quad(F,-5,5);
>> Q
Q =
1.5406

1.2. >> x = -5 : 0.01 : 5;
y = -(2).^cos(x)+2.^sin(x);
disp(trapz(x,y))
1.5406

2. Формулатрапеций
>> s = TrapeziumMethod( yNode10, 10 )
s =
1.3778

>> s = TrapeziumMethod( yNode100, 100 )
s =
1.5390

>> s = TrapeziumMethod( yNode1000, 1000 )
s =
1.5406

3. Формула Симпсона
>> s = SimpsonFormula( yNode10, 10 )
s =
1.5332

>> s = SimpsonFormula( yNode100, 100 )
s =
1.5406

>> s = SimpsonFormula( yNode1000, 1000 )
s =
1.5406

4. Метод средних
>> s = AveragesMethod( f, xNode10, 10 )
s =
1.3897

>> s = AveragesMethod( f, xNode100, 100 )
s =
1.5402

>> s = AveragesMethod( f, xNode1000, 1000 )
s =
1.5407

5. МетодМонте-Карло
>>s =MonteCarloMethod( 1000, f )
s =
1.5503

6. Методсплайнов
>>s =SplinMethod( xNode10, yNode10, 10)
s =
1.5151

>>s =SplinMethod( xNode100, yNode100, 100)
s =
1.5406

>>s =SplinMethod( xNode1000, yNode1000, 1000)
s =
1.5406

7. Методпрямоугольников
>>s =RectanglesMethod( 4, xNode10, yNode10, 10, f )
s =
1.7020

>>s =RectanglesMethod( 4, xNode100, yNode100, 100, f )
s =
1.5640

>>s =RectanglesMethod( 4, xNode1000, yNode1000, 1000, f )
s =
1.5430


Вывод
В ходе выполнения лабораторной работы были получены теоретические знания и практические навыки по численному интегрированию и дифференцированию.