LINUX.ORG.RU

Автоматизация расчета в MAXIMA. Создание MAC файлов.

 


1

2

Доброго всем времени суток. В ходе обучения возникла необходимость много считать. Расчеты не сложные но в связи с их большим количеством легко можно запутаться, поэтому начал вводить формулы в маткад. И все бы хорошо, но хотелось бы работать с файлом формул не только за компьютером, а и за планшетом. Что бы при нахождении ошибки в формуле можно было сразу ее исправить, а не идти домой. Самый близкий независимый от платформы «аналог» маткада я увидел в MAXIMA. Но в последней я не понял как можно автоматизировать расчет. В маткаде я вбиваю формулы, задаю переменные и получаю уже готовый результат, и чтобы посчитать значения при других переменных мне всего навсего надо изменить значения заданных в документе переменных. В максима такой автоматики я не заметил. Вообщем - как можно автоматизировать расчет в максиме подобным к маткаду образом, обязательно ли при этом знать Лисп?

В максима такой автоматики я не заметил.

что конкретно не нашел? Пример из маткада

обязательно ли при этом знать Лисп?

это, в любом случае, не помешает

anonymous
()
Ответ на: комментарий от anonymous

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

И еще, можно ли в максиме устанавливать нижний индекс?

kapinos
() автор топика
Ответ на: комментарий от kapinos

К примеру ... и получить ответ.

все аналогично, пишешь код вида:

a:123;
b:234;

solve(a*x*x+2*a*b*x+b*b=0, x);
выполняешь:
$ maxima -b test.mac
и получаешь результат работы.

Если используешь wxMaxima, тогда там есть Shift+Ctrl+R обновить все вычисления. Используется это примерно так, в начале файла объявляешь переменные (a и b из примера), затем пишешь нужные тебе формулы, затем изменяешь a и b и вызываешь обновление вычислений.

anonymous
()
Ответ на: комментарий от kapinos

И еще, можно ли в максиме устанавливать нижний индекс?

foo[bar]
anonymous
()
Ответ на: комментарий от anonymous

Спасибо вам большое. Буду работать. Но еще такой дилетантский вопрос: а как не из терминала а из самой максимы загрузить .mac файл, расположенный в какой то несвязанной с максимой директории? А комментарии, которые отображаются при выполнении кода добавляются через функцию print?

kapinos
() автор топика
Ответ на: комментарий от kapinos

самой максимы

уточни, интерфейсов у неё далеко не один

anonymous
()
Ответ на: комментарий от kapinos

из самой максимы загрузить .mac файл

если командами, то:

batch("полный путь.mac");

anonymous
()
Ответ на: комментарий от kapinos

А комментарии, которые отображаются при выполнении кода добавляются через функцию print?

можно и так

anonymous
()
Ответ на: комментарий от kapinos

Что то не получается.
Создал .mac файл вида


U[н]=30;
T=1000;
t[0]=0.8;
r[н]=3;
L[н]=0.097;
t[0]/T$
print("%gamma =",%), numer;

А максима на выходе выдает следующее:

read and interpret file: #pD:/SPT_Z2.mac
(%i10) U[\í] = 30
(%o10) U[í]=30
(%i11) T = 1000
(%o11) T=1000
(%i12) t[0] = 0.8
(%o12) t[0]=0.8
(%i13) r[\í] = 3
(%o13) r[í]=3
(%i14) L[\í] = 0.097
(%o14) L[í]=0.097
(%i15) t[0]/T
(%i16) ev(print("%gamma =",%),numer)
"%gamma ="t[0]/T
(%o16) t[0]/T
(%o16) "D:/SPT_Z2.mac"

Получается я задал начальные переменные, начал вводить формулы, но не могу задать правильно вывод информации.

Что мне делать?

kapinos
() автор топика
Ответ на: комментарий от anonymous

Спасибо.

И еще такое, а как в максиме на выходе можно получить следующую форму записи: значение рассчитываемого параметра = символьная форма записи формулы = численная форма записи формулы = решение?

kapinos
() автор топика
Ответ на: комментарий от kapinos

При расчетах с применением натуральных чисел максима выдает весьма странный результат:
Текст мак файла:

