|
Garri |
|
|
Группы: Registered
|
При деление числа на матрицу, скажем, 3х1 появляется надпись — Матрица-делитель не квадратная. |
![]() |
|
|
smath |
|
|
Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member Сказал «Спасибо»: 634 раз |
Зависит от того, что Вы хотите получить… В контексте математики программа абсолютно законно сообщает, что данная операция незаконна, т.к. нельзя найти обратную матрицу от неквадратной. |
![]() |
WWW |
|
Garri |
|
|
Группы: Registered
|
тут имеется ввиду столбец из 3-х чисел. Число делится на каждое значение из этого столбеца, в результате получается 3 др. числа. Если так нельзя использовать матрицу то что можно использовать таким образом? |
![]() |
|
|
smath |
|
|
Группы: Developers, Registered, Knovel Developers, Administrators, Advanced Member Сказал «Спасибо»: 634 раз |
Много раз писал как работать с подобным классом задач. Посмотрите например тут: Предлагаю сделать так: С уважением. |
![]() |
WWW |
|
Garri |
|
|
Группы: Registered
|
Спасибо, будем разбираться. |
![]() |
|
| Пользователи, просматривающие эту тему |
|
Guest |
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Xcode на маке. Компилирует, но выдает ошибку (Threat 1: signal SIGABRT), если матрица не квадратная.
#include <iostream>
using namespace std;
const int N=3;
const int M=10;
int main(int argc, const char * argv[]) {
int a[N][M];
for(int i=0;i<M;i++){
for(int j=0;j<N;j++){
a[i][j]=rand()%2;
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
post_zeew
22k3 золотых знака26 серебряных знаков37 бронзовых знаков
задан 29 окт 2016 в 20:04
1
Поменяйте местами M и N в циклах.
Вы объявляете Ваш массив как int a[N][M];, где N = 3 и M = 10.
Вы обращаетесь к массиву с помощью двух индексов a[i][j].
Индекс i должен быть в пределах от 0 и до N, а j – от 0 и до M.
В Вашем же варианте Вы выходите за пределы массива.
ответ дан 29 окт 2016 в 20:15
post_zeewpost_zeew
22k3 золотых знака26 серебряных знаков37 бронзовых знаков
2
Как уже было замечено в комментариях, у вас неправильно заданы верхние границы для циклов.
int a[N][M];
for(int i=0;i<M;i++){
^^^^
for(int j=0;j<N;j++){
^^^^
a[i][j]=rand()%2;
cout<<a[i][j]<<" ";
}
cout<<endl;
}
Должно быть
int a[N][M];
for(int i=0;i<N;i++){
^^^
for(int j=0;j<M;j++){
^^^
a[i][j]=rand()%2;
cout<<a[i][j]<<" ";
}
cout<<endl;
}
Чтобы избежать подобного рода ошибок вы можете в C++ инициализировать и вывести на консоль массив следующим образом, используя цикл на основе диапазон.
for ( autp &row : a )
{
for ( auto &x : row )
{
x = rand() % 2;
cout << x << " ";
}
cout << endl;
}
Имейте в виду, что функция rand определена в заголовке <cstdlib>, который следует включить в программу
#include <cstdlib>
ответ дан 29 окт 2016 в 20:20
Vlad from MoscowVlad from Moscow
44.6k3 золотых знака37 серебряных знаков87 бронзовых знаков
Я пытаюсь провести сетевой анализ, и после некоторых качественных данных о культуре я хочу увидеть, как мои узлы культуры связаны друг с другом. Для этого я создал в Excel файл csv с 46 строками и столбцами, он же квадратная матрица. Я попробовал следующие два набора кода, чтобы получить сетевой вывод в R.
Первая попытка (не получилось):
library(igraph)
my_data <- read.csv(file.choose(),header=TRUE, row.names=NULL)
my_matrix <- as.matrix(my_data)
my_first_network <-
graph.adjacency(my_matrix,mode="undirected",diag=FALSE)
my_first_network
plot(my_first_network)
У меня такие ошибки:
Ошибка в graph.adjacency.dense(adjmatrix, режим = режим, взвешенный = взвешенный, :
В Structure_generators.c:274 : неквадратная матрица, неквадратная матрица
Кроме того:
Предупреждающее сообщение:
В mde(x): NA, введенные принудительно
Вторая попытка (тоже не сработала):
my_data <- read.csv(file.choose(),sep=",",header=TRUE)
nodelist <- names(my_data)[-1]
my_matrix <- as.matrix(my_data) [,-1]
rownames(my_matrix) <- colnames(my_matrix) <- nodelist
my_matrix
library(igraph)
g <- graph_from_adjacency_matrix(my_matrix, mode="undirected",
weighted=NULL)
plot(g)
Получил эти ошибки:
Ошибка в graph.adjacency.dense(adjmatrix, режим = режим, взвешенный = взвешенный, :
В Structure_generators.c:274 : неквадратная матрица, неквадратная матрица
Может ли кто-нибудь помочь мне, рассказав, в чем проблема, как я могу исправить код, чтобы получить свою сеть?
Заранее большое спасибо
Итак, как указывает ошибка: Non-square matrix, Non-square matrix матрица не является квадратной. dim(my_matrix) [1] 45 0 сообщает, что матрица составлена примерно так:
[1,]
[2,]
[3,]
[4,]
[5,]
[..]
Не могли бы вы показать нам первые строки вашего файла .csv? Это можно сделать с помощью head(my_data)
0
JHJH
23 Авг 2019 в 13:59
Решение матричных уравнений
Финальная глава саги.
Линейная алгебра и, в частности, матрицы — это основа математики нейросетей. Когда говорят «машинное обучение», на самом деле говорят «перемножение матриц», «решение матричных уравнений» и «поиск коэффициентов в матричных уравнениях».
Понятно, что между простой матрицей в линейной алгебре и нейросетью, которая генерирует котов, много слоёв усложнений, дополнительной логики, обучения и т. д. Но здесь мы говорим именно о фундаменте. Цель — чтобы стало понятно, из чего оно сделано.
Краткое содержание прошлых частей:
- Линейная алгебра изучает векторы, матрицы и другие понятия, которые относятся к упорядоченным наборам данных. Линейной алгебре интересно, как можно трансформировать эти упорядоченные данные, складывать и умножать, всячески обсчитывать и находить в них закономерности.
- Вектор — это набор упорядоченных данных в одном измерении. Можно упрощённо сказать, что это последовательность чисел.
- Матрица — это тоже набор упорядоченных данных, только уже не в одном измерении, а в двух (или даже больше).
- Матрицу можно представить как упорядоченную сумку с данными. И с этой сумкой как с единым целым можно совершать какие-то действия. Например, делить, умножать, менять знаки.
- Матрицы можно складывать и умножать на другие матрицы. Это как взять две сумки с данными и получить третью сумку, тоже с данными, только теперь какими-то новыми.
- Матрицы перемножаются по довольно замороченному алгоритму. Арифметика простая, а порядок перемножения довольно запутанный.
И вот наконец мы здесь: если мы можем перемножать матрицы, то мы можем и решить матричное уравнение.
❌ Никакого практического применения следующего материала в народном хозяйстве вы не увидите. Это чистая алгебра в несколько упрощённом виде. Отсюда до практики далёкий путь, поэтому, если нужно что-то практическое, — посмотрите, как мы генерим Чехова на цепях Маркова.
Что такое матричное уравнение
Матричное уравнение — это когда мы умножаем известную матрицу на матрицу Х и получаем новую матрицу. Наша задача — найти неизвестную матрицу Х.
Шаг 1. Упрощаем уравнение
Вместо известных числовых матриц вводим в уравнение буквы: первую матрицу обозначаем буквой A, вторую — буквой B. Неизвестную матрицу X оставляем. Это упрощение поможет составить формулу и выразить X через известную матрицу.

Шаг 2. Вводим единичную матрицу
В линейной алгебре есть два вспомогательных понятия: обратная матрица и единичная матрица. Единичная матрица состоит из нулей, а по диагонали у неё единицы. Обратная матрица — это такая, которая при умножении на исходную даёт единичную матрицу.
Можно представить, что есть число 100 — это «сто в первой степени», 100 1
И есть число 0,01 — это «сто в минус первой степени», 100 -1
При перемножении этих двух чисел получится единица:
100 1 × 100 -1 = 100 × 0,01 = 1.
Вот такое, только в мире матриц.
Зная свойства единичных и обратных матриц, делаем алгебраическое колдунство. Умножаем обе известные матрицы на обратную матрицу А -1 . Неизвестную матрицу Х оставляем без изменений и переписываем уравнение:
А -1 × А × Х = А -1 × В
Добавляем единичную матрицу и упрощаем запись:
А -1 × А = E — единичная матрица
E × Х = А -1 × В — единичная матрица, умноженная на исходную матрицу, даёт исходную матрицу. Единичную матрицу убираем
Х = А -1 × В — новая запись уравнения
После введения единичной матрицы мы нашли способ выражения неизвестной матрицы X через известные матрицы A и B.
💡 Смотрите, что произошло: раньше нам нужно было найти неизвестную матрицу. А теперь мы точно знаем, как её найти: нужно рассчитать обратную матрицу A -1 и умножить её на известную матрицу B. И то и другое — замороченные процедуры, но с точки зрения арифметики — просто.
Шаг 3. Находим обратную матрицу
Вспоминаем формулу и порядок расчёта обратной матрицы:
- Делим единицу на определитель матрицы A.
- Считаем транспонированную матрицу алгебраических дополнений.
- Перемножаем значения и получаем нужную матрицу.
Собираем формулу и получаем обратную матрицу. Для удобства умышленно оставляем перед матрицей дробное число, чтобы было проще считать.

Шаг 4. Вычисляем неизвестную матрицу
Нам остаётся посчитать матрицу X: умножаем обратную матрицу А -1 на матрицу B. Дробь держим за скобками и вносим в матрицу только при условии, что элементы новой матрицы будут кратны десяти — их можно умножить на дробь и получить целое число. Если кратных элементов не будет — дробь оставим за скобками.

Шаг 5. Проверяем уравнение
Мы решили матричное уравнение и получили красивый ответ с целыми числами. Выглядит правильно, но в случае с матрицами этого недостаточно. Чтобы проверить ответ, нам нужно вернуться к условию и умножить исходную матрицу A на матрицу X. В результате должна появиться матрица B. Если расчёты совпадут — мы всё сделали правильно. Если будут отличия — придётся решать заново.
👉 Часто начинающие математики пренебрегают финальной проверкой и считают её лишней тратой времени. Сегодня мы разобрали простое уравнение с двумя квадратными матрицами с четырьмя элементами в каждой. Когда элементов будет больше, в них легко запутаться и допустить ошибку.

Ну и что
Алгоритм решения матричных уравнений несложный, если знать отдельные его компоненты. Дальше на основе этих компонентов математики переходят в более сложные пространства: работают с многомерными матрицами, решают более сложные уравнения, постепенно выходят на всё более и более абстрактные уровни. И дальше, в конце пути, появляется датасет из миллионов котиков. Этот датасет раскладывается на пиксели, каждый пиксель оцифровывается, цифры подставляются в матрицы, и уже огромный алгоритм в автоматическом режиме генерирует изображение нейрокотика:
Решение матричных уравнений: теория и примеры
Решение матричных уравнений: как это делается
Матричные уравнения имеют прямую аналогию с простыми алгебраическими уравнениями, в которых присутствует операция умножения. Например,
где x — неизвестное.
А, поскольку мы уже умеем находить произведение матриц, то можем приступать к рассмотрению аналогичных уравнений с матрицами, в которых буквы — это матрицы.
Итак, матричным уравнением называется уравнение вида
где A и B — известные матрицы, X — неизвестная матрица, которую требуется найти.
Как решить матричное уравнение в первом случае? Для того, чтобы решить матричное уравнение вида A ⋅ X = B , обе его части следует умножить на обратную к A матрицу 

По определению обратной матрицы, произведение обратной матрицы на данную исходную матрицу равно единичной матрице: 

Так как E — единичная матрица, то E ⋅ X = X . В результате получим, что неизвестная матрица X равна произведению матрицы, обратной к матрице A , слева, на матрицу B :

Как решить матричное уравнение во втором случае? Если дано уравнение
то есть такое, в котором в произведении неизвестной матрицы X и известной матрицы A матрица A находится справа, то нужно действовать аналогично, но меняя направление умножения на матрицу, обратную матрице A , и умножать матрицу B на неё справа:



Как видим, очень важно, с какой стороны умножать на обратную матрицу, так как 
Как решить матричное уравнение в третьем случае? Встречаются случаи, когда в левой части уравнения неизвестная матрица X находится в середине произведения трёх матриц. Тогда известную матрицу из правой части уравнения следует умножить слева на матрицу, обратную той, которая в упомянутом выше произведении трёх матриц была слева, и справа на матрицу, обратную той матрице, которая располагалась справа. Таким образом, решением матричного уравнения

Решение матричных уравнений: примеры
Пример 1. Решить матричное уравнение

Решение. Данное уравнение имеет вид A ⋅ X = B , то есть в произведении матрицы A и неизвестной матрицы X матрица A находится слева. Поэтому решение следует искать в виде 
Сначала найдём определитель матрицы A :

Найдём алгебраические дополнения матрицы A :

Составим матрицу алгебраических дополнений:

Транспонируя матрицу алгебраических дополнений, находим матрицу, союзную с матрицей A :

Теперь у нас есть всё, чтобы найти матрицу, обратную матрице A :

Наконец, находим неизвестную матрицу:
Пример 2. Решить матричное уравнение

Пример 3. Решить матричное уравнение

Решение. Данное уравнение имеет вид X ⋅ A = B , то есть в произведении матрицы A и неизвестной матрицы X матрица A находится справа. Поэтому решение следует искать в виде 
Сначала найдём определитель матрицы A :

Найдём алгебраические дополнения матрицы A :

Составим матрицу алгебраических дополнений:

Транспонируя матрицу алгебраических дополнений, находим матрицу, союзную с матрицей A :

Находим матрицу, обратную матрице A :

Находим неизвестную матрицу:
До сих пор мы решали уравнения с матрицами второго порядка, а теперь настала очередь матриц третьего порядка.
Пример 4. Решить матричное уравнение

Решение. Это уравнение первого вида: A ⋅ X = B , то есть в произведении матрицы A и неизвестной матрицы X матрица A находится слева. Поэтому решение следует искать в виде 
Сначала найдём определитель матрицы A :

Найдём алгебраические дополнения матрицы A :
Составим матрицу алгебраических дополнений:
Транспонируя матрицу алгебраических дополнений, находим матрицу, союзную с матрицей A :

Находим матрицу, обратную матрице A , и делаем это легко, так как определитель матрицы A равен единице:

Находим неизвестную матрицу:
Пример 5. Решить матричное уравнение

Решение. Данное уравнение имеет вид X ⋅ A = B , то есть в произведении матрицы A и неизвестной матрицы X матрица A находится справа. Поэтому решение следует искать в виде 
Сначала найдём определитель матрицы A :

Найдём алгебраические дополнения матрицы A :
Составим матрицу алгебраических дополнений:

Транспонируя матрицу алгебраических дополнений, находим матрицу, союзную с матрицей A :

Находим матрицу, обратную матрице A :

Находим неизвестную матрицу:
Пример 6. Решить матричное уравнение

Решение. Данное уравнение имеет вид A ⋅ X ⋅ B = C , то есть неизвестная матрица X находится в середине произведения трёх матриц. Поэтому решение следует искать в виде 
Сначала найдём определитель матрицы A :

Найдём алгебраические дополнения матрицы A :

Составим матрицу алгебраических дополнений:

Транспонируя матрицу алгебраических дополнений, находим матрицу, союзную с матрицей A :

Находим матрицу, обратную матрице A :

Найдём матрицу, обратную матрице B .
Сначала найдём определитель матрицы B :

Найдём алгебраические дополнения матрицы B :
Составим матрицу алгебраических дополнений матрицы B :

Транспонируя матрицу алгебраических дополнений, находим матрицу, союзную с матрицей B :

Находим матрицу, обратную матрице B :

источники:
http://function-x.ru/matrix_equations.html
В линейной алгебре псевдообратная ( 
Пусть система задана как:
Мы знаем А и 

Где: 

A — матрица
Если A — квадратная матрица, мы действуем следующим образом:
Но если A не является квадратной матрицей, мы не можем вычислить обычное 
Если мы подробно рассмотрим систему, т.е. 
. .
. .
. .
который также можно записать в матричной форме, как показано ниже:
Где m> n, что означает, что количество строк больше количества столбцов или количество строк больше количества переменных.
Решение вышеуказанной проблемы:
Есть несколько способов решить указанную выше проблему. Одно из решений связано с псевдообратной системой Мура — Пенроуза. Запишем псевдообратную матрицу Мура — Пенроуза как 
У нас есть 

Итак, для решения проблемы действуем следующим образом:
Вот так просто мы решаем линейные уравнения с помощью псевдообратной матрицы Мура — Пенроуза. Вывод псевдообратной матрицы Мура — Пенроуза выходит за рамки данной статьи. Вы можете перейти по этой ссылке, если хотите узнать о ней больше. Здесь просто представлен метод его вычисления. Псевдообратная матрица Мура-Пенроуза вычисляется как
Пример:
Рассмотрим ниже 3 линейных уравнения:![]()
![]()
Точно так же мы можем записать приведенные выше уравнения в матричной форме, как показано ниже:
![]()
После того, как мы вычислим псевдообратную матрицу Мура - Пенроуза, используя
, мы получим:
Проверить матричный продукт
вы получите единичную матрицу I.
У нас есть,
Потом,
![]()
![]()
После того, как вы вычислите вышеуказанное вычисление, вы получите окончательный ответ как
![]()
Примечание. Псевдообратная матрица Мура — Пенроуза решает проблему в смысле наименьшего квадрата ошибки. В общем, не существует точного решения переопределенных проблем. Таким образом, если вы перекрестно проверите решение, вы получите не точное требуемое значение y, а приблизительное значение y.




























Точно так же мы можем записать приведенные выше уравнения в матричной форме, как показано ниже:
После того, как мы вычислим псевдообратную матрицу Мура - Пенроуза, используя
Проверить матричный продукт
вы получите единичную матрицу I.
У нас есть,
Потом,
После того, как вы вычислите вышеуказанное вычисление, вы получите окончательный ответ как