Как проверить матрицу на симметричность
Перейти к содержимому

Как проверить матрицу на симметричность

  • автор:

Симметричная матрица узнать

Напишите программу проверки симметричности квадратной матрицы относительно побочной диагонали.

Формат входных данных
На вход программе подаётся натуральное число nn — количество строк и столбцов в матрице, затем элементы матрицы.

Формат выходных данных
Программа должна вывести YES, если матрица симметрична, и слово NO в противном случае.

Лучший ответ

Молот ШотландцевВысший разум (300947) 1 год назад
Видимо нужно учитывать ещё порядок расположения элементов. Но и с этим сложностей нет
Линар Super Ученик (10) Молот Шотландцев, здраствуйте может пришлете мне не знаю что там исправлять
Линар SuperУченик (10) 1 год назад

помогите хотябы фотку пришлите что тут не правильно

Остальные ответы

Ну, блин.. Вы же на Степике учитесь. Еще и контрольную решаете. Программист должен учиться сам. Хотя с момента публикации вопроса прошло более 16 часов, значит время на выполнение контрольной точно ушло, так что держи:

sizes, counter, symmetry = int(input()), 0, True
matrix = [input().split() for _ in range(sizes)]
for i in range(sizes):
for j in range(sizes):
if i + j + 1 < sizes:
if matrix[i][j] == matrix[sizes — 1 — j][sizes — 1 — i]:
counter += 1
else:
print(‘NO’)
symmetry = False
break
if symmetry == False:
break
if symmetry == True:
print(‘YES’)

Проверить матрицу на симметричность относительно главной оси

Помогите, пожалуйста. Не знаю как проверить эту матрицу на симметричность относительно главной оси.

const n=6; m=6; var a:array[1..n,1..m] of integer; i,j:integer; begin writeln('matrix:'); for i:=1 to n do begin for j:=1 to m do begin A[i,j]:=random(2); write(A[i,j]:2); end; writeln; end; end. 

пробовал в конце циклом так оно ересь пишет:

for i:=1 to n do for j:=1 to m do if a[i,j]<>a[j,i] then writeln ('матрица не симметрична ') else writeln ('матрица симметрична'); 

Отслеживать

371 1 1 золотой знак 5 5 серебряных знаков 13 13 бронзовых знаков

задан 24 окт 2013 в 19:14

ValeraKolosov ValeraKolosov

31 1 1 серебряный знак 6 6 бронзовых знаков

а что смотреть-то? Тут и нет ничего. Заполнение матрицы рандомными числами? У вас вроде бы в вопросе другая задача фигурирует

24 окт 2013 в 19:19

Да вот, НЕ ЗНАЮ как её проверить на симметричность/

24 окт 2013 в 19:25

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Главное в программировании, уметь разбивать задачи на части

// Проверяем на квадратность Symmetrical := (m = n); // Проверяем на симметричность if Symmetrical then for i:=1 to n do for j:=1 to m do // тут можно написать for j:=i+1 to m do Symmetrical := Symmetrical and (a[i,j] = a[j,i]); // Выводим результат if Symmetrical then writeln ('матрица симметрична') else writeln ('матрица не симметрична'); 

Отслеживать

ответ дан 1 июл 2015 в 16:51

13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков

Определите, является ли матрица симметричной положительный определенный

Эта тема объясняет, как использовать chol и eig функции, чтобы определить, является ли матрица симметричной положительный определенный (симметрическая матрица со всеми положительными собственными значениями).

Метод 1: делайте попытку факторизации Холесского

Наиболее эффективный метод проверять, является ли матрица симметричной положительный определенный, состоит в том, чтобы просто попытаться использовать chol на матрице. Если факторизация перестала работать, то матрица не симметрична положительный определенный. Этот метод не требует, чтобы матрица была симметрична для успешного теста (если матрица не симметрична, то факторизация перестала работать).

