Автор работы: Пользователь скрыл имя, 21 Марта 2013 в 14:01, курсовая работа
Матрицы возникающих систем могут иметь различные структуры и свойства. Уже сейчас имеется потребность в решении систем линейных алгебраических уравнений с матрицами полного заполнения порядка нескольких тысяч. При решении ряда прикладных задач методом конечных элементов в ряде случаев появляются системы, обладающие симметричными положительно определёнными ленточными матрицами порядка несколько десятков тысяч с половиной ширины ленты до тысячи. И, наконец, при использовании в ряде задач метода конечных разностей необходимо решить системы разностных уравнений с разрежёнными матрицами порядка миллион. Одним из самых распространенных методов решения систем линейных алгебраических уравнений является метод Гаусса.
ВВЕДЕНИЕ
1. ПОСТАНОВКА ЗАДАЧИ
2. МАТЕМАТИЧЕСКИЕ И АЛГОРИТМИЧЕСКИЕ ОСНОВЫ РЕШЕНИЯ ЗАДАЧИ
2.1 ОПИСАНИЕ МЕТОДА
2.2 АЛГОРИТМ
3. ФУНКЦИОНАЛЬНЫЕ МОДЕЛИ И БЛОК-СХЕМЫ РЕШЕНИЯ ЗАДАЧИ
4. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ РЕШЕНИЯ ЗАДАЧИ
5. ПРИМЕР ВЫПОЛНЕНИЯ ПРОГРАММЫ
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ И ЛИТЕРАТУРЫ
4. Программная реализация решения задачи
int razmer; //размер матрицы
double **a, // матрица с коэфицентами
*x, // х
*b; // свободные члены
/* Здесь переменной razmer необходимо присвоить
размер матрицы */
// создание динамических переменных
b = new double[razmer];
x = new double[razmer];
a = new double*[razmer];
for(int i=0; i < razmer; i++){
a = new double[razmer];
}
/* Здесь нам надо присвоить значения матрице
а, и заполнить свободные члены b */
// начинаем решать)
// частный случай, если размер матрицы
== 1
if(razmer == 1){
if(a[0][0] != 0){
cout << "x=" << b[0]/a[0][0] << endl;
}else{
cout << "Х любое" << endl;
}
getch();
exit(0);
}
// прямой проход
// идем слево на право по коэфицентам х
for(int k=0; k < razmer-1; k++){
// вычитаем по строкам
for(int m=k+1; m < razmer; m++){
// если на диагонали элемент = 0, то поменяем
местами строки
if(a[m][m] == 0) exchange(a, razmer, m, get_n_no_empty(a, razmer, m));
double koeficent=a[m][k]/a[0][k];
//вычисление новых коэфицентов уравнения
b[m] = b[m] - b[0] * koeficent;
for(int z=0; z < razmer; z++){
a[m][z] = a[m][k] - a[0][k] * koeficent;
}
}
}
// ищем решения
for(int m=razmer-1; m >= 0; m--){
double sum=0;
// идем по строке спаво налево, считая
сумму корень*коэфицент, до текущего корня
for(int i=razmer-1; i > m; i--){
sum += x * a[m];
}
x[m] = (b[m] - sum)/a[m][m];
}
// вывод решений
cout << "###Решения:" << endl;
for(int i=0; i < razmer; i++){
cout << "x[" << i << "]=" <<
x << endl;
}
pause();