2014 dxdy logo

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

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




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

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

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

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

 
 
 
 
Сообщение24.12.2006, 10:53 
Полистал ученую книжку. Так и не понял, как оформлять циклические процедуры. Помогите, пожалуйста «перевести» с языка 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

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

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

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

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

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

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


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

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

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

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

 
 
 
 
Сообщение25.12.2006, 17:48 
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

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

 
 
 
 
Сообщение25.12.2006, 19:08 
Хорошо пусть это не есть операции над матрицами, пусть даже это не операции с матрицами. Суть не в этом.

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

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

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

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

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


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

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

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

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

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

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


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

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

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


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