Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №32.doc
Скачиваний:
12
Добавлен:
01.05.2014
Размер:
129.02 Кб
Скачать

Void main ()

{

SAMPLE;//49

double res;

double pi = 3.14159265359;

twopi = 2.0 / sqrt(pi);

lower = 0.0;

upper = 1;

if (upper >= 0.0)

{

res = simps(lower,upper,tol);

erf = twopi * res;

printf("%f", upper);

printf("%f\n", erf);

}

SAMPLE;//62

}

Отчет о результатах измерений для программы LABMET.EXE.

Создан программой Sampler ( версия от Feb 15 1999 )

1995-98 (C) сПбГэту, Мойсейчук Леонид.

Список обработанных файлов.

----------------------------------------------------------------------

NN Имя обработанного файла

----------------------------------------------------------------------

1. LABMET.CPP

----------------------------------------------------------------------

Таблица с результатами измерений ( используется 2 из 416 записей )

----------------------------------------------------------------------

Исх.Поз. Прием.Поз. Общее время(мкс) Кол-во прох. Среднее время(мкс)

----------------------------------------------------------------------

1 : 49 1 : 62 126.55 1 126.55

----------------------------------------------------------------------

Профилирование программы интегрирования методом Симпсона

(измерение времен выполнения функциональных участков)

#include <iostream.h>

#include <conio.h>

#include <stdio.h>

#include <math.h>

#include "Sampler.h"

const double tol = 1.0E-4;

double sum, upper, lower, erf, twopi;

double fx(double x)

{

return exp(-x * x);

}

double simps(double lower,double upper,double tol)

{

int i;

double x,delta_x,even_sum,odd_sum,end_sum, sum1;

int pieces;

double sum;

pieces = 2;

delta_x = (upper - lower) / pieces;

odd_sum = fx(lower + delta_x);

even_sum = 0.0;

end_sum = fx(lower) + fx(upper);

sum = (end_sum + 4.0 * odd_sum) * delta_x / 3.0;

printf("%d", pieces);

printf("%f", sum);

do

{

pieces = pieces * 2;

sum1 = sum;

delta_x = (upper - lower) / pieces;

even_sum = even_sum + odd_sum;

odd_sum = 0.0;

for (i = 1; i <= (pieces / 2); i++)

{

x = lower + delta_x * (2.0 * i - 1.0);

odd_sum = odd_sum + fx(x);

}

sum = (end_sum + 4.0 * odd_sum + 2.0 * even_sum) * delta_x / 3.0;

}

while (abs(sum - sum1) > abs(tol * sum1));

return sum;

}

Void main ()

{

double res;

double pi = 3.14159265359;

SAMPLE;//51

twopi = 2.0 / sqrt(pi);

SAMPLE;//53

lower = 0.0;

SAMPLE;//55

upper = 1;

SAMPLE;//57

if (upper >= 0.0)

{

SAMPLE;//60

res = simps(lower,upper,tol);

SAMPLE;//62

erf = twopi * res;

SAMPLE;//64

printf("%f", upper);

SAMPLE;//66

printf("%f\n", erf);

SAMPLE;//68

}

SAMPLE;//70

}

Отчет о результатах измерений для программы LABMET.EXE.

Создан программой Sampler ( версия от Feb 15 1999 )

1995-98 (C) сПбГэту, Мойсейчук Леонид.

Список обработанных файлов.

----------------------------------------------------------------------

NN Имя обработанного файла

----------------------------------------------------------------------

1. LABMET.CPP

----------------------------------------------------------------------

Таблица с результатами измерений ( используется 10 из 416 записей )

----------------------------------------------------------------------

Исх.Поз. Прием.Поз. Общее время(мкс) Кол-во прох. Среднее время(мкс)

----------------------------------------------------------------------

1 : 51 1 : 53 2.51 1 2.51

----------------------------------------------------------------------

1 : 53 1 : 55 1.68 1 1.68

----------------------------------------------------------------------

1 : 55 1 : 57 0.00 1 0.00

----------------------------------------------------------------------

1 : 57 1 : 60 0.84 1 0.84

----------------------------------------------------------------------

1 : 60 1 : 62 60.34 1 60.34

----------------------------------------------------------------------

1 : 62 1 : 64 0.84 1 0.84

----------------------------------------------------------------------

1 : 64 1 : 66 33.52 1 33.52

----------------------------------------------------------------------

1 : 66 1 : 68 23.47 1 23.47

----------------------------------------------------------------------

1 : 68 1 : 70 0.00 1 0.00

----------------------------------------------------------------------

Вывод: Наиболее ресурсоемкая операция - вывод на экран. Удалим эти операции.

Профилирование оптимизированной программы интегрирования методом Симпсона

(измерение времени полного выполнения программы)

#include <iostream.h>

#include <conio.h>

#include <stdio.h>

#include <math.h>

#include "Sampler.h"

const double tol = 1.0E-4;

double sum, upper, lower, erf, twopi;

double fx(double x)

{

return exp(-x * x);

}

double simps(double lower,double upper,double tol)

{

int i;

double x,delta_x,even_sum,odd_sum,end_sum, sum1;

int pieces;

double sum;

pieces = 2;

delta_x = (upper - lower) / pieces;

odd_sum = fx(lower + delta_x);

even_sum = 0.0;

end_sum = fx(lower) + fx(upper);

sum = (end_sum + 4.0 * odd_sum) * delta_x / 3.0;

printf("%d", pieces);

printf("%f", sum);

do

{

pieces = pieces * 2;

sum1 = sum;

delta_x = (upper - lower) / pieces;

even_sum = even_sum + odd_sum;

odd_sum = 0.0;

for (i = 1; i <= (pieces / 2); i++)

{

x = lower + delta_x * (2.0 * i - 1.0);

odd_sum = odd_sum + fx(x);

}

sum = (end_sum + 4.0 * odd_sum + 2.0 * even_sum) * delta_x / 3.0;

}

while (abs(sum - sum1) > abs(tol * sum1));

return sum;

}