4 64 2.01750201 2.00097833 -0.01652368
5 128 2.00097833 2.00005955 -0.00091878
6 256 2.00005955 2.00000370 -0.00005585
7 512 2.00000370 2.00000023 -0.00000347
8 1024 2.00000023 2.00000001 -0.00000022
9 2048 2.00000001 2.00000000 -0.00000001
Интеграл = 2
5.Задание:
С помощью функции SdxLaguerre(), SdxInfinity() вычислить интегралы
и .
Для функции SdxLaguerre() построить зависимость погрешности вычисления одного из интегралов от nв пределах от 1 до 10.
Для функции SdxInfinity() нарисовать блок-схему алгоритма. Построить графики подынтегральной функции и выбрать необходимые параметры b0 и c.
Программа:
// Программа для расчета интегралов
// с помощью функции SdxLaguerre()
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include "integral.h"
double F1(double x);
double F2(double x);
void main()
{
// описание данных
int n;
double S;
// ввод входных данных
n=10;
// обращение к функции
S=SdxLaguerre(F1,n);
// вывод результата
clrscr();
cout<<"Интеграл = "<<S<<endl;
getch();
}
double F1(double x)
// первая подынтегральная функция
{
return exp(-x);
}
double F2(double x)
// вторая подынтегральная функция
{
return exp(-x*x);
}
Результат выполнения программы:
Интеграл = 1
SdxLaguerre()–
Результат выполнения программы:
Интеграл = 0.886556
График зависимости погрешностей от n ( SdxLaguerre())
Таблица зависимости погрешностей от n:
n |
||
SdxLaguerre() |
||
1 |
0.113773 |
|
2 |
0.20176 |
|
3 |
0.034677 |
|
4 |
0.038548 |
|
5 |
0.030444 |
|
6 |
0.007081 |
|
7 |
0.005155 |
|
8 |
0.006369 |
|
9 |
0.003239 |
|
10 |
0.000329 |
|
График подынтегральной функции :
График подынтегральной функции :
Возьмём в обоих случаях: b0 = 0.05; c = 1
// Программа для расчета интегралов
// с помощью функции SdxInfinity()
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include "simpson.h"
double F1(double x);
double F2(double x);
void main()
{
// описание данных
int n,keyDemo;
double a,b0,c,eps,S;
// ввод входных данных
a=0;
b0=2 ;
c=1 ;
eps=1E-07;
keyDemo=1;
// обращение к функции
clrscr();
S=SdxInfinity(F1,a,b0,c,eps,keyDemo);
// вывод результата
cout<<endl;
cout<<"Интеграл = "<<S<<endl;
getch();
}
double F1(double x)
// первая подынтегральная функция
{
return exp(-x);
}
double F2(double x)
// вторая подынтегральная функция
{
return exp(-x*x);
}
Результат выполнения программы:
SdxInfinity() –
1 0.10000000 0.04877058 0.09516258 0.04639201
2 0.20000000 0.09516258 0.18126925 0.08610667
3 0.40000000 0.18126925 0.32967995 0.14841071
4 0.80000000 0.32967995 0.55067104 0.22099108
5 1.60000000 0.55067104 0.79810348 0.24743245
6 3.20000000 0.79810348 0.95923780 0.16113431
7 6.40000000 0.95923780 0.99833844 0.03910065
8 12.80000000 0.99833844 0.99999724 0.00165880
9 25.60000000 0.99999724 1.00000000 0.00000276
10 51.20000000 1.00000000 1.00000000 0.00000000
Интеграл = 1
SdxInfinity() –
1 0.10000000 0.04995836 0.09966766 0.04970930
2 0.20000000 0.09966766 0.19736503 0.09769737
3 0.40000000 0.19736503 0.37965284 0.18228781
4 0.80000000 0.37965284 0.65766986 0.27801702
5 1.60000000 0.65766986 0.86526623 0.20759637
6 3.20000000 0.86526623 0.88622158 0.02095536
7 6.40000000 0.88622158 0.88622693 0.00000534
8 12.80000000 0.88622693 0.88622693 0.00000000
Интеграл = 0.886227
6.Задание:
На основе сплайн-интерполяции подынтегральной функции вычислить интеграл от подынтегральной функции, заданной таблично. Ее табличные данные находятся в файле si.dat. Построить график подынтегральной функции и оценить по нему правильность вычисления интеграла.
Программа:
// программа для вычисления интеграла от таблично заданной функции
// с помощью функции SdxSpline
#include <iostream.h>
#include <conio.h>
#include "spline.h"
#include "datafile.h"
void main()
{
// описание данных
int i,n,m,Err;
double S;
Vector A,B,C,D;
LVector X,Y;
// ввод входных данных
clrscr();
OutMessage("Вводим данные из файла. <Enter>");
Read2Vec(n,X,Y,1);
// сдвиг элементов массива
for (i=1; i<=n; i++)
{
X[i-1]=X[i];
Y[i-1]=Y[i];
}
m=n-1;
// интерполяция
Err=SplineCoeff(m,X,Y, A,B,C,D);
clrscr();
cout<<"Сплайн-интерполяция выполнена."<<endl;
cout<<"Err = "<<Err<<endl<<endl;
// вывод в файл программы подынтегральной сплайн-функции
cout<<endl;
WriteSpline(m,X,A,B,C,D);
// вычисление интеграла
cout<<endl;
S=SdxSpline(m,X,A,B,C,D);
cout<<endl;
cout<<"Интеграл = "<<S<<endl;
getch();
}
Результат выполнения программы:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.