Дискуссионный математический форумМатематический форум
Математический форум Math Help Planet

Обсуждение и решение задач по математике, физике, химии, экономике

Теоретический раздел
Часовой пояс: UTC + 3 часа [ Летнее время ]
новый онлайн-сервис
число, сумма и дата прописью

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Ранг матрицы
СообщениеДобавлено: 25 янв 2023, 12:49 
Не в сети
Beautiful Mind
Аватара пользователя
Зарегистрирован:
21 дек 2021, 01:39
Сообщений: 1753
Cпасибо сказано: 81
Спасибо получено:
329 раз в 315 сообщениях
Очков репутации: 70

Добавить очки репутацииУменьшить очки репутации
Добрый день!
В Excel нет встроенной функции для вычисления ранга матрицы.
Может быть у кого-нибудь есть соответствующая готовая программа-функция пользователя?
Я пытался самостоятельно написать такую программу на Excel VBA, но она иногда выдает неверные значения; где-то ошибка, не могу ее найти.

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Ранг матрицы
СообщениеДобавлено: 25 янв 2023, 15:09 
Не в сети
Beautiful Mind
Зарегистрирован:
22 дек 2019, 21:57
Сообщений: 1863
Откуда: Болгарии
Cпасибо сказано: 65
Спасибо получено:
735 раз в 714 сообщениях
Очков репутации: 144

Добавить очки репутацииУменьшить очки репутации
1) Начиная с EXCEL 2003 есть встроенная ф-я для нахождения определитель(детерминант) квадратную матрицу,
в англоязечных версиях это ф-я [math]MDETERM(array)[/math] , в русскоязычнах МОПРЕД(матрица) - так что
можно воспользоваться их в Вашей VBA for EXCEL программу для нахождения ранга матриц;
2) Есть такая книга "Инженерные расчеты в EXCEL", Рональд У. Ларсен, Издательский дом "Вильямс", 2004г.
Возможно есть и более позднее издания этой книжку, но я с этим располагаю. Здесь есть изложения методы
вычисления определителя при помощи EXCEL-я, решения систем линейных у-ния, обращение матрицы как и
умножения и сложения матриц - может как то она Вам поможет.

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Ранг матрицы
СообщениеДобавлено: 25 янв 2023, 15:43 
Не в сети
Последняя инстанция
Зарегистрирован:
12 сен 2010, 12:46
Сообщений: 6077
Cпасибо сказано: 137
Спасибо получено:
1033 раз в 976 сообщениях
Очков репутации: 67

Добавить очки репутацииУменьшить очки репутации
Exzellenz, ранг если в матрице до сотни строк/столбцов хорошо считается методом Гаусса. Так что ищите что-то типа "метод Гаусса в VBA". Вам нужно оттуда только 1 часть программы - прямой ход метода Гаусса

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Ранг матрицы
СообщениеДобавлено: 25 янв 2023, 17:15 
Не в сети
Последняя инстанция
Зарегистрирован:
12 сен 2010, 12:46
Сообщений: 6077
Cпасибо сказано: 137
Спасибо получено:
1033 раз в 976 сообщениях
Очков репутации: 67

Добавить очки репутацииУменьшить очки репутации
Решил подойти еще более современно, попросил чатгпт
И вот результат
Function MatrixRank(matrix As Range) As Integer
Dim invMatrix As Variant
invMatrix = Application.WorksheetFunction.Transpose(matrix)
Dim rows As Integer, cols As Integer
rows = matrix.Rows.Count
cols = matrix.Columns.Count
Dim rank As Integer
rank = 0
Dim tempMatrix() As Double
ReDim tempMatrix(1 To rows, 1 To cols)
Dim row As Integer, col As Integer
For row = 1 To rows
For col = 1 To cols
tempMatrix(row, col) = matrix(row, col)
Next col
Next row
Dim pivot As Integer, temp As Double
For pivot = 1 To rows
If (pivot > cols) Then
Exit For
End If
If (tempMatrix(pivot, pivot) <> 0) Then
rank = rank + 1
temp = tempMatrix(pivot, pivot)
For col = 1 To cols
tempMatrix(pivot, col) = tempMatrix(pivot, col) / temp
Next col
For row = 1 To rows
If (row <> pivot) Then
temp = tempMatrix(row, pivot)
For col = 1 To cols
tempMatrix(row, col) = tempMatrix(row, col) - tempMatrix(pivot, col) * temp
Next col
End If
Next row
End If
Next pivot
MatrixRank = rank
End Function

Вроде работает

Вернуться к началу
 Профиль  
