Материал: obrazets_vypolnenia_laboratornykh_rabot_2_semestr

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Программа на языке СИ

#include “stdafx.h” #include <iostream> #include <math.h> using namespace std; double f(double x)

{ double Y; Y=pow(x,2)-3*x;

return Y;}

void main()

{setlocale (LC_ALL,”Russian”);

double h,a,b,x[10],y[10],S,ILP,IPP,ITR,C1,C2,IPR,xzr[10],yzr[10],IZR,IT,D,O; int i,n;

cout<<”Введи n,a,b\n”; cin>>n>>a>>b;

cout<<”Введи точное значение интеграла\n”; cin>>IT;

h=(b-a)/n;

cout<<”шаг “<<h<<endl;

cout<<”Таблица значений подынтегральной функции\n”; cout<<”\tx\tf(x)\n”;

for(i=0;i<=n;i++)

{x[i]=a+i*h;

y[i]=f(x[i]); printf(“%9.3f\t%6.3f\n”,x[i],y[i]);} cout<<”Метод левых прямоугольников\n”;

S=0;

for(i=0;i<n;i++)

S=S+f(x[i]);

ILP=h*S;

printf(“ILP= %6.3f\n”,ILP);

cout<<”Абсолютная и относительная погрешность метода левых прямоугольников\n”;

D=fabs(ILP-IT); O=D/fabs(IT)*100;

printf(“D= %6.3f\tO=%6.3f\n”,D,O); cout<<”Метод правых прямоугольников\n”;

S=0;

for(i=1;i<=n;i++)

S=S+f(x[i]);

IPP=h*S;

printf(“IPP= %6.3f\n”,IPP);

cout<<”Абсолютная и относительная погрешность метода правых прямоугольников\n”;

D=fabs(IPP-IT); O=D/fabs(IT)*100;

printf(“D= %6.3f\tO=%6.3f\n”,D,O); cout<<”Метод трапеций\n”;

S=0;

for(i=1;i<n;i++)

S=S+f(x[i]);

ITR=h*((f(x[0])+f(x[n]))/2+S); printf(“ITR= %6.3f\n”,ITR)

cout<<”Абсолютная и относительная погрешность метода трапеций\n”;

37

D=fabs(ITR-IT); O=D/fabs(IT)*100;

printf(“D= %6.3f\tO=%6.3f\n”,D,O); cout<<”Метод парабол\n”;

C1=0;

for(i=1;i<n;i=i+2)

C1=C1+f(x[i]);

C2=0;

for(i=2;i<n;i=i+2)

C2=C2+f(x[i]);

IPR=h/3*(f(x[0])+4*C1+2*C2+f(x[n])); printf(“IPR= %6.3f\n”,IPR);

cout<<”Абсолютная и относительная погрешность метода парабол\n”;

D=fabs(IPR-IT); O=D/fabs(IT)*100;

printf(“D= %6.3f\tO=%6.3f\n”,D,O);

cout<<”Таблица значений подынтегральной функции для метода центральных прямоугольников\n”;

cout<<”\txzr\tf(xzr)\n”; for(i=0;i<n;i++) {xzr[i]=a+(i+0.5)*h; yzr[i]=f(xzr[i]);

printf(“%9.3f\t%6.3f\n”,xzr[i],yzr[i]);} cout<<”Метод центральных прямоугольников\n”;

S=0;

for(i=0;i<n;i++)

S=S+f(xzr[i]);

IZR=h*S;

printf(“IZR= %6.3f\n”,IZR);

cout<<”Абсолютная и относительная погрешность метода центральных прямоугольников\n”;

D=fabs(IZR-IT); O=D/fabs(IT)*100;

printf(“D= %6.3f\tO=%6.3f\n”,D,O);

}

Лабораторная работа №4 Тема: «Аппроксимация и интерполяция»

Постановка задачи: Дана таблично заданная функция {xi,yi}

i

0

1

2

3

4

x

0,2

0,4

0,7

0,85

1

y

0,1

0,5

0,6

0,9

0,7

Аппроксимировать точки полиномом 1 и 2 степени

Интерполировать точки (методом неопределѐнных коэффициентов) полиномом 1 и 2 степени

Аппроксимация

Название метода

Система для нахождения коэффициентов

Ответ

 

 

 

 

 

 

полинома

 

 

 

 

 

 

Метод

 

 

 

 

полином 1 степени

 

 

 

P1(x)=a0+a1*x

наименьших

 

 

 

n a0 a1 xi yi

 

 

 

квадратов

 

 

 

 

 

 

 

 

 

 

 

i

 

i

 

 

 

 

(аппроксимация)

 

 

 

 

 

 

 

