Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
098270_B48CC_kontrolnaya_rabota.doc
Скачиваний:
14
Добавлен:
17.09.2019
Размер:
289.28 Кб
Скачать

1. Решение систем линейных алгебраических уравнений (слау)

Составить программу решения СЛАУ порядка n и решить систему линейных уравнений пятого порядка с трехдиагональной симметричной матрицей вида

вар.

Mетод

d

q

5

MP

-3

-4.67

-

Решение:

Программа для решения СЛАУ методом прогонки приведена в листинге 1.1.

Результаты работы программы приведены на рис. 1.1.

Листинг 1.1.

#include "stdafx.h"

#include <math.h>

#include <iostream>

using namespace std;

int i,n,k,n1=5;

double t,z,q,d;

double A[5][5];

double B[5];

double eps[5];

double X[5];

double et[5];

int main()

{

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

{

for (k=0;k<5;k++)

{

A[i][k]=0;

}

}

cout<<"Enter q: ";

cin>>q;

cout<<endl<<"Enter d: ";

cin>>d;

cout<<endl;

A[0][0]=A[4][4]=q;

A[1][1]=A[2][2]=A[3][3]=-2;

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

{

k=i+1;

A[i][k]=A[k][i]=1;

}

cout<<"Matrix A:"<<endl;

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

{

for (k=0;k<5;k++)

{

cout<<A[k][i]<<"\t ";

}

cout<<endl;

}

B[0]=B[4]=0;

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

{

B[i]=d;

}

cout<<"Matrix B:"<<endl;

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

{

cout<<B[i]<<endl;

}

n=n1-1;

eps[0]=-A[0][1]/A[0][0];

et[0]=B[0]/A[0][0];

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

{

z=A[i][i]+A[i][i-1]*eps[i-1];

eps[i]=-A[i][i+1]/z;

et[i]=(B[i]-A[i][i-1]*et[i-1])/z;

}

X[n]=(B[n]-A[n][n-1]*et[n-1])/(A[n][n]+A[n][n-1]*eps[n-1]);

for(i=n-1;i>=0;i--)

{

X[i]=eps[i]*X[i+1]+et[i];

}

cout<<"Matrix X:"<<endl;

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

{

cout<<X[i]<<endl;

}

return 0;

}

Рис.1.1.

2.Аппроксимация функций

Требуется аппроксимировать заданную исходную функцию f(x) многочленом на интервале [a, b]. Задано количество неизвестных параметров n, вид аппроксимации и m - количество точек, в которых задана функция. Таблица исходной функции yi=f(xi) вычисляется в точках xi=a+(i-1)(b-a)/(m-1), i=1, m. Используя полученную таблицу (xi, yi), требуется вычислить значения функций f(xj), φ(xj, c) и погрешность d(xj)=f(xj)-φ(xj, c) в точках xj=a+(j-1)(b-a)/20, j=1, 20.

N

Функция f(x)

a

b

m

n

Вид аппроксимации

5

5

8

4

4

Общего вида POL

Решение:

Код программы приведен в листинге 2.1.

Результаты работы программы приведены на рис. 2.1.

Листинг 2.1

#include "stdafx.h"

#include <iostream>

#include <math.h>

#include <iomanip>

using namespace std;

double countF(double x)

{

return pow(x,0.5)-pow(cos(x),2);

}

int main()

{

int n = 4;

int m = 4;

double a = 5;

double b = 8;

double X[21];

double Y[21];

double L[21];

double D[21];

double c[21];

double a1[21][21];

double d;

for(int t = 1;t <= 21;t++)

{

X[t] = 0; Y[t] = 0; L[t] = 0; D[t] = 0;

}

cout<<"The values of x,y:"<<endl;

for(int i = 1;i <= 4;i++)

{

X[i] = a + (i - 1)*(b - a)/(m - 1);

Y[i] = countF(X[i]);

cout<<"x["<<i<<"]="<<X[i]<<"\t\t";

cout<<"y["<<i<<"]="<<Y[i]<<endl;

}

for(int k = 1;k <= n;k++)

{

a1[k][1]=1;

int i=0;

for(int s = 2;s <= n;s++)

{

i=i+1;

if(i==k)

{

i=i+1;

}

d=X[k]-X[i];

a1[k][s]=a1[k][s-1]/d;

for(int j = s-1;j >= 2;j--)

{

a1[k][j]=(a1[k][j-1]-a1[k][j]*X[i])/d;

}

a1[k][1]=-a1[k][1]*X[i]/d;

}

}

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

{

c[i]=0;

for(int k = 1;k <= n;k++)

{

c[i]=c[i]+a1[k][i]*Y[k];

}

}

for(int j = 1; j <= 21; j++)

{

X[j]=a+(j-1)*(b-a)/20;

Y[j]=countF(X[j]);

L[j]=c[1]+X[j]*(c[2]+X[j]*(c[3]+X[j]*c[4]));

D[j]=fabs(Y[j]-L[j]);

}

cout<<endl;

for(int i = 1;i <= 21;i++)

{

cout<<fixed<<"X["<<i<<"]="<<X[i]<<"\t";

cout<<"Y["<<i<<"]="<<Y[i]<<"\t";

cout<<"L["<<i<<"]"<<"="<<L[i]<<"\t";

cout<<"D["<<i<<"]"<<"="<<D[i]<<endl;

}

return 0;

}

Рис. 2.1