A = [1 -1 0; -1 5 0; 0 0 7]
A = 3×3 1 -1 0 -1 5 0 0 0 7
try chol(A) disp('Matrix is symmetric positive definite.') catch ME disp('Matrix is not symmetric positive definite') end
ans = 3×3 1.0000 -1.0000 0 0 2.0000 0 0 0 2.6458
Matrix is symmetric positive definite.

Недостаток этого метода — то, что он не может быть расширен, чтобы также проверять, является ли матрица симметричной положительный полуопределенный (где собственные значения могут быть положительными или нуль).

Метод 2: проверяйте собственные значения

В то время как менее эффективно использовать eig чтобы вычислить все собственные значения и проверять их значения, этот метод более гибок, поскольку можно также использовать его, чтобы проверять, является ли матрица симметричной положительный полуопределенный. Однако, для маленьких матриц различие во время вычисления между методами незначительно, чтобы проверять, является ли матрица симметричной положительный определенный.

Этот метод требует, чтобы вы использовали issymmetric проверять, симметрична ли матрица прежде, чем выполнить тест (если матрица не симметрична, то нет никакой потребности вычислить собственные значения).

tf = issymmetric(A)
tf = logical 1
d = eig(A)
d = 3×1 0.7639 5.2361 7.0000
isposdef = all(d > 0)
isposdef = logical 1

Можно расширить этот метод, чтобы проверять, является ли матрица симметричной положительный полуопределенный с командой all(d >= 0) .

Числовые факторы

Методы, обрисованные в общих чертах здесь, могут дать различные результаты для той же матрицы. Поскольку оба вычисления включают ошибки округления, каждый алгоритм проверяет определенность матрицы, которая немного отличается от A . На практике использование допуска является более устойчивым методом сравнения, поскольку собственные значения могут быть численно нулевыми в точности машины и быть немного положительными или быть немного отрицательными.

Например, если матрица имеет собственное значение порядка eps , затем с помощью сравнения isposdef = all(d > 0) возвращает true , даже при том, что собственное значение является численно нулем, и матрица лучше классифицируется как симметричная положительный полуопределенный .

Чтобы выполнить сравнение с помощью допуска, можно использовать модифицированные команды

tf = issymmetric(A) d = eig(A) isposdef = all(d > tol) issemidef = all(d > -tol)

Допуск задает радиус окружности с центром в нуле, и любые собственные значения, лежащие внутри этой окружности обработаны как нули. Хорошим выбором для допуска в большинстве случаев является length(d)*eps(max(d)) , который учитывает величину самого большого собственного значения.

Проверить строки матрицы на симметричность

Author24 — интернет-сервис помощи студентам

Задана матрица размером NxM. Получить массив B, присвоив его k-му
элементу значение 1, если k-я строка матрицы симметрична, и значение 0 − в
противном случае.
Зыж что такое «строка матрицы симметрична» ?

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

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

Проверить симметричность числа
Дано четырехзначное число. Определите, является ли его десятичная запись симметричной. Если число.

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

Проверка строки матрицы на симметричность
Как проверить строку матрицы на симметричность, если строка симметрична то в вектор b занести 1.

7435 / 5027 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692

ЦитатаСообщение от Андрей Веренич Посмотреть сообщение

что такое «строка матрицы симметрична» ?

левая часть зеркально соответствует правой, например
5 4 7 1 7 4 5 — симметрична
2 4 4 2 — симметрична
1 2 1 3 1 — не симметрична

Регистрация: 25.09.2019
Сообщений: 13

1. объявляем N,M,k. целые положительные числа.
2. запрашиваем N, M, k
3. k не должно быть больше N, для этого делаем процедуру проверки. если больше- уведомление на экран и повторный запрос k.
4.объявляем матрицу NxM и заполняем ее либо вручную, либо rand().
5.находим k—тую строку и проверяем ее на симметричность:
левая часть зеркально соответствует правой, например
5 4 7 1 7 4 5 — симметрична
2 4 4 2 — симметрична
1 2 1 3 1 — не симметрична
6. объявляем массив В с колличеством N элементов.
7. присваиваем В(k) 1 если симметрична, иначе 0.

