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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм вычисления определителя... определитель матрицы... 
:(
    Опции темы
GaGu
  Дата 19.1.2008, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброе время суток, господа!
Обращаюсь к вам со следующим вопросом: как на С++ можно реализовать алгоритм вычисления определителя произвольной матрицы NxN, причём сначала программа спрашивает размерность матрицы(то есть N), затем предлагает её заполнить, и уже после этого выводит результат(т.е значение определителя). Прошу хотя бы намекнуть, лучше конечно было бы показать код smile . 
И ещё, есть ли стандартные библиотечные функции для работы с матрицами? Если да, то какие?
Всем заранее спасибо, с уважением GaGu! smile 

PM MAIL   Вверх
JackYF
Дата 19.1.2008, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(GaGu @  19.1.2008,  15:49 Найти цитируемый пост)
как на С++ можно реализовать алгоритм вычисления определителя произвольной матрицы NxN

рекурсивно, к примеру. Определитель матрицы N x N определяется через N определителей матриц N-1 x N-1.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 19.1.2008, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

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



Цитата(GaGu @  19.1.2008,  16:49 Найти цитируемый пост)
как на С++ можно реализовать алгоритм

Перед тем как реализовывать нужно придумать(или уже знать) сам алгоритм.

1. Считать с клавиатуры N.
2. Динамически создать двумерный массив.
3. Посчитать детерминант по твоему алгоритму.
4. Вывести результат.

Какие конкретно пункты из перечисленных вызывают затруднения?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
MAKCim
Дата 19.1.2008, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(JackYF @  19.1.2008,  17:00 Найти цитируемый пост)
рекурсивно, к примеру. Определитель матрицы N x N определяется через N определителей матриц N-1 x N-1. 

плохо
GaGu
LU-разложение
тут


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Treod
Дата 19.1.2008, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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




Метод Гаусса:
Код

#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
    double *a, k, r, max;
    int i, j ,q, n, j_max;

    cout << "Input n: ";
    cin >> n;
    a=new double [n*n];
    for (i=0; i<n; i++){
        for (j=0; j<n; j++){
            cout << "Input a[" << i << "][" << j << "]=";
            cin >> a[i*n+j];
        }
    }
    for (i=0; i<n; i++){
        for (j=0; j<n; j++)
            cout << a[i*n+j] << " ";
        cout << endl;
    }

    for (i=0; i<n-1; i++){
        // Ищем максимальный по 
        // модулю элемент в столбце
        max=a[i*n+i];
        j_max=i;
        for (j=i+1; j<n; j++){
            if (fabs(a[j*n+i])>fabs(max)){
                max=a[j*n+i];
                j_max=j;
            }
        }
        // Меняем строки местами
        if (j_max!=i){
            for (j=0; j<n; j++){
                r=a[j_max*n+j];
                a[j_max*n+j]=a[i*n+j];
                a[i*n+j]=-r;
            }
        }
        /*
        Если элемент главной диагонали не равен нулю,
        используя элементарные преобразования,
        обнуляем все элементы j-ого столбца,
        начиная с i+1 элемента.
        */
        if (a[i*n+i]!=0){
            for (j=i+1; j<n; j++){
                k=a[j*n+i]/a[i*n+i];
                for (q=i; q<n; q++)
                    a[j*n+q]-=k*a[i*n+q];
            }
        }
        else{
            cout << "Net resh!";
            return 0;
        }
    }
    if (a[(n-1)*n+(n-1)]==0){
        cout << "Net resh!";
        return 0;
    }

    k=1;
    for (i=0; i<n; i++)
        k=k*a[i*n+i];
    cout << endl;
    cout << "det= " << k << endl;

    delete [] a;
    cin >> i;
    return 0;

PM MAIL ICQ   Вверх
GaGu
Дата 19.1.2008, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за код, очень помогло. Я вот только в С++ не очень то и гуру, поэтому хочу спросить: что за функция fabs()? И ещё, может кто знает, где можно доку достать по функциям, содержащимся в <math.h>?
Заранее спасибо.
PM MAIL   Вверх
JackYF
Дата 19.1.2008, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(GaGu @  19.1.2008,  20:59 Найти цитируемый пост)
то за функция fabs()

документация рулит. Прочитай.


Цитата(GaGu @  19.1.2008,  20:59 Найти цитируемый пост)
И ещё, может кто знает, где можно доку достать по функциям, содержащимся в <math.h>

cppreference.com


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
DigitSphinx
Дата 19.1.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(GaGu @  19.1.2008,  21:59 Найти цитируемый пост)
И ещё, может кто знает, где можно доку достать по функциям, содержащимся в <math.h>?

Google.com
MSDN



--------------------
Чтобы пробить стену лбом нужен или большой разбег, или много лбов.
(Альберт Эйнштейн)
Умен ты или глуп, велик ты или мал, не знаем мы, пока ты слова не сказал.
(Альберт Эйнштейн)
user posted image
PM MAIL ICQ   Вверх
Treod
Дата 21.1.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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




Цитата

что за функция fabs()

fabs() - абсолютное значение числа;)
PM MAIL ICQ   Вверх
SimpAlex
Дата 22.7.2008, 15:41 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ygujyg

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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