|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.04.2011, 21:17 | #1 |
Новичок
Джуниор
Регистрация: 07.04.2011
Сообщений: 1
|
метод Жордана-Гаусса С++
Есть готовая, работающая программа, нахождения решения системы линейных уравнений по методу Жордана-Гаусса. Суть его в том, что если ведущий элемент ноль, то вместо этой строки подставляется строка, где первый элемент самый большой по модулю.
Но мне в пограмме не понятно несколько стррок. Объясните пожалуйста. Вот собственно код: #include <iostream.h> #include <conio.h> #include <stdlib.h> void main() { int colPos, rowPos; int i, j, k, razm; double max; double temp; int m_nCols; int m_nRows; double** array; double* parray; unsigned int* ListVar; double* x; cout<<"введите размерность\n"; cin>>razm; cout<<"введите матрицу:\n"; m_nRows=razm; m_nCols=m_nRows+1; parray=new double[m_nRows*m_nCols]; array=new double*[m_nRows]; for (i=0; i<m_nRows; i++) { *(array+i)=parray+i*m_nCols; } ListVar=new unsigned int[m_nCols-1]; for (j=0; j<m_nCols-1; j++) ListVar[j]=j+1; x=new double[razm]; for (i=0; i<m_nRows-1; i++) x[i]=i+1; for (i=0; i<razm; i++) for (j=0;j<(razm+1); j++) cin>>array[i][j]; for (k=0; k<m_nRows-1; k++) { colPos=rowPos=k; max=array[k][k]; for (i=k; i<m_nRows; i++) for (j=k+1; j<m_nCols-1; j++) if (abs(array[i][j])>max) { max=array[i][j]; rowPos=i; colPos=j; } for (i=0; i<m_nRows; i++) { //ВОТ ТУТ HАЧИНАЕТСЯ "НЕПОНЯТНО" temp=array[i][k]; array[i][k]=array[i][colPos]; array[i][colPos]=temp; } for (j=0; j<m_nCols; j++) { temp=array[k][j]; array[k][j]=array[rowPos][j]; array[rowPos][j]=temp; } temp=ListVar[k]; ListVar[k]=ListVar[colPos]; ListVar[colPos]=temp; //ВОТ ТУТ ЗАКАНЧИВАЕТСЯ "НЕПОНЯТНО" for (j=m_nCols-1; j>=0; j--) { array[k][j]/=array[k][k]; } for (j=0; j<m_nCols; j++) array[k][j]; for (i=k+1; i<m_nRows; i++) for (j=m_nCols-1; j>=0; j--) array[i][j]-=array[k][j]*array[i][k]; } double s=0; x[m_nRows-1]=array[m_nRows-1][m_nCols-1]/ array[m_nRows-1][m_nCols-2]; for (i=m_nRows-2; i>=0; i--) { s=0; for (k=i+1; k<m_nRows; k++) s+=array[i][k]*x[k]; x[i]=array[i][m_nCols-1]-s; } cout<<"решение системы:\n"; for (i=0; i<m_nRows; i++) cout<<"X"<<i+1<<"="<<x[i]<<endl; } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
составить программу в с++ метод Жордана-Гаусса | Doha | Общие вопросы C/C++ | 1 | 28.03.2011 17:15 |
Pascal. Решение СЛАУ методом Гаусса-Жордана | 2easy4me | Помощь студентам | 5 | 23.03.2011 18:56 |
Безумно сложные задачки!!!! Метод Гаусса, итераций, метод половинного деления, задача Коши и т.д. | Хомяк!!!!! | Помощь студентам | 4 | 08.07.2009 10:08 |