T[н]:ev(L[н]/r[н])$
print('T[н],"=",%);
a[1]:ev(%e^(T/T[н])), numer$
print('a[1],"=",%);
b[1]:ev(%e^((gamma*T)/T[н]))$
print('b[1],"=",%);
Результат в максиме:
(%i548) T[\í]:ev(L[\í]/r[\í])
(%i549) print('T[\í],"=",%)
T[í]"="0.032333333333333
(%o549) 0.032333333333333
(%i550) ev(a[1]:ev(%e^(T/T[\í])),numer)
(%i551) print('a[1],"=",%)
a[1]"="1..#INF00e+000*10^000E+6515600
(%o551) 1..#INF00e+000*10^000E+270475948
(%i552) b[1]:ev(%e^(gamma*T/T[\í]))
(%i553) print('b[1],"=",%)
b[1]"="5.5645555221085396*10^10

В чем может быть ошибка?

kapinos
() автор топика
Ответ на: комментарий от anonymous

Нет, не то.

$ - заглушает вывод. А я хочу как то скрыть ввод «%in», потому что после произведения расчетов остается очень много текстовой информации, которая мне не нужна, по большей части - строки ввода.

kapinos
() автор топика
Ответ на: комментарий от kapinos

минимальный нерабочий пример, плюс описание того, что не нравится или пометка какая-то.

anonymous
()
Ответ на: комментарий от kapinos

ключ --very-quiet при запуске maxima, или что ты имеешь ввиду?

anonymous
()
Ответ на: комментарий от kapinos

это проблема главная проблема анонимности, не обращай внимание на комментарии выбивающиеся из темы

anonymous
()
Ответ на: комментарий от kapinos

И все же, какова причина такого результата?

kapinos
() автор топика
Ответ на: комментарий от kapinos

Текст мак файла:

если я его выполню у себя, то получу вывод не соответствующий твоему, по этому и была просьба создать минимальный нерабочий пример, где бы проявлялась ошибка. плюс в приведенном примере совсем ничего не понятно, про что ты спрашиваешь.

anonymous
()
Ответ на: комментарий от anonymous

А, извините за тупость.
Вот сокращенный пример того что меня беспокоит:

T:1000$
t[0]:0.8$
r[н]:3$
L[н]:0.097$
t[0]/T, numer$
gamma:%$
T[н]:ev(L[н]/r[н])$
print('T[н],"=",%);
a[1]:ev(%e^(T/T[н])), numer$
print('a[1],"=",%);
b[1]:ev(%e^((gamma*T)/T[н]))$
print('b[1],"=",%);

У меня из a[1]:ev(%e^(T/T[н])), numer$ получается результат вида a[1]«=„1..#INF00e+000*10^000E+6515600. И я не знаю как расшифровать такой ответ максимы. Да и потом в формулах где используются коэффициенты а1 и b1 выходят ответы типа-0.0.

kapinos
() автор топика
Ответ на: комментарий от kapinos

значение рассчитываемого параметра = символьная форма записи формулы = численная форма записи формулы = решение?

#!/bin/bash

maxima --very-quiet <<EOF
a:1$
b:7$
dump(a,b):=block(
  print(a,"=",b,"=",''b),
  a::''b
)$
dump(t,'(a+b))$
t;
EOF

получится, что-то типа:

$ ./run.sh
t = b + a = 7 
                                       7
возможность оставлять численные выражения не упрощенными не помню, надо искать

anonymous
()
Ответ на: комментарий от kapinos

вот что у меня получилось:

/tmp$ maxima -b out.mac

Maxima 5.35.1 http://maxima.sourceforge.net
using Lisp GNU Common Lisp (GCL) GCL 2.6.12 (a.k.a. GCL)
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
The function bug_report() provides bug reporting information.
(%i1) batch("out.mac")

read and interpret file: #p/tmp/out.mac
(%i2) T:1000
(%i3) t[0]:0.8
(%i4) r[н]:3
(%i5) L[н]:0.097
(%i6) ev(t[0]/T,numer)
(%i7) gamma:%
(%i8) T[н]:ev(L[н]/r[н])
(%i9) print('T[н],"=",%)
T   = 0.03233333333333333 
 н
(%o9)                         0.03233333333333333
(%i10) ev(a[1]:ev(%e^(T/T[н])),numer)
(%i11) print('a[1],"=",%)
a  = 6.139034875270465b13431 
 1
(%o11)                      6.139034875270465b13431
(%i12) b[1]:ev(%e^(gamma*T/T[н]))
(%i13) print('b[1],"=",%)
b  = 5.564555522108539E+10 
 1
(%o13)                       5.564555522108539E+10
(%o13)                              out.mac

anonymous
()
Ответ на: комментарий от anonymous

Да, в терминале у меня получается тоже что то похожее, а вот wxMaxima продолжает выдавать 1...INF000 и т. д.
Но даже в терминале странный вывод на а1.

Maxima 5.30.0 http://maxima.sourceforge.net
using Lisp GNU Common Lisp (GCL) GCL 2.6.8 (a.k.a. GCL)
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
The function bug_report() provides bug reporting information.
(%i1) batch("D:/SPT_Z2.1.mac");

read and interpret file: #pD:/SPT_Z2.1.mac
(%i2) T:1000
(%i3) t[0]:0.8
(%i4) r[\э]:3
(%i5) L[\э]:0.097
(%i6) ev(t[0]/T,numer)
(%i7) gamma:%
(%i8) T[\э]:ev(L[\э]/r[\э])
(%i9) print('T[\э],"=",%)
T  = 0.032333333333333
 э
(%o9)                          0.032333333333333
(%i10) ev(a[1]:ev(%e^(T/T[\э])),numer)
(%i11) print('a[1],"=",%)
a  = 1..#INF00e+000E+2288232
 1
(%o11)                      1..#INF00e+000E+2288952
(%i12) b[1]:ev(%e^(gamma*T/T[\э]))
(%i13) print('b[1],"=",%)
b  = 5.5645555221085396E+10
 1
(%o13)                      5.5645555221085396E+10
(%o13)                          D:/SPT_Z2.1.mac
(%i14)

И отсюдова все равно выплывает в последующих формулах минус ноль.

kapinos
() автор топика
Ответ на: комментарий от kapinos

Да, все правильно.

И отсюдова все равно выплывает в последующих формулах минус ноль.

какие следующие формулы?

anonymous
()
Ответ на: комментарий от anonymous

Поставил, первую, что стала. Я же не высшую математику считаю.

kapinos
() автор топика
Ответ на: комментарий от anonymous

В условии задачи ошибка была, вместо значения периода указали значение частоты, вот и получается что Т=1/1000.

kapinos
() автор топика
Ответ на: комментарий от kapinos

Но все равно ток почему то отрицательным получился.

kapinos
() автор топика

Я буду банален и отправлю тебя к манам - смотри статьи Тихона Танравского, инструкцию к максиме. Лисп знать для начала совсем не обязательно.

aiqu6Ait ★★★★
()
11 мая 2015 г.

Возник еще один вопрос. Во время ведения расчетов возникает запись результата образца:

3.363986258431361*(-1)^0.5

Что обозначает последний коэффициент?

kapinos
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.