Cпасибо сказано 
За это сообщение пользователю MihailM "Спасибо" сказали:
Exzellenz
 Заголовок сообщения: Re: Ранг матрицы
СообщениеДобавлено: 25 янв 2023, 17:18 
Не в сети
Beautiful Mind
Аватара пользователя
Зарегистрирован:
21 дек 2021, 01:39
Сообщений: 1753
Cпасибо сказано: 81
Спасибо получено:
329 раз в 315 сообщениях
Очков репутации: 70

Добавить очки репутацииУменьшить очки репутации
Pirinchily и MihailM, спасибо за быстрый ответ.
Встроенную функцию МDETERM я знаю, но это не ранг. Если квадтатная матрица [math]n \times n[/math]вырожденная, детерминант равен нулю, это значит, что ранг меньше n, но какой именно - остается неизвестным.

Метод Гаусса мне тоже хорошо известен, именно его я и использовал при написании программы-функции MRang(X) as integer. Но, как я уже говорил, где-то в программе ошибка, т.к. иногда она дает правилняй ответ правильный, а иногда - неправильный. Ошибку искал-искал, но так и не нашел.
Короче, нужна помощь.

За ссылку на книгу спасибо, попробую поискать ее в интернете.

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Ранг матрицы
СообщениеДобавлено: 25 янв 2023, 17:35 
Не в сети
Beautiful Mind
Аватара пользователя
Зарегистрирован:
21 дек 2021, 01:39
Сообщений: 1753
Cпасибо сказано: 81
Спасибо получено:
329 раз в 315 сообщениях
Очков репутации: 70

Добавить очки репутацииУменьшить очки репутации
MihailM писал(а):
Решил подойти еще более современно, попросил чатгпт
И вот результат... Вроде работает
Спасибо, но не работает.
Я скопировал эту программу в Excel-модуль и в качестве теста выдумал такую таблицу (матрицу):

[math]\begin{pmatrix} 0 & 1 & 2 & 3 \\ 0 & 0 & 1 & 2 \\ 0 & 3 & 0 & 1 \\ 1 & 4 & 3 & 0 \end{pmatrix}[/math]

Определитель матрицы равен [math]-4 \ne 0,[/math] это значит, что матрица невырожденная, и ее ранг должен быть равен 4.
Моя программа выдает ответ ранг = 3, а приведенная вами программа выдает ноль, чего вообще не бывает.

Вот текст моей программы:

Function MRang(Matrix) As Integer
Dim X, N As Integer, i As Integer, j As Integer, k As Integer, Mat() As Single, Zeile() As Single, Z As Byte, S As Byte
N = 0
For Each X In Matrix
N = N + 1
Next
N = Sqr(N)
ReDim Mat(1 To N, 1 To N) As Single, Zeile(N) As Single

k = 0
For Each X In Matrix ' Инициирует матрицу-----
k = k + 1
i = Int((k - 0.5) / N)
j = k - i * N
Mat(i + 1, j) = X
Next
' ----------------------------------- Приведение к треугольному виду ---------------------
For k = 1 To N ' Ведущая строка
For i = k To N ' текущая строка
X = Mat(i, k)
'-------------------------------- Перестановка строк -------------------------------------
If X = 0 And i < N Then ' поиск строки с X<>0
For Z = i To N: Zeile(Z) = Mat(i, Z): Next Z 'запомнить строку номер i
Z = i
Do 'поиск строки с X<>0
Z = Z + 1
X = Mat(Z, k)
Loop While X = 0 And Z < N
If Z < N Then
For S = i To N: Mat(i, S) = Mat(Z, S): Mat(Z, S) = Zeile(S): Next S ' собственно перестановка
End If
End If
'-------------------------------- конец перестановки -------------------------------------
X = Mat(i, k)
If X <> 0 And X <> 1 Then
For j = k To N
Mat(i, j) = Mat(i, j) / X 'Нормировка строк на первый ненулевой элемент
Next j
End If
Next i

For i = k + 1 To N ' Вычитаемая строка ( k-тая ), уменьшаемая строка (i-тая)
If Mat(i, k) <> 0 Then
For j = k To N ' элементы уменьшаемой строки
Mat(i, j) = Mat(i, j) - Mat(k, j)
Next j
End If
Next i

