2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Работа с матрицами. Покомпонентно. Что делаю не так?
Сообщение10.07.2021, 14:09 


13/12/08
150
Ижевск
Работаю с большой матрицей. Проблему уже описывал, что замирала система Maple14.
Переписал на Maple7, интегрирует. Собираю элементы в матрицу (Matrix), далее делаю подстановки и упрощения, работая с элементами матрицы. Каждый элемент после этого является функцией 3 переменных. Выражения являются элементами фундаментальной матрицы. Собрал матрицу. Мне надо решать систему линейных алгебраических уравнений при данных граничных условиях. Далее пробую работать с этой матрицей, подставляя конкретные значения и делая небольшие подстановки.
И вот тут меня ждет "засада". Пробую сделать подстановку
$\alpha:= \arcsin(\sin(\alpha0) \cdot(1-m)); $
У меня выражение, в которое входят $\sin \alpha$ и $\cos \alpha$
Подстановка не проходит. Что еще хуже (подстановку я могу через расписать на две, для синуса и косинуса отдельно), в элементе матрицы есть $ \cos (\alpha ) $, но при вопросе has(mm[1,2], cos(alpha) следует ответ false!
Что я делаю не так?
Для небольшой матрицы $2 \times 2$ элементы вычисляются командой evalf, для главной боевой матрицы -- нет. Но на вопрос has, опять-таки, следует false, хотя я вижу, что опрашиваемый косинус в данном элементе присутствует.
Кроме того, меня интересует, как удобнее работать с матрицами, многократно пересчитывая их при разных значениях параметров, не пересчитывая рабочий лист.

 Профиль  
                  
 
 Re: Работа с матрицами. Покомпонентно. Что делаю не так?
Сообщение10.07.2021, 22:09 
Заслуженный участник


12/07/07
4132
Донецк, Украина
Не очень подробно Вы описали подстановку.
Попробуйте выполнить подстановку при помощи eval или subs. Вот простейший пример (Maple 7)
Код:
> M:= Matrix([[sin(alpha), cos(alpha)]]):
> eval( M, alpha=arcsin(sin(alpha0)) ):

 Профиль  
                  
 
 Re: Работа с матрицами. Покомпонентно. Что делаю не так?
Сообщение11.07.2021, 22:26 


13/12/08
150
Ижевск
GAA в сообщении #1525721 писал(а):
Не очень подробно Вы описали подстановку.
Попробуйте выполнить подстановку при помощи eval или subs. Вот простейший пример (Maple 7)
Код:
> M:= Matrix([[sin(alpha), cos(alpha)]]):
> eval( M, alpha=arcsin(sin(alpha0)) ):

Подстановки проходят, я их делаю поэлементно, потому, что я еще и упрощаю, а упрощение в Maple иногда нетривиально. Далее собираю матрицу, Она у меня 12*12. Но для решения задачи при жесткой заделке сначала использую матрицу 6*6.
Даже почленно не могу вычислить матрицу. Возможно, что где-то некорректно присвоил или подставил. Например, вместо умножения можно набрать последовательно два идентификатора, и получается большой "идентификатор". который, естественно, не воспринимается, как умножение двух идентификаторов. Пока не могу найти причину.

 Профиль  
                  
 
 Re: Работа с матрицами. Покомпонентно. Что делаю не так?
Сообщение11.07.2021, 23:48 
Заслуженный участник


12/07/07
4132
Донецк, Украина
Если не приведёте текст, то обсуждать что-то будет затруднительно. Поэтому всегда просят сразу приводить текст минимального примера, который демонстрирует затруднения.

 Профиль  
                  
 
 Re: Работа с матрицами. Покомпонентно. Что делаю не так?
Сообщение12.07.2021, 08:49 


13/12/08
150
Ижевск
GAA в сообщении #1525810 писал(а):
Если не приведёте текст, то обсуждать что-то будет затруднительно. Поэтому всегда просят сразу приводить текст минимального примера, который демонстрирует затруднения.


На минимальных примерах у меня работает, не работает на большом примере. Могу прислать файл.

-- Пн июл 12, 2021 10:00:14 --

GAA в сообщении #1525810 писал(а):
Если не приведёте текст, то обсуждать что-то будет затруднительно. Поэтому всегда просят сразу приводить текст минимального примера, который демонстрирует затруднения.

Вот пробовал файл сохранить на диске и работать с ним.
Код:
MM7_11:= Matrix([[mm(s0)[7, 1],  mm(s0)[7, 2],  mm(s0)[7, 3],  mm(s0)[7, 4],  mm(s0)[7, 5],  mm(s0)[7, 6]],
>                   [mm(s0)[8, 1],  mm(s0)[8, 2],  mm(s0)[8, 3],  mm(s0)[8, 4],  mm(s0)[8, 5],  mm(s0)[8, 6]],
>                   [mm(s0)[9, 1],  mm(s0)[9, 2],  mm(s0)[9, 3],  mm(s0)[9, 4],  mm(s0)[9, 5],  mm(s0)[9, 6]],
>                   [mm(s0)[10,1],  mm(s0)[10,2],  mm(s0)[10,3],  mm(s0)[10,4],  mm(s0)[10,5],  mm(s0)[10,6]],
>                   [mm(s0)[11,1],  mm(s0)[11,2],  mm(s0)[11,3],  mm(s0)[11,4],  mm(s0)[11,5],  mm(s0)[11,6]],
>                   [mm(s0)[12,1],  mm(s0)[12,2],  mm(s0)[12,3],  mm(s0)[12,4],  mm(s0)[12,5],  mm(s0)[12,6]]]):  # Это моя матрица
>mm(s0)[1,2];
                        sin(2 Pi i) sin(alpha)
>eval(mm(s0)[1,2], sin(alpha) = sin(alpha0)*(1-m));
                        sin(2 Pi i) sin(alpha)
> ddd:= mm(s0)[1,2];
                    ddd := sin(2 Pi i) sin(alpha)
> # ddd:= subs( sin(alpha) = sin(alpha0)*(1-m), ddd);
> has(ddd, sin(alpha));
                                false
> sin(alpha);
                              sin(alpha)
...
kkk:= op(2,N_bezraz[1,2]);
                          kkk := sin(alpha)
> alpha:= 0.1;  evalf(kkk);

                             alpha := .1


                              sin(alpha)



 Профиль  
                  
 
 Re: Работа с матрицами. Покомпонентно. Что делаю не так?
Сообщение12.07.2021, 12:12 
Заслуженный участник


12/07/07
4132
Донецк, Украина
Вы привели не весь текст. Например, не указали задание элементов матрицы: mm(s0)[7, 1], mm(s0)[7, 1] и т.д.
Пришлите mws-файл прикреплением к письму.

 Профиль  
                  
 
 Re: Работа с матрицами. Покомпонентно. Что делаю не так?
Сообщение12.07.2021, 12:17 


21/05/16
4116
Аделаида
GAA в сообщении #1525847 писал(а):
Пришлите mws-файл прикреплением к письму.

Это доступно только ЗУ.

 Профиль  
                  
 
 Re: Работа с матрицами. Покомпонентно. Что делаю не так?
Сообщение12.07.2021, 12:21 
Заслуженный участник


12/07/07
4132
Донецк, Украина
Уважаемый kotenok gav, это определяется почтовой службой. Я могу отправлять со своего почтового ящика достаточно большие файлы. И принимать достаточно большие. Если у Вас имеются сведения о недостатках работы моей или Andrei P почты, или другие сведения об участниках, пожалуйста, свяжитесь с участниками в ЛС.

 Профиль  
                  
 
 Re: Работа с матрицами. Покомпонентно. Что делаю не так?
Сообщение12.07.2021, 17:20 


13/12/08
150
Ижевск
GAA в сообщении #1525847 писал(а):
Вы привели не весь текст. Например, не указали задание элементов матрицы: mm(s0)[7, 1], mm(s0)[7, 1] и т.д.
Пришлите mws-файл прикреплением к письму.

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

Дополнительно ответ на Ваше письмо даю здесь:
Спасибо большое. Вижу, что недоработал элемент 6, 5 матрицы.
Но почему-то не подставился коэффициент Пуассона (nu), также непонятно поведение в том примере, где в выражении есть cos (alpha), но на проверку наличия этого члена при помощи команды has, следует ответ — false...

Хотелось бы этот момент тоже понять, а то какая-то чертовщина...

 Профиль  
                  
 
 Re: Работа с матрицами. Покомпонентно. Что делаю не так?
Сообщение12.07.2021, 19:38 
Заслуженный участник


12/07/07
4132
Донецк, Украина
По первому вопросу см. подстановку: функции eval или subs.

По второму вопросу приведу минимальный демонстрационный пример.
В файле 1.mws задаётся f и сохраняется в файле data.m
Код:
> assume(alpha, real);
> f:= sin(alpha);
                                                           f := sin(alpha~)
> has(f, sin(alpha));
                                                                      true
> save f, "data.m";
Затем в другом файле данные считываются и выполняется проверка, которая не проходит, по очевидным причинам: alpha~ не равно alpha.
Код:
> restart; read "data.m";
> has(f, sin(alpha));
                                                    false
Исправить ситуацию можно при помощи сохранения в файл "data.m" не только f, но и alpha.
Код:
>assume(alpha, real);
> f:= sin(alpha):
> save alpha, f, "data.m";
Теперь
Код:
> restart; read "data.m";
> has(f, sin(alpha));
                                                                true

 Профиль  
                  
 
 Re: Работа с матрицами. Покомпонентно. Что делаю не так?
Сообщение12.07.2021, 20:39 


13/12/08
150
Ижевск
GAA в сообщении #1525919 писал(а):
Затем в другом файле данные считываются и выполняется проверка, которая не проходит, по очевидным причинам: alpha~ не равно alpha.
[


Это для меня неожиданность, спасибо большое.
Теперь такой вопрос: как лучше организовать работу в тот момент, когда аналитика отработана, далее переходим на численную реализацию. Особенно для громоздких задач? Как проще проводить многократные вычисления в Classic Worksheet моде? Просто интересен опыт. Думаю, что не мне одному интересен.

 Профиль  
                  
 
 Re: Работа с матрицами. Покомпонентно. Что делаю не так?
Сообщение13.07.2021, 10:24 
Заслуженный участник


12/07/07
4132
Донецк, Украина
Задача численного расчета ни в теме, ни в прикрепленном к письму рабочем листе не сформулирована, а угадывание — дело безнадёжное. Общее развернутое изложение с рассмотрением различных примеров на форуме не очень уместно, лучше обратиться к книгам. (Форумы больше предназначены для обсуждения конкретных затруднений.) В целом организация численных расчётов в СКА Maple такая же, как и в других пригодных для такого пакетах (да и вообще в программировании). На верхнем уровне структура программы определяется результатами, которые нужно получить. (Это очевидно и естественно, но, конечно, можно после получения результатов выполнить их преобразование, например, к виду удобному для вывода в виде графика.) Как обычно пишут в книгах/статьях, удачность структуры программы и структуры данных опирается на знание, с одной стороны, языка, а, с другой стороны, прикладной задачи.

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

1 Самые простые случаи. Оформить последовательность вычислений в виде одной исполняемой группы, или выделять исполняемые группы, а затем в меню среды выбирать выполнить выделение (в Maple 7 это Edit > Execute > Selection), или оформить вычисления в виде отдельного рабочего листа и выполнять весь лист (в Maple 7 это Edit > Execute > Worksheet).
Вложение:
Комментарий к файлу: Maple 7: Edit > Execute > Selection
Execute_Selection.PNG
Execute_Selection.PNG [ 20.85 Кб | Просмотров: 0 ]
(Для удобства собирания в виде одной исполняемой группы или для удобства выделения исполняемых групп (т.е. для компактности текста рабочего листа) можно часть разработанных функций оформить в виде библиотеки. Как всегда, это особенно удобно, если эти функции используются в разных рабочих листах. В достаточно простых проектах, это конечно не особо помогает, а время тратится.)
Результаты вычислений можно сохранять в файлы (например, m-файлы, или текстовые), но можно хранить и на рабочем листе. Например, пусть результатом вычислений является (возможно, очень большой) список с именем List_p. Здесь p — некоторое текстовое обозначение значения параметра или обозначение значений набора параметров. Можно создать секцию в текущем рабочем листе или в другом рабочем листе для сохранения результатов (секция сохранения). После выполнения вычислений выведем результат
Код:
> List_p;
  List_p := [1,2, …]
А затем скопируем его в раздел для сохранения результатов
Код:
> List_p := [1,2, …]:
Затем для нового значения параметра/набора параметров повторяем вычисления и копирование. В итоге получаем результат в виде списков, которые, например, в следующей сессии можно будет использовать для построения графиков или последующих вычислений, предварительно выполнив строки с присвоениями из секции сохранения.

2 Длительный цикл. Допустим, необходимо выполнить вычисления при изменяющемся значении параметра и эти вычисления можно оформить в виде цикла. Каждая итерация цикла может занимать много времени. Пусть на каждой итерации цикла вычисляется очередной элемент списка.
По тем или иным причинам может возникать необходимость приостановить выполнение (например, при получении предупреждения об отключении электроэнергии). Поэтому цикл оформляется так, чтобы он мог выполняться не «с самого начала, а с места, где он был прерван». После прерывания цикла полученный результат сохраняется (в m-файле, текстовом файле или на рабочем листе, как пояснялось в п. 1.), а при продолжении восстанавливается вместе с остальными необходимыми для вычисления переменными. Для корректного прерывания цикла можно создать форму, см. сообщение «Если нужно организовать инициированное пользователем прерывание выполнения по завершению некоторой итерации» с примером написания в Delphi, но можно, конечно, и в другой среде.

Естественно в обоих случаях оформления рабочего листа наиболее критичные ко времени выполнения функции (численных вычислений) могут писаться на C/Pascal/Fortran/asm и «подключаются» в виде dll.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Модераторы: maxal, Toucan, PAV, Karan, Супермодераторы



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

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


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group