![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 20.03.2015
Сообщений: 1
|
![]()
Мне нужно найти обратную матрицу методом гауса с выбором главного элемента по столбцу.
Я дошла до того момента, когда получила нули ниже главной диагонали, надо занулить те, что выше. Что б остались только диагональные элементы, (потом просто планирую поделить строки на них) Не уверена вообще что алгоритм правильный, т.к в разных источниках по разному, Если алгоритм неверный поясните пожалуйста как правильно делать. Тот кусок кода что закоментен - в нем ломается(( посмотрите, подскажите #include "stdafx.h" #include <locale.h> #include <time.h> #include <stdio.h> #include <math.h> #include <iostream> using namespace std; float** create(int m, int n) { float **p; p=new float *[m]; int i; for (i=0; i<m; i++) { p[i]=new float [2*n]; for (int j=0;j<n;j++) { p[i][j]=rand()%10; //p[i][j]=1; } //edinih for (int j=n;j<(2*n);j++) { if ((i+m)==j) p[i][j]=1; else p[i][j]=0; //p[i][j]=rand()%10; //p[i][j]=1; } } return p; } void print(int m,int n, float **p) { int i; for (i=0; i<m; i++) { for (int j=0; j<(2*n);j++) { //printf(" p[%d][%d]=",i,j); printf("%0.2f\t", p[i][j]); } printf("\n"); } printf("\n"); } int maxvstolb(int k, float **p,int m) { int l=k; float max=p[k][k]; for(int i=1; i<m;i++) { if (i>k) { if(abs(p[i][k])>max) {max=abs(p[i][k]); l=i;} } } return l; } void zamena(int l,int i,float **p, int n) { float temp; for(int j=0; j<(2*n); j++) { temp=p[i][j]; p[i][j]=p[l][j]; p[l][j]=temp; } } void prxod(int k, float **p, int m, int n) { float f; for(int i=k+1; i<m; i++) { f=p[i][k]/p[k][k]; for (int ii=0; ii<(2*m); ii++) { p[i][ii]=p[i][ii]-(p[k][ii]*f); } } /*if(k>0) for (int i=0;i<k; i++) { f=p[i][k]/p[k][k]; for(int ii=k; ii<(2*m);k++) { p[i][ii]=p[i][ii]-(p[k][ii]*f); } } */ } int main() { srand(time(0)); float **p; int n=4;//столбец //должно=строке int m=4;//cтрока p=create(m,n); print(m,n,p); int l; for (int k=0; k<n; k++) { l=maxvstolb(k,p,m); printf("max v %d stolbce=%d\n",k,l); zamena(l,k,p,n); printf("zamenili stroki\n"); print(m,n,p); prxod(k,p,m,n); print(m,n,p); } return 0; } Последний раз редактировалось Tatiana92; 20.03.2015 в 17:45. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нахождение обратной матрицы | Вероника92 | Помощь студентам | 0 | 21.03.2014 17:53 |
нахождение обратной матрицы и единичной матрицы размерностью N | denisbrain | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 17.05.2012 11:53 |
Pascal нахождение детерминанты методом гауса Программа не работает( | Студент13 | Помощь студентам | 1 | 19.04.2011 20:17 |
Нахождение детерминанты методом гауса (Pascal) | Студент13 | Помощь студентам | 0 | 17.04.2011 20:34 |