Модераторы: LSD, AntonSaburov
  

Поиск:

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


Шустрый
*


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

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



Здравствуйте, читал про метод Гаусса, но не совсем представляю его алгоритмическую реализацию. Очень буду признателен, если поможете словом или кодом=)
PM MAIL   Вверх
nc30
Дата 23.10.2010, 06:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Интересующийся :)
*


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

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



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


Шустрый
*


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

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



И всё-таки хотелось бы увидеть именно алгоритм поиска обратной матрицы в чистом виде. Спасибо.

Это сообщение отредактировал(а) xreal - 1.11.2010, 10:40
PM MAIL   Вверх
xreal
Дата 1.11.2010, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



неужели нет идей?)
PM MAIL   Вверх
jk1
Дата 1.11.2010, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Возьмём две матрицы: саму A и единичную E. Приведём матрицу A к единичной матрице методом Гаусса. После применения каждой операции к первой матрице применим ту же операцию ко второй. Когда приведение первой матрицы к единичному виду будет завершено, вторая матрица окажется равной A-1.


Приведенный код надо слегка дополнить, так чтобы он дублировал свои действия на заранее созданной единичной матрице.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Sibit
Дата 1.11.2010, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А что подразумевается под "в чистом виде"?Википедия?
PM MAIL   Вверх
Teresh
Дата 2.11.2010, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



когда-то давно лаба такая была
код рабочий, но не красивый)

Код

public class Gauss {
    private int n;
    private double a[][];
    private double b[];
    
    Gauss(int n, double a[][], double b[]) {    
        this.n = n;
        this.a = a;
        this.b = b;
    }
    
    public void gauss_method() {
        for (int i = 0 ; i < n; i++) {
            if (test1(a, b) == 2)
                return;
            if (testNull(i, a) == 3)
                return;
            setOne(i, a, b);
            setToFirst(i, a, b);
        }
        getX(a, b);
    }
    
    void printMatrix(double a[][]) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++)
                System.out.print(a[i][j] + " ");
            System.out.print(b[i]);
            System.out.println();
        }
        System.out.println();
    }
    
    private int test1(double a[][], double b[]) {
        int k;
        
        for (int i = 0; i < n; i++) {
            k = 0;
            for (int j = 0; j < n; j++) {
                if (a[i][j] == 0) 
                    k++;
            }
            if (k == 3 && b[i] != 0) {
                System.out.println("Нет решений");
                System.out.println();
                return 2;
            }
        }
        return 1;
    }
    
    private int testNull(int k, double a[][]) {
        int j = k; 
        double temp;
        while (a[k][j] == 0) {    
            j++;
            if (j == n - 1) {
                System.out.println("Деление на ноль");
                return 3;
            }
            for (int i = k; i < n; i++) {
                    temp = a[k][i];
                    a[k][i] = a[j][i];
                    a[j][i] = temp;
                    temp = b[k];
                    b[k] = b[j];
                    b[j] = temp;
            }
        }
        return 1;
    }
    
    private void setOne(int k, double[][] a, double[] b) {
        try {
            for (int i = k + 1; i < n; i++)
             a[k][i] = a[k][i] / a[k][k];   
            b[k] = b[k] / a[k][k];
        } catch (Exception e) {
            System.out.println("sfdsf");
        }
            a[k][k] = 1;
    }
    
    private void setToFirst(int k, double[][] a, double[] b) {
        for (int i = k + 1 ;i < n; i++ ) {
            for (int j = k + 1; j < n; j++) {
                a[i][j] = a[i][j] / a[i][k] - a[k][j];
            }
            b[i] = b[i] / a[i][k] - b[k];
            a[i][k] = 0;
        }    
    }
    
    public double[] getX(double a[][], double b[]) {
        double[] x = new double[n];
        double[] no = new double[1];
        
        if (a[n-1][n-1] != 0) {
            x[n-1] = b[n-1] / a[n-1][n-1];
        }
        else {
            if (b[n-1] != 0) {
             System.out.println("Нет решений"); 
             no[0] = 2;
             return no;
            }
            else {
             System.out.println("Бесконечно решений");
             no[0] = 3;
             return no;
            }
        }
        
        for (int i = n - 2; i >= 0; i--) {
            for (int j = n-1; j > i; j--) {
                b[i] = b[i] - a[i][j] * x[j];
            }
            x[i] = b[i] / a[i][i];
        }
        
        for (int i = 0; i < n; i++) {
         System.out.println("x[" + (i+1) + "] = " + x[i]);
        }   
        
        System.out.println();    
        return x;
    }
}


PM MAIL   Вверх
xreal
Дата 2.11.2010, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем большое спасибо)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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