скачать (272.2 kb.)
Доступные файлы (12):
Вычмат РГР.doc | 1670kb. | 10.06.2010 03:25 | ![]() |
1 задача МНК.xls | 37kb. | 07.03.2010 23:22 | ![]() |
diffur.xls | 73kb. | 10.06.2010 03:24 | ![]() |
gauss.cpp | |||
gauss.exe | |||
horda.xls | 18kb. | 09.06.2010 23:10 | ![]() |
matrix.xls | 46kb. | 10.06.2010 01:25 | ![]() |
splain.xls | 28kb. | 10.06.2010 01:45 | ![]() |
zapolnenie.cpp | |||
zapolnenie.exe | |||
Вектор и гистограмма.xls | 23kb. | 23.05.2010 20:02 | ![]() |
вычисленные Х.txt | 6kb. | 23.05.2010 20:03 | ![]() |
Вычмат РГР.doc
Министерство образования и науки российской федерацииФедеральное агентство по образованию
Расчетно-графическая работа
по курсу: «Вычислительная математика»
2010
Задание 1 Обусловленность матрицы
Задание : Дана система уравнений ax=b порядка n. Исследовать зависимость погрешности решения x от погрешностей правой части системы b.

Задать матрицу системы A и вектор правой части b, найти решение x системы Ax=b с помощью метода Гаусса.
Принимая решение x, полученное в п.1, за точное, вычислить вектор




компоненты векторов


