2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему
 
 Обращение матриц методом Шульца
Сообщение07.04.2023, 15:45 


31/08/22
183
Всем доброго здоровья и хорошего настроения.
Хочу запрограммировать алгоритм обращения матриц методом Шульца.
Как правильно инициализировать начальное приближение?
Если я делаю, как везде написано, исходя из половины спектрального радиуса (я так понимаю он равен максимальному собственную числу) умноженного либо на единичную матрицу в случае симметричной проблемы либо на $A \cdot A^T$ в случае произвольной проблемы то ничего не получается, ничего не сходится.
Да и можно ли как то обойтись без собственных чисел, так как сама по себе она довольно тяжеловесна?

 Профиль  
                  
 
 Re: Обращение матриц методом Шульца
Сообщение07.04.2023, 16:24 


27/06/20
337
Schrodinger's cat в сообщении #1588670 писал(а):
ничего не сходится
А Ваша матрица точно обратима? :-) Код и/или матрицу покажите?

 Профиль  
                  
 
 Re: Обращение матриц методом Шульца
Сообщение07.04.2023, 19:02 


31/08/22
183
ipgmvq
Точно обратима, так как она взята из примера отсюда:
Итерационный метод Шульца нахождения обратной матрицы
Пример 10.18
Собственно как получается первое приближение $U^{(0)}$ непонятно.

ПС: Код пока написан на MatCAD, что здешние обитатели не любят. Но если надо конечно выложу.
Код примитивен:
1 Создаем первое приближение.
2 Выполняем пункт 2 решения.
3 Выполняем пункт 4 решения.
4 Повторяем 2 и 3 итеративно до сходимости.
Если взять первое приближение из этого примера то алгоритм сходится. Проблема только в том как найти это первое приближение.

 Профиль  
                  
 
 Re: Обращение матриц методом Шульца
Сообщение07.04.2023, 20:08 
Заслуженный участник


18/09/21
1756
Schrodinger's cat в сообщении #1588670 писал(а):
Как правильно инициализировать начальное приближение?
Выбор начального приближения

 Профиль  
                  
 
 Re: Обращение матриц методом Шульца
Сообщение07.04.2023, 23:45 


27/06/20
337
Schrodinger's cat в сообщении #1588670 писал(а):
обойтись без собственных чисел
Помимо такой
$U^{(0)} = \frac{A^{\dag}}{\left\lVert A \right\rVert_2^2}$
где $A^{\dag}$ эрмитово-сопряжённая матрица
можно ещё использовать такие
$U^{(0)} = \frac{A}{\left\lVert A \right\rVert_1^2}$
$U^{(0)} = \frac{A}{\left\lVert A \right\rVert_{\infty}^2}$
$U^{(0)} = \frac{A}{\left\lVert A \right\rVert_F^2}$
$U^{(0)} = \frac{A^{\intercal}}{n \left\lVert A \right\rVert_1 \left\lVert A \right\rVert_{\infty}}$

На Mathcad не пишу. :-( Так это будет выглядеть на Python, где передаваемый номер метода (от 0 до 3 включительно) это как раз эти 4 альтернативных варианта выше:
код: [ скачать ] [ спрятать ]
Используется синтаксис Python
import numpy as np
from numpy.linalg import norm

матрица = np.matrix([[1, 2, 1], [0, 1, 0], [0, 2, 2]])

def найти_обратную(A0, error, X0=None, метод=0):
    методы = [lambda X: X/np.power(norm(X, ord=1), 2),
              lambda X: X/np.power(norm(X, ord=np.inf), 2),
              lambda X: X/np.power(norm(X, ord='fro'), 2),
              lambda X: X.T/(norm(X, ord=1)*norm(X, ord=np.inf)*A0.shape[0])]
    if X0 is None:
        X0 = методы[метод](A0)
        R0 = np.eye(A0.shape[0]) - A0 * X0
        if norm(R0.flatten(), ord=1) >= 1.0:
            return 'Метод не позволяет сформировать начальную матрицу, удовлетворяющую условию'
        else:
            return найти_обратную(A0, error=error, X0=X0, метод=метод)
    else:
        R0 = np.eye(A0.shape[0]) - A0 * X0
        if norm(R0, ord='fro') < error:
            return X0
        else:
            X0 = X0 * (np.eye(A0.shape[0]) + R0)
            return найти_обратную(A0, error=error, X0=X0, метод=метод)
       
обратная = найти_обратную(матрица, error=0.001 , метод=3)
print("Обратная матрица:\n\n", обратная, "\n")
print("Произведение с обратной матрицей:\n\n", обратная * матрица, "\n")
 

 Профиль  
                  
 
 Re: Обращение матриц методом Шульца
Сообщение08.04.2023, 13:54 


31/08/22
183
Все работает, всем спасибо.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group