xi yi

 

 

 

 

 

xi a0 a1 xi 2

 

 

 

 

 

 

i

 

 

 

i

 

i

 

 

 

 

 

 

 

 

 

полином 2 степени

 

 

 

 

 

 

 

 

n a 0

x i a1

x

2

a

2 y i

 

 

P2(x)=a0+a1*x+a2*x2

 

 

 

 

 

 

 

 

 

 

 

 

i

 

 

i

i

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x i a 0

x i 2 a1

x

3

a 2 x i y i

 

 

 

 

 

 

i

 

 

i

 

 

i

i

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

a 0

x i

3

a1

 

4

 

2 x i

2

y i

 

 

x i

 

 

x i

a

 

 

 

i

 

 

 

i

 

 

i

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ручной счет.

Аппроксимация полиномом 1 степени

Зададим общий вид полинома 1 степени P1(x)=a0+a1*x. Для нахождения коэффициентов полинома необходимо решить систему линейных уравнений, где i= 0..4

 

n a0 a1 xi yi

 

 

 

 

 

i

i

 

 

 

 

 

a1 xi 2 xi yi

 

 

 

xi a0

 

 

 

i

 

i

i

 

 

 

Вычислим значения xi , xi2 , yi , xi yi .

 

 

i

i

i

i

 

xi

x0

x1 x2 x3 x4

 

xi 0,2 0,4 0,7 0,85 1 3,15

i

 

 

 

 

i

 

xi2 x02 x12 x22 x32

x42 xi

2 0,22 0,42 0,72 0,852 12 2,413

i

 

 

 

 

i

 

 

 

 

 

 

 

yi y0

y1 y2

y3 y4

yi 0,1 0,5 0,6 0,9 0,7 2,8

i

 

 

 

 

i

 

xi yi x0 y0 x1y1 x2 y2 x3 y3 x4 y4 i

xi yi 0,2 0,1 0,4 0,5 0,7 0,6 0,85 0,9 1 0,7 2,105 i

Получаем систему:

5 a0 3,15a1 2,83,15 a0 2,413a1 2,105

Запишем систему в матричном виде.

 

5

3,15

a

0

 

 

2,8

 

 

 

 

 

 

 

3,15

2,413

a1

 

2,105

Решим систему методом Гаусса.

39

 

 

 

 

 

 

 

 

5

3,15

2,8

 

 

 

 

 

 

 

 

 

 

Выполним деление 1-е уравнение на 5,а 2-е уравнение на 3,15. В результате

 

3,15 2,413

2,105

 

 

 

 

 

 

 

 

 

 

 

 

получаем систему.

 

1

0,63

 

0,56

 

 

 

 

 

 

 

 

 

 

 

 

 

Перепишем 1- е уравнение без изменений, а из 2-е уравнения вычтем 1-е

 

 

 

 

 

 

 

 

 

1

0,766

 

0,668

 

 

 

 

 

 

 

 

 

 

 

1

0,63

0,56

уравнения и результат запишем на место второго уравнения. Получим систему

 

 

 

.

 

0

0,136

0,108

 

 

 

 

 

 

Запишем полученные данные в виде системы линейных уравнений: a0 0,63a1 0,56 .

0,136a1 0,108

уравнения найдѐм a

0,108

. Получим a

0,797 . Из 1-го уравнения найдѐм a

0,56

 

1

0,136

 

1

0

 

 

 

 

 

 

a0 0,56 0,63 0,797

a0 0,058.

 

 

 

Запишем найденное уравнение P1(x) 0,058 0,797 x .

 

Найдѐм отклонения полученного полиномаP1(x) от заданных точек y.

В 0-ой точке

O0 P1( x0 ) y0

P1(x0 ) 0,058 0,797 x0

P1(0,2) 0,217

O0 0,217 0,1 0,117

Из 2-го

0,63 a1 .

В 1-ой точке

O1 P1( x1 ) y1

P1(x1 ) 0,058 0,797 x1

P1(0,4) 0,377

O1 0,377 0,5 0,123

В 2-ой точке

O2 P1( x2 ) y2

P1(x2 ) 0,058 0,797 x2

P1(0,7) 0,616

O2 0,616 0,6 0,016

В 3-ей точке

O3 P1( x3 ) y3

P1(x3 ) 0,058 0,797 x3

P1(0,85) 0,735

O3 0,735 0,9 0,165

В 4-ой точке

O4 P1( x4 ) y4

P1(x4 ) 0,058 0,797 x4

P1(1) 0,855

O4 0,855 0,7 0,155

Построим график функции P1( x ) и отметим исходные точки на этом же графике.

Источник: https://studfile.net/preview/16700482/