(

На основе вычисленного вектора d построить гистограмму. По гистограмме определить компоненту , вектора b, которая оказывает наибольшее влияние на погрешность решения.
Вычислить число обусловленности cond(A) матрицы A.
Оценить теоретически погрешность решенияпо формуле:

Сравнить значение


Решение:
Задаём матрицу А.

Для заполнения используем код программы zapolnenie.cpp (см. приложение)
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <windows.h>
#include <dos.h>
main()
{
double matr[100][100];
for (int i=1;i<7;i++)
{
for (int j=1;j<7;j++)
matr[i][j]= 1000/(3*(pow(0.1*21*i*j,2))+pow(0.1*21*i*j,3));
}
for ( int j=1;j<7;j++)
{
for ( int i=1;i<7;i++)
printf("%10.4f",matr[j][i]);
printf("\n");
}
getchar();
}
Результат работы zapolnenie:


Найдем решение полученной матрицы используя программу gauss.cpp (см приложение)
Исходный код gauss.cpp :
#include <iostream.h>
#include <stdio.h>
#include <windows.h>
#include <math.h>
#include <conio.h>
#include <dos.h>
const int sz=6;
double A[sz][sz]={
{44.4622, 7.8735, 2.7092, 1.2432, 0.6719, 0.4038},
{7.8735, 1.2432, 0.4038, 0.1789, 0.0945, 0.0558},
{2.7092, 0.4038, 0.1278, 0.0558, 0.0292, 0.0172},
{1.2432, 0.1789, 0.0558, 0.0242, 0.0126, 0.0074},
{0.6719, 0.0945, 0.0292, 0.0126, 0.0065, 0.0038},
{0.4038, 0.0558, 0.0172, 0.0074, 0.0038, 0.0022}
} ;
double F[sz]={21.00,21.00,21.00,21.00,21.00,21.00} ;
double X[sz];
double b[sz+1],par;
// функция вывода матрицы на экран
void Viv(double A[sz][sz])
{
int i,j;
for( i=0;i<sz; i++)
{
for( j=0;j<sz; j++)
printf(" %.4f ",A[i][j]); //вывод на экрам исходной матрицы с заданным количеством знаков после запятой (5f)
printf(" %.4f ",F[i]);
cout<<endl;
}
system("pause");
}
/////////////// функция решения методом Гаусса
void Resh(double A[sz][sz],double F[sz],double X[sz])
{
int i,j,k;
for (k=0;k<sz;k++)
{
// проверяем первый элемент
if (A[k][k]==0) //проверка на неноль
{
for (i=k;A[i][k]==0;i++); // находим ненулевой 1й элемент
for(j=k;j<sz;j++) // меняем строки в матрице
{
par=A[k][j]; //смена строк в матрице
A[k][j]=A[i][j]; //путем записи в par и извлечения из него
A[i][j]=par;
}
par=F[k]; // смена строк в ответе
F[k]=F[i];
F[i]=par;
}
// получаем 1й элемент единицу (делим всю первую строку на a1,1 )
par=A[k][k]; //пишем в par первый элемент
for(int i=k;i<sz;i++)
A[k][i]=A[k][i]/par;
F[k]=F[k]/par; // делим ответ на 1й
// нулевой столбец
for(int j=k+1;j<sz;j++)
{
for(int i=k;i<sz;i++)
b[i]=A[k][i]*A[j][k];
b[sz]= F[k]*A[j][k];
for(int i=k;i<sz;i++)
A[j][i]-=b[i];
F[j]-=b[sz];
}
}
for(i=sz-1;i>=0;i--) //обратка
{
par=0;
for (j=0;j<sz-1-i;j++)
par+=A[i][sz-j-1]*X[sz-1-j];
X[i]=F[i]-par;
}
}
//функция - точка входа в программу
void main()
{
Viv(A); // выводим матрицу
Resh(A,F,X); // решаем матрицу A методом Гаусса
for(int i=0;i<sz;i++) printf("\nX[%d]= %.5f \n\r",i,X[i]); // вывод результата
system("pause");
}
Результат работы gauss:
==============================================================
точное
==============================================================
44.4622 7.8735 2.7092 1.2432 0.6719 0.4038 21.0000
7.8735 1.2432 0.4038 0.1789 0.0945 0.0558 21.0000
2.7092 0.4038 0.1278 0.0558 0.0292 0.0172 21.0000
1.2432 0.1789 0.0558 0.0242 0.0126 0.0074 21.0000
0.6719 0.0945 0.0292 0.0126 0.0065 0.0038 21.0000
0.4038 0.0558 0.0172 0.0074 0.0038 0.0022 21.0000
Для продолжения нажмите любую клавишу . . .
X[0]= 872.15582
X[1]= -16329.24792
X[2]= 10011.59140
X[3]= 111650.80126
X[4]= -26697.87796
X[5]= -144076.29603
Для продолжения нажмите любую клавишу . . .
===========================================================
Вычисляем вектор d.
Величина погрешности, вносимой в правую часть системы – 1%.
Сформируем векторы b (по заданному закону )
b1 | b2 | b3 | b4 | b5 | b6 |
20,79 | 21 | 21 | 21 | 21 | 21 |
21 | 20,79 | 21 | 21 | 21 | 21 |
21 | 21 | 20,79 | 21 | 21 | 21 |
21 | 21 | 21 | 20,79 | 21 | 21 |
21 | 21 | 21 | 21 | 20,79 | 21 |
21 | 21 | 21 | 21 | 21 | 20,79 |
Для каждого из них найдем решение матрицы используя gauss
С погрешностью в …. компоненте
==============================================================
в первой
===============================================================
44.4622 7.8735 2.7092 1.2432 0.6719 0.4038 20.7900
7.8735 1.2432 0.4038 0.1789 0.0945 0.0558 21.0000
2.7092 0.4038 0.1278 0.0558 0.0292 0.0172 21.0000
1.2432 0.1789 0.0558 0.0242 0.0126 0.0074 21.0000
0.6719 0.0945 0.0292 0.0126 0.0065 0.0038 21.0000
0.4038 0.0558 0.0172 0.0074 0.0038 0.0022 21.0000
Для продолжения нажмите любую клавишу . . .
X[0]= 872.07580
X[1]= -16327.25169
X[2]= 10005.24500
X[3]= 111652.84781
X[4]= -26679.82743
X[5]= -144100.68447
Для продолжения нажмите любую клавишу . . .
===============================================================
во второй
===============================================================
44.4622 7.8735 2.7092 1.2432 0.6719 0.4038 21.0000
7.8735 1.2432 0.4038 0.1789 0.0945 0.0558 20.7900
2.7092 0.4038 0.1278 0.0558 0.0292 0.0172 21.0000
1.2432 0.1789 0.0558 0.0242 0.0126 0.0074 21.0000
0.6719 0.0945 0.0292 0.0126 0.0065 0.0038 21.0000
0.4038 0.0558 0.0172 0.0074 0.0038 0.0022 21.0000
Для продолжения нажмите любую клавишу . . .
X[0]= 874.15205
X[1]= -16398.19981
X[2]= 10378.69292
X[3]= 111250.49388
X[4]= -27254.14851
X[5]= -143256.57148
Для продолжения нажмите любую клавишу . . .
==============================================================
в третьей
===============================================================
44.4622 7.8735 2.7092 1.2432 0.6719 0.4038 21.0000
7.8735 1.2432 0.4038 0.1789 0.0945 0.0558 21.0000
2.7092 0.4038 0.1278 0.0558 0.0292 0.0172 20.7900
1.2432 0.1789 0.0558 0.0242 0.0126 0.0074 21.0000
0.6719 0.0945 0.0292 0.0126 0.0065 0.0038 21.0000
0.4038 0.0558 0.0172 0.0074 0.0038 0.0022 21.0000
Для продолжения нажмите любую клавишу . . .
X[0]= 865.80942
X[1]= -15962.14640
X[2]= 7652.50187
X[3]= 114149.98680
X[4]= -23271.06118
X[5]= -148104.07985
Для продолжения нажмите любую клавишу . . .
================================================================
в четвёртой
================================================================
44.4622 7.8735 2.7092 1.2432 0.6719 0.4038 21.0000
7.8735 1.2432 0.4038 0.1789 0.0945 0.0558 21.0000
2.7092 0.4038 0.1278 0.0558 0.0292 0.0172 21.0000
1.2432 0.1789 0.0558 0.0242 0.0126 0.0074 20.7900
0.6719 0.0945 0.0292 0.0126 0.0065 0.0038 21.0000
0.4038 0.0558 0.0172 0.0074 0.0038 0.0022 21.0000
Для продолжения нажмите любую клавишу . . .
X[0]= 874.20237
X[1]= -16729.55530
X[2]= 12510.77695
X[3]= 111600.37766
X[4]= -35532.05319
X[5]= -138409.12992
Для продолжения нажмите любую клавишу . . .
==============================================================
в пятой
==============================================================
44.4622 7.8735 2.7092 1.2432 0.6719 0.4038 21.0000
7.8735 1.2432 0.4038 0.1789 0.0945 0.0558 21.0000
2.7092 0.4038 0.1278 0.0558 0.0292 0.0172 21.0000
1.2432 0.1789 0.0558 0.0242 0.0126 0.0074 21.0000
0.6719 0.0945 0.0292 0.0126 0.0065 0.0038 20.7900
0.4038 0.0558 0.0172 0.0074 0.0038 0.0022 21.0000
Для продолжения нажмите любую клавишу . . .
X[0]= 890.20635
X[1]= -16885.51847
X[2]= 13438.40819
X[3]= 102816.62603
X[4]= -16375.93145
X[5]= -148185.68530
Для продолжения нажмите любую клавишу . . .
===============================================================
в шестой
===============================================================
44.4622 7.8735 2.7092 1.2432 0.6719 0.4038 21.0000
7.8735 1.2432 0.4038 0.1789 0.0945 0.0558 21.0000
2.7092 0.4038 0.1278 0.0558 0.0292 0.0172 21.0000
1.2432 0.1789 0.0558 0.0242 0.0126 0.0074 21.0000
0.6719 0.0945 0.0292 0.0126 0.0065 0.0038 21.0000
0.4038 0.0558 0.0172 0.0074 0.0038 0.0022 20.7900
Для продолжения нажмите любую клавишу . . .
X[0]= 847.76738
X[1]= -15509.52337
X[2]= 5983.80758
X[3]= 117317.96737
X[4]= -30807.26724
X[5]= -140960.86219
Для продолжения нажмите любую клавишу . . .
На основе полученных значений сформируем вектор d
| Р Е Ш Е Н И Я С П О Г Р Е Ш Н О С Т Я М И | |||||
| | | | | | |
точное | в первой | во втророй | в третьей | в четвёртой | в пятой | в шестой |
872,1558 | 872,0758 | 874,1521 | 865,8094 | 874,2024 | 890,2064 | 847,7674 |
-16329,2479 | -16327,2517 | -16398,1998 | -15962,1464 | -16729,5553 | -16885,5185 | -15509,5234 |
10011,5914 | 10005,2450 | 10378,6929 | 7652,5019 | 12510,7770 | 13438,4082 | 5983,8076 |
111650,8013 | 111652,8478 | 111250,4939 | 114149,9868 | 111600,3777 | 102816,6260 | 117317,9674 |
-26697,8780 | -26679,8274 | -27254,1485 | -23271,0612 | -35532,0532 | -16375,9315 | -30807,2672 |
-144076,2960 | -144100,6845 | -143256,5715 | -148104,0799 | -138409,1299 | -148185,6853 | -140960,8622 |
| | | x-xi | | | |
||x|| | 0,0800 | 1,9962 | 6,3464 | 2,0466 | 18,0505 | 24,3884 |
111650,8013 | 1,9962 | 68,9519 | 367,1015 | 400,3074 | 556,2705 | 819,7245 |
| 6,3464 | 367,1015 | 2359,0895 | 2499,1856 | 3426,8168 | 4027,7838 |
| 2,0466 | 400,3074 | 2499,1855 | 50,4236 | 8834,1752 | 5667,1661 |
| 18,0505 | 556,2705 | 3426,8168 | 8834,1752 | 10321,9465 | 4109,3893 |
| 24,3884 | 819,7245 | 4027,7838 | 5667,1661 | 4109,3893 | 3115,4338 |
| | | | | | |
| ||x-xi|| i:1…6 | | d | | | |
| 24,3884 | | 0,000218435 | | | |
| 819,7245 | | 0,00734186 | | | |
| 4027,7838 | | 0,036074831 | | | |
| 8834,1752 | | 0,079123259 | | | |
| 10321,9465 | | 0,092448477 | | | |
| 5667,1661 | | 0,050757953 | | | |
Отсюда видим, что

^
(см. файл «Вектор и гистограмма»)

По гистограмме видно, что наибольшее влияние на погрешность решения оказывает компонента


Найдем число обусловленностиматрицы A
Число обусловленности матрицы A вычисляется по формуле

Норма матрицы A: =57,3638
Норма обратной матрицы


Теоретическая оценка погрешности




Так как то матрица плохо обусловлена, это значит, что незначительные изменения в правой части приведут к большой погрешности в решении.
Скачать файл (272.2 kb.)