- •1. Цель работы
- •2 Алгоритмы численного интегрирования функций
- •4. Численное интегрирование по заданной точности
- •5. Разработка программы и анализ результатов
- •6 Указания по выполнению работы и Требования к отчету
- •4 Контрольные вопросы к защите отчета
- •Приложение a
- •Приложение б
- •Содержание
- •1 Цель работы 1
- •2 Алгоритмы численного интегрирования функций 1
6 Указания по выполнению работы и Требования к отчету
Вычислить приближенное значение интеграла , на интервале (a,b) с заданной точностью Ez и оценить эффективность программы. Для оценки фактической погрешности дана первообразная функция F(x).
Предварительно объявить функциональный тип данных funk с помощью оператора typedef, а в главной программе предусмотреть ввод исходных данных, вызов нашей подпрограммы и печать протокола решения задачи.
Отчет должен содержать:
1. Постановку задачи и заданные формулы f(x) и F(x).
2. Таблицы переменных и схемы алгоритмов (подпрограмм и главной программы).
3. Текст программы с комментариями.
4. Анализ результатов расчета.
4 Контрольные вопросы к защите отчета
1. Формулы и алгоритмы численного интегрирования функций.
2. Физический смысл переменных x, a, b, n, h, S.
3. Теоретические погрешности разных методов.
4. Идея алгоритма двойного просчета.
5. Понятие о погрешностях, - абсолютной, относительной, текущей, фактической, погрешности метода (теоретическая) и округления.
6. Физический смысл переменных S, S0, Iт.зад, тек, факт.
7. Какова будет теоретическая погрешность численного интегрирования функции f(x) = a X +b методом прямоугольников, а f(x) = a X3 + b X2 + c X + d - методом Симпсона? Почему?
8. Глобальные и локальные параметры.
9. Формальные и фактические параметры.
10 Механизмы передачи формальных/фактических параметров;
11. Назначение и синтаксис оператора typedef.
12. Какие параметры (данные) можно передавать через заголовок функции и оператор return, а какие нельзя ?
13. Чем отличаются вызовы функции s =priam(sin,a,b,n); и s =priam(&sin,a,b,n); ?
Приложение a
Листинг 1. Программа численного интегрирования по заданной погрешности
typedef double(*funk)(double x);
double f(double x){ //подъинтегральная функция f
x*x*exp(-2*x);
}//----------------------------------------------
double F(double x){ //первообразная функция F
exp(-2*x)*(x*x+x+0.5)/2;
}//----------------------------------------------
double priam(funk f, double a,double b, long n){
long i,m; double x,h,s,c=0;
m=n/2; h=(b-a)/n;
x=a+c*h; s=0;
for(i=0;i<n;i++){
s=s+f(x);
x=x+h;
}
s*=h; return s;
}//----------------------------------------------
void main(){
clrscr();
double a=0.1,b=3.9,ez=0.00001,et,ef,h,s0,s,It; long n;
//printf("\n Vvedite a,b,ez\n"); scanf("%lf%lf%lf",&a,&b,&ez);
double raz,e0=10,z1;
FILE *fout;
double Simpson(funk f, double a, double b, long n);
if(!(fout=fopen("результаты.txt","w")))
fprintf(stderr, "не могу открыть файл результаты.txt.\n");
s0=0; n=4;
printf("\ns et ef It n raz");
printf("\n----------------------------------------------- ");
do{
s=priam(&f,a,b,n);
//s=Simpson(f,a,b,n);
It=F(b)-F(a);
et=fabs(s-s0); ef=fabs(s-It); raz=e0/et; e0=et;
printf("\n%1.8lf %1.8lf %1.8lf %1.8lf %ld %6.1lf",s,et,ef,It,n,raz);
fprintf(fout,"\n%1.8lf %1.8lf %1.8lf %1.8lf %ld %6.1lf",s,et,ef,It,n,raz);
s0=s;
n*=2;
}while(et>ez);
printf("\nIточ= %12.10lf s = %12.10lf raz= %5.1lf",It,s,raz);
fprintf(fout,"\nIточ= %12.10lf s= %12.10lf raz= %5.1lf",It,s,raz);
getch();
}//----------------------------------------------------------------