Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/60: Рейтинг темы: голосов - 60, средняя оценка - 4.95
3 / 3 / 0
Регистрация: 15.11.2021
Сообщений: 65

Метод Холецкого решения СЛАУ

18.01.2022, 16:21. Показов 13374. Ответов 5

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста написать код для решения СЛАУ методом Холецкого (не встроенным методом).
Пример СЛАУ на фото.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.01.2022, 16:21
Ответы с готовыми решениями:

Параллельное умножение матрицы на вектор для решения СЛАУ в Python
Мне нужно попробовать ускорить процесс решения СЛАУ. У меня есть обратная матрица A и вектор B мне нужно перемножить их для получения...

Метод Холецкого решения СЛАУ
Помогите написать код для решения СЛАУ методом Холецкого по данной блок-схеме.

Метод Холецкого для решения Слау
Здравствуйте все. Не подскажете где найти подробное описание метода Холецкого для решеня системы линейных уравнений. По интернету искал...

5
3 / 3 / 0
Регистрация: 15.11.2021
Сообщений: 65
18.01.2022, 16:44  [ТС]
Есть код, но как его сделать универсальным для любого размера уравнения?
Приведённый ниже код решает СЛАУ с пятью x
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import numpy as np
import cmath as cm #Для комплексных чисел
import math as m
 
 
wide_arr = np.array([[1, 3, -2, 0, -2, 0.5],
                     [3, 4, -5, 1, -3, 5.4],
                     [-2, -5, 3, -2, 2, 5.0],
                     [0, 1, -2, 5, 3, 7.5],
                     [-2, -3, 2, 3, 4, 3.3]])
 
#Формирование матрицы t элементов
t_arr = np.zeros((wide_arr.shape), dtype = complex)
 
t_arr[0][0] = cm.sqrt(wide_arr[0][0]) #t[1][1]
#Находим t[1][j]
for i in range(wide_arr.shape[1]-1): 
    t_arr[0][i] = wide_arr[0][i]/t_arr[0][0]
 
#t[2][2]
t_arr[1][1] = cm.sqrt(wide_arr[1][1] - (t_arr[0][1]**2)) 
#Находим t[2][j]
for j in range(2,5):
    t_arr[1][j] = (wide_arr[1][j] - (t_arr[0][1])*t_arr[0][j])/t_arr[1][1]
 
#t[3][3]
t_arr[2][2] = cm.sqrt(wide_arr[2][2] - (t_arr[0][2]**2 + t_arr[1][2]**2) ) 
#Находим t[3][j]
for j in range(3,5):
    t_arr[2][j] = (wide_arr[2][j] - (t_arr[0][2]*t_arr[0][j] + t_arr[1][2]*t_arr[1][j]))/t_arr[2][2]
 
#t[4][4]
t_arr[3][3] = cm.sqrt(wide_arr[3][3] - (t_arr[0][3]**2 + t_arr[1][3]**2 + t_arr[2][3]**2))
#Находим t[4][5]
t_arr[3][4] = (wide_arr[3][4] - (t_arr[0][3]*t_arr[0][4] + t_arr[1][3]*t_arr[1][4] + t_arr[2][3]*t_arr[2][4]))/t_arr[3][3]
#t[5][5]
t_arr[4][4] = cm.sqrt(wide_arr[4][4] - (t_arr[0][4]**2 + t_arr[1][4]**2 + t_arr[2][4]**2 + t_arr[3][4]**2))
 
 
#Находим y[i]
#y[1]
t_arr[0][5] = wide_arr[0][5]/t_arr[0][0]
#y[2]
t_arr[1][5] = (wide_arr[1][5] - t_arr[0][1]*t_arr[0][5])/t_arr[1][1]
#y[3]
t_arr[2][5] = (wide_arr[2][5] - (t_arr[0][2]*t_arr[0][5] + t_arr[1][2]*t_arr[1][5]))/t_arr[2][2]
#y[4]
t_arr[3][5] = (wide_arr[3][5] - (t_arr[0][3]*t_arr[0][5] + t_arr[1][3]*t_arr[1][5] + t_arr[2][3]*t_arr[2][5]))/t_arr[3][3]
#y[5]
t_arr[4][5] = (wide_arr[4][5] - (t_arr[0][4]*t_arr[0][5] + t_arr[1][4]*t_arr[1][5] + t_arr[2][4]*t_arr[2][5] + t_arr[3][4]*t_arr[3][5]))/t_arr[4][4]
 
#Находим решение
x_arr = np.zeros((wide_arr.shape[0],1), dtype = complex)
 
#x[5]
x_arr[4] = t_arr[4][5]/t_arr[4][4]
#x[4]
x_arr[3] = (t_arr[3][5] - t_arr[3][4]*x_arr[4])/t_arr[3][3]
#x[3]
x_arr[2] = (t_arr[2][5] - (t_arr[2][3]*x_arr[3] + t_arr[2][4]*x_arr[4]))/t_arr[2][2]
#x[2]
x_arr[1] = (t_arr[1][5] - (t_arr[1][2]*x_arr[2] + t_arr[1][3]*x_arr[3] + t_arr[1][4]*x_arr[4]))/t_arr[1][1]
#x[1]
x_arr[0] = (t_arr[0][5] - (t_arr[0][1]*x_arr[1] + t_arr[0][2]*x_arr[2] + t_arr[0][3]*x_arr[3] + t_arr[0][4]*x_arr[4]))/t_arr[0][0]
 
 
def printMatrix ( matrix ): 
   for i in range ( len(matrix) ): 
      for j in range ( len(matrix[i]) ): 
          print ( "{:2.3f}".format(matrix[i][j]), end = " ") 
      print('')
      print('') 
 
