Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нахождение обратной матрицы. 
:(
    Опции темы
Spline
Дата 12.2.2011, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть матрица размерностью 5x5, представленная в виде:
Код

double X11=1;
double X12=2;
double X13=3;
double X14=4;
double X15=5;
double X21=6;
double X22=7;
........

Есть код для нахождения обратной матрицы методом Гаусса—Жордана
Код

const double eps = 10e-5;

void diagon(){
    int i,j,k,leader_pos;
    double leader, temp;
    for(i=0;i<dim;i++){
//вычисляем ведущий элемент
        leader=A[i][i];
        leader_pos=i;
        for(j=i;j<dim;j++) 
                if ( fabs(A[j][i])>fabs(leader) ){         
                leader=A[j][i];                        
                leader_pos=j;
            }    
            if (fabs(leader)>eps){
//меняем местами текущую строку со строкой с новым ведущим элементом
            for(j=0;j<dim;j++){
                temp=A[i][j];
                A[i][j]=A[leader_pos][j];
                A[leader_pos][j]=temp;
    
                temp=A_[i][j];
                A_[i][j]=A_[leader_pos][j];
                A_[leader_pos][j]=temp;
            } 
//изменяем строки, ведущий элемент - A[i][i]
            for(j=0;j<dim;j++){
                if (i!=j){
                    temp=(A[j][i]/A[i][i]);
                    for(k=0;k<dim;k++){
                        A[j][k]-=A[i][k]*temp;
                        A_[j][k]-=A_[i][k]*temp;
                    }
                }
            }

        }
    }    
}
double t4;
for(i=0;i<dim;i++){
    t4=A[i][i];
    A[i][i]/=t4;
    for(int k=0;k<dim;k++)
    A_[i][k]/=t4;
}

Как передать данные в код и получить обратную матрицу?
PM MAIL   Вверх
Фантом
Дата 12.2.2011, 22:04 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


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

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



Цитата(Spline @  12.2.2011,  21:33 Найти цитируемый пост)
Есть матрица размерностью 5x5, представленная в виде:

Постарайтесь объяснить, зачем Вам необходимо столь идиотское (извините, но иначе это не назвать) представление для матрицы.
PM   Вверх
Spline
Дата 12.2.2011, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 smile Потому что это просто и это работает. К сожалению с языком я пока знаком плохо, поэтому и прошу помощи в таком, наверное, простом случае.
PM MAIL   Вверх
Фантом
Дата 12.2.2011, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


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

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



Цитата(Spline @  12.2.2011,  22:16 Найти цитируемый пост)
Потому что это просто и это работает. 

Понятно. Тогда пытайтесь решить свою задачу сами - удары ручкой граблей по голове благотворно влияют на мозги.  smile 

А если серьезно - это, возможно, и "работает", но ничего простого в этом способе нет. Сделайте нормальный массив double X[5][5] и работайте с ним.
PM   Вверх
Spline
Дата 12.2.2011, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ок пусть тогда вместо коэфициентов будет массив 
Код

double X[5][5]


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


Вы это прекратите!
***


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

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



Тогда код у Вас уже есть. Поменяйте X[5][5] на A[5][5], присвойте dim=5 и все.
PM   Вверх
Spline
Дата 13.2.2011, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Немного изменил код. Я так понял нужно 2 массива A - матрица и A_ - единичная матрица. Нужно чтобы функция diagon возвращала обратную матрицу.
Вроде так должно быть
Код

double Result = diagon(A[5][5],A_[5][5]);

Сама функция:
Код

double diagon(double A[5][5], double A_[5][5]){
    int i,j,k,leader_pos;
    double leader, temp;
    double dim=5;
    const double eps = 10e-5;
    for(i=0;i<dim;i++){
//вычисляем ведущий элемент
        leader=A[i][i];
        leader_pos=i;
        for(j=i;j<dim;j++) 
                if ( fabs(A[j][i])>fabs(leader) ){         
                leader=A[j][i];                        
                leader_pos=j;
            }    
            if (fabs(leader)>eps){
//меняем местами текущую строку со строкой с новым ведущим элементом
            for(j=0;j<dim;j++){
                temp=A[i][j];
                A[i][j]=A[leader_pos][j];
                A[leader_pos][j]=temp;
    
                temp=A_[i][j];
                A_[i][j]=A_[leader_pos][j];
                A_[leader_pos][j]=temp;
            } 
//изменяем строки, ведущий элемент - A[i][i]
            for(j=0;j<dim;j++){
                if (i!=j){
                    temp=(A[j][i]/A[i][i]);
                    for(k=0;k<dim;k++){
                        A[j][k]-=A[i][k]*temp;
                        A_[j][k]-=A_[i][k]*temp;
                    }
                }
            }

        }
    }
double t4;
for(i=0;i<dim;i++){
    t4=A[i][i];
    A[i][i]/=t4;
    for(int k=0;k<dim;k++)
    A_[i][k]/=t4;
}
return (A_[5][5]);
};

Всё ли так?
PM MAIL   Вверх
Фантом
Дата 13.2.2011, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


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

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



Цитата(Spline @  13.2.2011,  13:12 Найти цитируемый пост)
Всё ли так? 

Кхм... знаете, пожалуй, с таким знанием языка лучше набивать руку на примерах попроще. Ваша функция возвращает не массив, а число типа double, так что return A_[5][5] приведет не к тем последствиям, которые планировались. Кроме этого - почему переменная dim (которая, кстати, вполне могла бы быть константой) имеет тип double?

Или это все-таки учебное задание, которое Вы не можете выполнить? Тогда Вам в "центр помощи".
PM   Вверх
Spline
Дата 13.2.2011, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нет это не учебное задание.
PM MAIL   Вверх
Фантом
Дата 13.2.2011, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


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

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



Цитата(Spline @  13.2.2011,  13:45 Найти цитируемый пост)
Нет это не учебное задание. 

Тогда действительно начните с чего-то попроще,  иначе просто закопаетесь в ворохе информации. И не пользуйтесь (по крайней мере, сначала) чужим кодом, на C/C++ очень велика вероятность наткнуться на что-то совершенно нечитаемое.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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