Flame of Soul
Главная | Регистрация | Вход

Мои записи


Главная » Статьи » Алгоритмы » Численные методы

[CPP] LU-разложение матрицы СЛАУ (Гаусc)
== Magic Technologic Inc.==
Volume 0x0c, Algoritms 0x04, Phile #0x0a of 0x0f
|=-----------------------------------------------------------------=|
|=----------------=[ LU-разложение матрицы СЛАУ  ]=----------------=|
|=-----------------------------------------------------------------=|
|=----------------=[ Copyright (c) Flame Of Soul ]=----------------=|
|=---------------=[
[E-mail]: _allbasse@yandex.ru ]=---------------=|
|=-----------------------------------------------------------------=|
|=-----------------------------=[ CPP ]=---------------------------=|
|=-----------------------------------------------------------------=|
#include "stdio.h"
#include "iostream.h"
bool getLUDecomposition( double **matrixU, double **matrixL,
int currRowAndColumn, int numberOfEquation ){
bool result;
int i, k;
double tempItem;
result = ( matrixU[currRowAndColumn][currRowAndColumn] != 0 );       
if ( result && currRowAndColumn < numberOfEquation - 1 ){
for ( i = currRowAndColumn + 1; i < numberOfEquation; i++ ){
matrixL[i][currRowAndColumn] = matrixU[i][currRowAndColumn]/
matrixU[currRowAndColumn][currRowAndColumn];
tempItem = - matrixL[i][currRowAndColumn];
for ( k = currRowAndColumn; k < numberOfEquation; k++ ) {
matrixU[i][k] = matrixU[i][k] + matrixU[currRowAndColumn][k]*tempItem;}}
result = getLUDecomposition( matrixU, matrixL, currRowAndColumn + 1,
numberOfEquation );}
return result;}

void main(){
int i, j;
int size;
double **matrixU, **matrixL;
cout << "Gauss'es method of LU.\nEnter system dimension: ";
cin >> size;
matrixU = new double*[size];
matrixL = new double*[size];
for ( i = 0; i < size; i++ ){
matrixU[i] = new double[size];
matrixL[i] = new double[size];
for ( j = 0; j < size; j ++ ){
matrixL[i][j] = ( i == j ? 1 : 0 );}}
for ( i = 0; i < size; i ++ ){
cout << "Enter " << i + 1 << " row: ";
for ( j = 0; j < size; j ++ ){
cin >> matrixU[i][j];}}
if ( !getLUDecomposition( matrixU, matrixL, 0, size ) ){
cout << "LU-decomposition for this matrix not found";}
else{
cout << "L-matrix is:\n";
for ( i = 0; i < size; i ++ ){
for ( j = 0; j < size; j ++ ){
cout << matrixL[i][j] << " ";}
cout << "\n";}
cout << "\nU-matrix is:\n";
for ( i = 0; i < size; i ++ ){
for ( j = 0; j < size; j ++ ){
cout << matrixU[i][j] << " ";}
cout << "\n";}}
cout << "\nPress \"Enter\" to continue..." << endl;
getchar();}
|=-----------------------------=[ CPP ]=---------------------------=|
|=-----------------------------------------------------------------=|

Категория: Численные методы | Добавил: flame (23.05.2009)
Просмотров: 440 | Комментарии: 4 | Рейтинг: 0.0/0 |
Всего комментариев: 2
2  
ОДНОКЛАССНИКИ ЗНАКОМСТВА

1  
ygfkj

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Форма входа

Поиск

Статистика


Онлайн всего: 1
Гостей: 1
Пользователей: 0