print('Матрица t,y элементов')
printMatrix(t_arr)
print('Решение')
for i in range(1,6):
    print('x{} = {:2.3f}'.format( i, x_arr[i-1][0].real))
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
18.01.2022, 21:58
Лучший ответ Сообщение было отмечено ApeFake как решение

Решение

ApeFake,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import numpy as np
import cmath as cm #Для комплексных чисел
import math as m
 
def printMatrix ( matrix ): 
   for i in range ( len(matrix) ): 
      for j in range ( len(matrix[i]) ): 
          print ( "{:2.2f}".format(matrix[i][j]), end = " ") 
      print('')
 
 
wide_arr = np.array([[1, 3, -2, 0, -2, 0.5],
                     [3, 4, -5, 1, -3, 5.4],
                     [-2, -5, 3, -2, 2, 5.0],
                     [0, 1, -2, 5, 3, 7.5],
                     [-2, -3, 2, 3, 4, 3.3]])
n = len(wide_arr)
#Формирование матрицы t элементов
t_arr = np.zeros((wide_arr.shape), dtype = complex)
 
t_arr[0] = wide_arr[0]/cm.sqrt(wide_arr[0][0])
for i in range(1, n):
    t_arr[i][i] = cm.sqrt(wide_arr[i][i] - (t_arr[:,i]**2).sum()) 
    t_arr[i,i+1:] = (wide_arr[i,i+1:] - (t_arr[:i,i].reshape(-1,1)*t_arr[:i,i+1:]).sum(0))/t_arr[i][i]
 
#Находим решение
y = t_arr[:,n].reshape(-1,1)
t_arr = t_arr[:,:n]
x_arr = np.zeros((n,1), dtype = complex)
for i in range(1, n + 1):
    x_arr[-i, 0] = (y[-i] - (t_arr[-i, -i:] * x_arr[-i:, 0]).sum() )/ t_arr[-i, -i]
 
print('Матрица t,y элементов')
printMatrix(np.hstack((t_arr,y)))
print('Решение')
for i in range(1,6):
    print('x{} = {:2.3f}'.format( i, x_arr[i-1][0].real))
1
3 / 3 / 0
Регистрация: 15.11.2021
Сообщений: 65
19.01.2022, 09:45  [ТС]
Gdez, Спасибо! С ошибкой ниже разобрался
Миниатюры
Метод Холецкого решения СЛАУ  
0
 Аватар для Aviz__
2754 / 2061 / 509
Регистрация: 17.02.2014
Сообщений: 9,491
19.01.2022, 10:16
как ты понимаешь это:
Цитата Сообщение от ApeFake Посмотреть сообщение
не встроенным методом
Цитата Сообщение от ApeFake Посмотреть сообщение
numpy
это встроена, или как?
0
3 / 3 / 0
Регистрация: 15.11.2021
Сообщений: 65
19.01.2022, 11:21  [ТС]
Aviz__, Вот решение встроенным методом
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import numpy as np
from time import time
from scipy.linalg import solve_triangular
A = np.matrix([[15, 3, 4, 5],
                     [2, 16, 4, 5],
                     [2, 3, 17, 5],
                     [2, 3, 4, 18]])
B = np.array  ([13, -1, 17, -50])
 
#Разложение Холецкого
tic = time()
for i in range(10000):
    L = np.linalg.cholesky(A)
    Y = solve_triangular(L, B, lower = True, check_finite = False)
    X = solve_triangular(L, Y, lower = True, trans = 1, check_finite = False)
toc = time()
print(X)
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.01.2022, 11:21
Помогаю со студенческими работами здесь

Метод Холецкого для решения Слау
Ты не мог бы выложить программу?

Исследовать метод квадратных корней и метод Холецкого для решения СЛАУ
> Исследовать метод квадратных корней и метод Холецкого для решения СЛАУ при суммировании и вычислений корня с обычной и двоичной...

Разложение Холецкого для решения СЛАУ
Здравствуйте помогите пожалуйста создать программу на с++ которая решает СЛАУ методом разложении Холецкого , Элементы матрицы должны...

Написать три алгоритма решения СЛАУ: Метод прогонки, метод квадратных корней, метод вращений
Начал писать курсовую. Нужно написать три алгоритма решения СЛАУ: прогонки, квадратных корней, вращений. С методом прогонки более менее...

Метод простых итераций и метод Зейделя для решения СЛАУ
1. Методом простых итераций и методом Зейделя решить СЛАУ вида Bx=с B=\begin{pmatrix}21 & 3 & 1 & 1\\ 3 & 21 & 2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru