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

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




 Операции с матрицами (оформление)
Здравствуйте. В ходе расчета используются матрицы, которые заполняются по определенным алгоритмам с помощью различных циклических процедур (операторы while, for), а также операторов условия (if, else). Также широко применяются операции поэлементного вычисления…

[color=blue][size=9]Добавлено спустя 30 секунд:[/size][/color]

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

 
Аватара пользователя
Посмотрите здесь: Гантмахер Ф.Р. — Теория матриц , Хорн Р., Джонсон Ч. — Матричный анализ

 
Полистал ученую книжку. Так и не понял, как оформлять циклические процедуры. Помогите, пожалуйста «перевести» с языка Matlab на язык математики

for i=1:6
for m=1:5
for n=1:4
A(m,n)=m+n;
B(m,n)=1+1/(2*i + n + 1);
end
end
%если сумма всех элементов матрицы A.^B>130 и i>1
if sum(sum(A.^B))>130&i>1
C(:,:,i)=A.^B;%поэлементное возведение в степень
else
C(:,:,i)=4*A+B;
end
end

 
Аватара пользователя
:evil:
У Вас не матричные операции, и стандартной нотации, по-видимому, просто нет.

Вы можете пытаться записывать построение $A$ как семейства величин ($B$ выглядит как вспомогательная матрица).

 
Я так все время и «пытался». Постоянно приходилось придумывать термины и разъяснять что к чему. Просто надоело все это творчество – ни к чему хорошему оно не ведет, очень много времени уходит в пустую, а понятнее алгоритм от этого не становится.
А что неужели в математике нет значка для операции «.^» - возведение в степень каждого элемента матрицы на соответствующий элемент другой матрицы.

Добавлено спустя 40 секунд:

Скорее А и B вспомогательные матрицы, С – массив, набор матриц (array).

 
Аватара пользователя
fuzzy2006 писал(а):
А что неужели в математике нет значка для операции «.^» - возведение в степень каждого элемента матрицы на соответствующий элемент другой матрицы.


А для чего нужна такая операция, кроме упражнений по программированию?

 
Someone писал(а):
А для чего нужна такая операция, кроме упражнений по программированию?

А для чего нужна операция умножение? Можно же было обойтись сложением?! С таким подходом можно много чего упразднить, станут ли от этого записи более компактными и наглядными?

 
Например, для того, чтобы можно было умножить левую и правую часть уравнение $ Ax=B $ на $ A^{-1} $ и получить корни системы уравнений.
А зачем может быть нужно описанное Вами возведение в степень?

 
obezyan писал(а):
Например, для того, чтобы можно было умножить левую и правую часть уравнение $ Ax=B $ на $ A^{-1} $ и получить корни системы уравнений.

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

Добавлено спустя 7 минут:

clc,clear all
%1я часть
tic,x=0:2*pi/10000:2*pi;y=exp(-x.^2).^cos(x);toc
%2я часть
tic
for i=1:10001
c(i)=2*pi/10000*(i-1);d(i)=exp(-x(i)^2)^cos(x(i));
end
toc
%Содержимое матрицы d совпадает с содержимым матрицы y.
%Обе части функции делают практически одно и тоже,
%но используя разные операторы. Использование циклов значительно
%снижает быстродействие программы.
%h**p://phys.lan.krasu.ru/bvvmatlab/lecture1/lecture1.htm

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

 
Хорошо пусть это не есть операции над матрицами, пусть даже это не операции с матрицами. Суть не в этом.

Добавлено спустя 17 секунд:

Нужна книга сославшись на которую можно заявить: «обозначения общепринятые, если не понимаешь читай то-то и это». Т.е. как с помощью общепринятых значков (желательно математических, не привязываясь ни к какому языку программирования и не рисуя блок схемы) в компактном виде записать алгоритмы заполнения матриц (с использованием циклов и логических условий) и операции поэлементного умножения (или возведения в степень).

Добавлено спустя 32 секунды:

Someone, подскажите, пожалуйста, где зачитать про «векторизованные операции»? Что-то никак книжку не могу найти.

 
Аватара пользователя
fuzzy2006 писал(а):
Someone, подскажите, пожалуйста, где зачитать про «векторизованные операции»? Что-то никак книжку не могу найти.


Этот термин связан не с математикой, а с компьютерами. Поискал в Googlе, и первая же ссылка дала такой результат: http://www.imvs.ru/imvs/itvs/3_04/p63_77.pdf. Там статья "Метод использования мелкоформатных векторных операций в оптимизирующем компиляторе". А за ней ещё множество ссылок.

 
Аватара пользователя
:evil:
Someone писал(а):
Просто над всеми элементами массива выполняются одинаковые вычисления. Над каждым элементом отдельно. И что же сделаешь с тем, что в BASICе скрытый цикл выполняется быстрее, чем явно написанный - по той причине, что при выполнении явно написанного цикла тратится время на многократную интерпретацию операторов цикла, а внутренний цикл реализуется небольшим числом команд процессора.

Ладно бы в BASIC'е. Векторные вычисления реализовались (реализуются?) в суперкомпьютерах на аппаратном уровне (то есть, однородное вычисление идет, скажем, в 256 потоков (по числу элементов в векторном регистре)). По-моему, так работал Cray. Были и советские компы такого типа.

Я нашел массу материалов в google на “vector computation”

 
Аватара пользователя
незваный гость писал(а):
Ладно бы в BASIC'е. Векторные вычисления реализовались (реализуются?) в суперкомпьютерах на аппаратном уровне (то есть, однородное вычисление идет, скажем, в 256 потоков (по числу элементов в векторном регистре)). По-моему, так работал Cray. Были и советские компы такого типа.

Я нашел массу материалов в google на “vector computation”


Да, это в суперкомпьютерах, по-моему, очень широко применяется. Как ещё иначе при ограниченной тактовой частоте такую вычислительную мощность обеспечить.

 
Аватара пользователя
:evil:
Мое впечатление, что все же в прошедшем времени — применялось. Сейчас популярнее навтыкать тысячонку-другую процессоров.

 [ Сообщений: 15 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group