Next k
'----------------------- вычисление ранга = число ненулевых элементов (равных 1) на главной диагонали --------------------
X = 0
For i = 1 To N
If Mat(i, i) <> 0 Then X = X + 1
Next i
MRang = X
End Function

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Ранг матрицы
СообщениеДобавлено: 25 янв 2023, 19:38 
Не в сети
Последняя инстанция
Зарегистрирован:
12 сен 2010, 12:46
Сообщений: 6077
Cпасибо сказано: 137
Спасибо получено:
1033 раз в 976 сообщениях
Очков репутации: 67

Добавить очки репутацииУменьшить очки репутации
Exzellenz писал(а):
Моя программа выдает ответ ранг = 3, а приведенная вами программа выдает ноль, чего вообще не бывает.

Действительно, врет чатгпт) Но если поставить последнюю строку на первое место, то вычислит ранг правильно!
В общем доверия ИИ пока нет, но то что он такую прогу сам написал говорит о многом, думаю такие стандартные задачи он скоро начнет решать без ошибок

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Ранг матрицы
СообщениеДобавлено: 25 янв 2023, 20:52 
Не в сети
Beautiful Mind
Аватара пользователя
Зарегистрирован:
21 дек 2021, 01:39
Сообщений: 1753
Cпасибо сказано: 81
Спасибо получено:
329 раз в 315 сообщениях
Очков репутации: 70

Добавить очки репутацииУменьшить очки репутации
Такое впечатление, что приведенная вами программа тупо подсчитывает число не равных нулю членов, стоящих на главной диагонали в исходной матрице.
А "ставить последнюю строку на первое место" она должна сама (в случае необходимости).

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Ранг матрицы
СообщениеДобавлено: 25 янв 2023, 22:54 
Не в сети
Beautiful Mind
Зарегистрирован:
22 дек 2019, 21:57
Сообщений: 1863
Откуда: Болгарии
Cпасибо сказано: 65
Спасибо получено:
735 раз в 714 сообщениях
Очков репутации: 144

Добавить очки репутацииУменьшить очки репутации
Exzellenz писал(а):
Встроенную функцию МDETERM я знаю, но это не ранг. Если квадтатная матрица n×n
вырожденная, детерминант равен нулю, это значит, что ранг меньше n, но какой именно - остается неизвестным.

Конечно это не ранг :) , но я имел в виду, что у Вашей програме Вы можете устроить цикл с шагом назади и вычислять все миноры,
при помощи ф-ю МDETERM пока не найдите того, кто [math]\ne 0[/math] , так можно определить rang матрицы.

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Ранг матрицы
СообщениеДобавлено: 25 янв 2023, 23:32 
Не в сети
Beautiful Mind
Аватара пользователя
Зарегистрирован:
21 дек 2021, 01:39
Сообщений: 1753
Cпасибо сказано: 81
Спасибо получено:
329 раз в 315 сообщениях
Очков репутации: 70

Добавить очки репутацииУменьшить очки репутации
По-моему метод Гаусса проще.

Вернуться к началу
 Профиль  
Cпасибо сказано 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему    На страницу 1, 2, 3  След.  Страница 1 из 3 [ Сообщений: 26 ]

 Похожие темы   Автор   Ответы   Просмотры   Последнее сообщение 
Ранг матрицы

в форуме Линейная и Абстрактная алгебра

any5957

2

444

22 окт 2014, 21:47

Ранг матрицы

в форуме Линейная и Абстрактная алгебра

Maik

2

262

29 июн 2021, 18:49

Ранг матрицы

в форуме Линейная и Абстрактная алгебра

Sasha9468

3

67

12 мар 2024, 14:19

Ранг матрицы

в форуме Линейная и Абстрактная алгебра

TeorVer

2

296

17 мар 2017, 16:52

Ранг матрицы

в форуме Линейная и Абстрактная алгебра

pinkpony

1

299

27 сен 2017, 01:06

Ранг матрицы

в форуме Линейная и Абстрактная алгебра

lc2

13

513

19 июн 2019, 13:22

Ранг блочной матрицы

в форуме Линейная и Абстрактная алгебра

Romaru

1

241

28 июл 2019, 15:41

Найти ранг матрицы

в форуме Линейная и Абстрактная алгебра

Padawan

4

335

11 дек 2017, 18:45

Ранг матрицы и базисный минор

в форуме Линейная и Абстрактная алгебра

32423fsdf

4

160

15 ноя 2023, 01:09

Определить словарный ранг матрицы

в форуме Дискретная математика, Теория множеств и Логика

andreta

3

854

29 май 2014, 20:00


Часовой пояс: UTC + 3 часа [ Летнее время ]



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

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


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

Найти:
Перейти:  

Яндекс.Метрика

Copyright © 2010-2023 MathHelpPlanet.com. All rights reserved