Регистрация: 25.09.2019
Сообщений: 13

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
#include "stdafx.h" #include #include #include using namespace std; int main() { int N, M, k,j,f,i; do { cout  "Chisla dolgni bit' >=1\n"; cout  "Vvedite N\n"; cin >> N ; }while (N1); do { cout  "Chisla dolgni bit' >=1\n"; cout  "Vvedite M\n"; cin >> M; }while (M1); srand(time(0)); // генерация случайных чисел // динамическое создание двумерного массива вещественных чисел на NxMщ элементов int *B = new int[N]; //создание массива В длинной N int **ptrarray = new int *[N]; // N строк в массиве for (int count = 0; count  N; count++) ptrarray[count] = new int[M]; // и M столбцов // заполнение массива for (int count_row = 0; count_row  N; count_row++) for (int count_column = 0; count_column  M; count_column++) ptrarray[count_row][count_column] = (rand() % 10 + 1) / int((rand() % 10 + 1)); //заполнение массива случайными числами с масштабированием от 1 до 10 // вывод массива for (int count_row = 0; count_row  N; count_row++) { for (int count_column = 0; count_column  M; count_column++) cout  setw(4)  setprecision(2)  ptrarray[count_row][count_column]  " "; cout  endl; } do { cout  "Vvedite 0 " "N-1  " \n"; cin >> k; } while (k >N-1|| k0); j=abs(M/2); // счетчик симметричных элементов в k-той строке f=M-1; // указатель правого элемента k-той строки i=0; // i указатель левого элемента этойже строки while (ptrarray[ k ] [ i ] == ptrarray [ k ] [ f ] && j>0) { j--,i++,f--; } if ( j==0) { B [ k ]= 1; }else { B [ k ]= 0; } cout  "B [ k ] = "  B [ k ]  " \n"; // удаление двумерного динамического массива и массива В for (int count = 0; count  N; count++) delete[] ptrarray[count]; delete [] B; system("pause"); return 0; }

Добавлено через 29 минут
Проверте, плиз.
7435 / 5027 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692

Лучший ответ

Сообщение было отмечено Андрей Веренич как решение

Решение

Андрей Веренич, k вводить не нужно

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
#include #include #include using namespace std; bool SymmetricRow (int *A, int m) { for (int i = 0; i  m/2; i++) if(A[i]!=A[m-1-i]) return false; return true; } int main() { srand((int)time(0)); int n, m; cout  <"n="; cin >> n; cout  <"m="; cin >> m; int **A = new int*[n]; for (int i = 0; i  n; i++) A[i]=new int[m]; int *B = new int[n]; cout  <"Enter " *m  <" elements:\n"; for (int i = 0; i  n; i++) for (int j = 0; j  m; j++) cin >> A[i][j]; cout  <"Array B:\n"; for (int i = 0; i  n; i++) { if (SymmetricRow(A[i],m)) B[i]=1; else B[i]=0; cout  [i]  <" "; } cout  <"\n"; for (int i = 0; i  n; i++) delete[]A[i]; delete[]A; delete[]B; system("pause"); return 0; }

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Проверить на симметричность
Проверить целочисленную матрицу NxM на симметричность относительно строк. Как объяснил.

проверить симметричность отношения
Здравствуйте! Подскажите плз, как проверить отношение на симметричность. Я сделал так .

Проверить k строку массива N*M на симметричность
Проверить k строку массива N*M на симметричность int begin=0,end=m; char polindrom=true; .

Проверить функции на периодичность и симметричность
1) y=sin(ln(x)) 2) y=cos(x2-x-1) как их проверить на периодичность и симметричность?

Как проверить симметричность в массиве строк?
Дан массив строк.Если стока симметрична,то. Подскажите как проверить симметричность в массиве.

Проверить матрицу на рефлексивность, симметричность и транзитивность
Ошибка: массив имеет другое количество размерностей Задание: проверить матрицу на рефлексивность.

Или воспользуйтесь поиском по форуму:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *