Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2015, 16:55   #1
Tatiana92
Новичок
Джуниор
 
Регистрация: 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.
Tatiana92 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нахождение обратной матрицы Вероника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