Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обратная матрица 
V
    Опции темы
reboot
Дата 26.1.2008, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.1.2008

Репутация: нет
Всего: нет



    Здраствуйте!Не могу решить задачу((. Задание выглядит так: На основе класса matrix, создающего двумерный массив 5х5, создать класс, вычисляющий обратную матрицу.
Код

class matrix {float a[5][5];
public:
matrix() {int i,j;
 for (i=0;i<5;i++)
  for (j=0;j<5;j++)
   {cout<<"a["<<i<<"]["<<j<<"]="; cin>>a[i][j];}}
float matr (int i=0, int j=0) {return a[i][j];}
};

PM MAIL   Вверх
Cycle
Дата 26.1.2008, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 1.12.2007

Репутация: нет
Всего: 3



А что именно не получается?
Двигатся необходимо в следующем направлении:
Код

class admatrix:public matrix
{
public:
    void neg(void)
    {
        //Тут помещаем алгоритм,
        //вычисляющий обратную матрицу
    }
};


Сам алгоритм не помню уже...
PM MAIL   Вверх
reboot
Дата 27.1.2008, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.1.2008

Репутация: нет
Всего: нет



Проблема именно в написании алгоритма обратной матрицы...
PM MAIL   Вверх
Vitaly333
Дата 27.1.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 6.11.2006
Где: Volgograd

Репутация: нет
Всего: 2



Вот тебе код - Обращение матрицы методом Жордана - Гаусса , написанный на Java, думаю тебе не составит труда перевести его на С++


Код

public static Matrix Inverse_matrix_jordan_gauss(Matrix A){
int i,j,k;
int size=A.RowCount;
    Matrix E = new Matrix(size,size);//единичная матрица
//заполнение единичной матрицы
for (i=0;i<size;i++){
    for (j=0;j<size;j++){    
if (i==j) E.mat[i][j]=1;
else E.mat[i][j]=0;
}
}
//Задаём номер ведущей строки (сначала 0,1...size)
             for (k=0;k<size;k++){    
for (j=k+1;j<size;j++){
A.mat[k][j]=A.mat[k][j]/A.mat[k][k];//все элементы k-ой строки матрицы A, кроме k-ого и до него, делим на разрешающий элемент - a[k][k]  
}
for (j=0;j<size;j++){
E.mat[k][j]=E.mat[k][j]/A.mat[k][k];//все элементы k-ой строки матрицы e, делим на разрешающий элемент - a[k][k]    
}
A.mat[k][k]=A.mat[k][k]/A.mat[k][k];//элемент соответствующий  разрещающему - делим на самого себя(т.е получит. 1 )
//идём сверху вниз, обходя k-ую строку 
if (k>0) {//если номер ведущей строки не первый
    for (i=0;i<k;i++){   //строки, находящиеся выше k-ой
  for (j=0;j<size;j++){
  E.mat[i][j]=E.mat[i][j]-E.mat[k][j]*A.mat[i][k];//Вычисляем элементы матрицы e,идя по столбцам с 0 -ого  к последнему  
  }
  for (j=size-1;j>=k;j--){
    A.mat[i][j]=A.mat[i][j]-A.mat[k][j]*A.mat[i][k];//Вычисляем элементы матрицы a,идя по столбцам с последнего к k-ому

  }
    }    
}

for (i=k+1;i<size;i++){   //строки, находящиеся ниже k-ой 
    for (j=0;j<size;j++){    
  E.mat[i][j]=E.mat[i][j]-E.mat[k][j]*A.mat[i][k];
  }
    for (j=size-1;j>=k;j--){
A.mat[i][j]=A.mat[i][j]-A.mat[k][j]*A.mat[i][k];
    }
}
               }
return E;//На месте исходной матрицы должна получиться единичная а на месте единичной - обратная.  
}


Это сообщение отредактировал(а) Vitaly333 - 27.1.2008, 12:34
PM MAIL   Вверх
maxim1000
Дата 27.1.2008, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



вообще, на будущее: в разделе "Алгоритмы" есть реализация многих часто упоминаемых алгоритмов, так что перед подобными вопросами - милости просим туда: http://forum.vingrad.ru/forum/topic-37776.html
а если уже оттуда что-то непонятно/не подходит/отсутствует - тогда можно и пообсуждать


--------------------
qqq
PM WWW   Вверх
reboot
Дата 28.1.2008, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 26.1.2008

Репутация: нет
Всего: нет



СПАСИБО!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0431 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.