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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Инвертирование матрици в Visual C++ 2008, ввести одну сформировать другую 
:(
    Опции темы
malyshkin
Дата 24.3.2010, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте

Я работаю над проектом в Visual C++ 2008, переделывая код в add-on'ы для EXCEL (с помощью xlwVisio). То бишь програмирование без main!

Вопрос такой кто нибудь может помочь с кодом инвертирования матрици? 



Заранее спасибо!


Пример кода складывания двух матриц:

Код

MyMatrix
AddMatrix (const MyMatrix MatrixA, 
           const MyMatrix Design)

{
    if (MatrixA.rows() !=Design.rows())
        throw ("Matricer skal have det samme antal rækker!");
    if (MatrixA.columns() !=Design.columns())
        throw ("Matricer skal have det samme antal kollonner!");

    MyMatrix result (MatrixA.rows(), Design.columns());

    for (size_t r=0; r < MatrixA.rows(); r++)
    {
        for (size_t c=0; c < Design.columns(); c++)
        {
            result (r,c)=MatrixA(r,c)+Design(r,c);
        }
    }

    return result;

}

PM MAIL   Вверх
malyshkin
Дата 24.3.2010, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Может кто нибудь код просто инвертирования матрицы подскажет, а то я весь инет облазил (((
PM MAIL   Вверх
t_gran
Дата 25.3.2010, 06:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

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





--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
malyshkin
  Дата 25.3.2010, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(t_gran @ 25.3.2010,  06:52)
А чем это не код?

Это код, но просто пример работы 2008 версии. Мне нужен код инвертирования матрицы NxN. 


А чем это не код?

Это код, но просто пример работы 2008 версии. Мне нужен код инвертирования матрицы NxN. 


PM MAIL   Вверх
malyshkin
Дата 27.3.2010, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Люди!! Неужели никто не знает как инвертировать матрицу в С++ ?? 

Плзз хелп !! 
PM MAIL   Вверх
W4FhLF
Дата 27.3.2010, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



ты за 3 дня в гугл своё вопрос вбить не пытался?

http://drobotenko.com/code_rus.html


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
malyshkin
Дата 3.4.2010, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(W4FhLF @ 27.3.2010,  19:00)
ты за 3 дня в гугл своё вопрос вбить не пытался?

http://drobotenko.com/code_rus.html

Ну как же не пытался, я все перепробовал. Дело в том что тут как показано в примере програмирование без main, так что тот код в ссылке не работает. А во вторых у меня все время выкидывает ошибку:  template <int N> error C2143: syntax error : missing ',' before 'constant' и я не пойму в чем дело. 

Я пытался сделать свое собственный код, но он работает только на небольших матрицах:

Код

MyMatrix InvertMatrix(MyMatrix& CovMatrix)
 {
    int N=CovMatrix.rows(); 
    int j, i, r;
    double factor;
    MyMatrix Inverted(N,N);
    Inverted=CreateUnitMatrix(N);
    for (i=0; i < N; i++)
    {
            factor=1.0/CovMatrix(i,i); //Making sure that the Diagonal is 1.
            for (j=0; j < N; j++)
            {    CovMatrix(i,j)=CovMatrix(i,j)*factor;
                Inverted(i,j)=Inverted(i,j)*factor;
            }
        
            //Making zeros in column i
            for (r=0; r < N; r++)
            {    
                double Numb=CovMatrix(r,i);
                for (size_t j=0; j < CovMatrix.rows(); j++)
                {    
                        if (r==i) {}//Do nothing (this is the row used for creating the other zeros
                        else
                        {
                        CovMatrix(r,j)=CovMatrix(r,j)-Numb*CovMatrix(i,j);                                
                        Inverted(r,j)=Inverted(r,j)-Numb*Inverted(i,j);            
                        }
                }
            }
    }
    RoundingZeros(Inverted);
    return Inverted;
}

MyMatrix CreateUnitMatrix(int Dimension)
{
    MyMatrix UnitMatrix(Dimension,Dimension);
        for(int j=0; j<Dimension; j++)
        {
             for(int i=0; i<Dimension; i++)
                { 
                    if (j==i)
                    {UnitMatrix(i,j)=1;}
                    else
                    {UnitMatrix(i,j)=0;}
                }
        }
        return UnitMatrix;
}


MyMatrix RoundingZeros(MyMatrix& Matrix)
{
    for (size_t i=0; i < Matrix.rows(); i++)
    {
        for (size_t j=0; j < Matrix.columns(); j++)
        {
            if(fabs(Matrix(i,j))<0.000000000001)
            {Matrix(i,j)=0.0;}
        }
    }
return Matrix;




Тут похоже не хватает пивотирования, то бишь если в диагонале стоит 0 то просто надо перепрыгивать этот ряд. У меня уже просто нет фантазии на это дело )) Если кто может помоч советом буду очень признателен !!!
PM MAIL   Вверх
inflamar
Дата 9.6.2010, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(malyshkin @  3.4.2010,  15:52 Найти цитируемый пост)
Ну как же не пытался, я все перепробовал. Дело в том что тут как показано в примере програмирование без main, так что тот код в ссылке не работает. А во вторых у меня все время выкидывает ошибку:  template <int N> error C2143: syntax error : missing ',' before 'constant' и я не пойму в чем дело. 


там есть рекомендации по шаблонам для разных версий VC

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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