Ru-Board.club
← Вернуться в раздел «Программы»

» Mathematica (математика)

Автор: popkov
Дата сообщения: 16.04.2009 17:49

Цитата:
Так вот, очень может быть, что между указанными глюками есть связь. Ведь баги сейчас именно "фиксят", вместо того, чтобы исправить причину его возникновения. Один симптом пофиксили, а сколько ещё таких симтомов...

Я был абсолютно прав. Andrzej Kozlowski и Leonid Shifrin дали почти исчерпывающее объяснение происхождения обоих глюков. Их корень заключается в том, что любые произведения при выполнении Mathematica автоматически приводит к т.н. "канонической форме", представляющей собой произведение простых чисел (или независимых переменных) в соответствующих степенях.

Например,
[no]
In[1]:= 2*6^z

Out[1]= 2^(1 + z) 3^z
[/no]
Поэтому невозможно упростить выражение 2^(1 + z)*3^z до 2*6^z, хотя последнее, конечно, проще. То есть, даже если Simplify и способен упростить, то, как я понял, при выводе результат снова автоматически будет преобразован в форму 2^(1 + z)*3^z. Однако, как я понял из последнего поста Andrzej Kozlowski, в действительности ситуация ещё хуже, поскольку для измерения "сложности" полученного выражения оно передаётся в ComplexityFunction, и на этом этапе опять же приводится к канонической форме, поэтому объективная оценка уровня сложности выражения оказывается в действительности невозможна, и Simplify прости не может даже отличить 2^(1 + z)*3^z от 2*6^z.

Безусловно, я не всё для себя прояснил в этом, однако масштаб застарелой недоработки и её корень становятся ясны.
Автор: Cheery
Дата сообщения: 21.04.2009 03:28
Сообразить не могу.. как лучше сделать несколько графиков, но чтобы выводились один под другим, а не в одну строку? сейчас сделано вида
ListPlot[...]
ListPlot[...]
ListPlot[...]
ListPlot[...]

но получается такой изврат


ps: нашел уже что то похожее.. изврат, но все же..
{{List1},{List2},{List3},{List4}}//TableForm
Автор: popkov
Дата сообщения: 21.04.2009 08:17
Cheery

Цитата:
как лучше сделать несколько графиков, но чтобы выводились один под другим, а не в одну строку?

Есть множество способов, например с использованием символа переноса на новую строку:

[no]Print[ListPlot[...],"\n",ListPlot[...],"\n",ListPlot[...],"\n",ListPlot[...]][/no]
Автор: Cheery
Дата сообщения: 21.04.2009 19:15
popkov
Спасибо..
А то перешел на математику из за недостаточной точности вычислений в матлабе.
Автор: Cheery
Дата сообщения: 21.04.2009 23:51
И тут еще вопрос возник.. а можно как то число заставить быть с высокой точностью?
например 1.5
N[1.5,10] выдаст ессно те же 1.5, а вот
N[15/10,10] то, что надо. просто не хочется изначально записывать число в таком виде.. как то еще можно?

ps: сорри, пока висел форум уже нашел - SetPrecision
Автор: 28111981
Дата сообщения: 22.04.2009 16:10
Можно сделать SetAccuracy[A,digitnum] и SetPrecision[A, digitnum2] одна из этих команд дает общее количество значащих цифр в значении переменной А, а вторая число в дробной части. Могу немного ошибаться в их синтаксисе - уточните через хелп.
Автор: Cheery
Дата сообщения: 22.04.2009 17:49
28111981
да я с этим уже разобрался, спасибо теперь мой код считает с потрясающей точностью.
правда проблема возникла уже с другим
ну ладно, вывод графиков 2x2 понятен, а как сохранить эту комбинацию в один файл ?

ps: данные то сохраняются, но хочется для наглядности сохранить и в виде графика, чтобы не возиться потом с воспроизведением
pps: и это уже нашел.. GraphicsRow или GraphicsGrid

правда Export, почему то, сохраняет пустой файл.. - просто белый фон
а если указывать 3 параметром для Export 'Image', то вставляется еще и строка на картинку
Image`ToGraphicsRaster

если же не указывать или указывать "Graphics", то выводит только GraphicsRow и GraphicsColumn, а вот GraphicsGrid не хочет


в общем что то ему с картинками не нравится.. когда одну заменяешь другой - тогда все сохраняется.. странности какие то

в целом:
вот это сохраняет пустой файл, но правильного разрешения
Export["test.gif", GraphicsGrid[{{t1, t2}, {t3, t4}}]]
где t1,t2 - ListPlot
а вот t3,t4 - ListLogPlot и проблема именно из за них
кто нить знает решение?
не я один заметил
http://groups.google.com/group/it.scienza.matematica/msg/8cceaef4f7311402
Автор: Partner1
Дата сообщения: 24.04.2009 11:53
Cheery
Какая версия Mathematica?
У меня на Mathematica 7.01 нормально сохраняет и ListLogPlot и PlotLegend.
Автор: Cheery
Дата сообщения: 24.04.2009 21:25
Partner1

Цитата:
Какая версия Mathematica?

была 7.0, поставил 7.01, но пока не попробовал..
я сейчас вожусь с другим..
t[[4]] = Show[t[[4]],
ListLogPlot[
Transpose[{temp[[4]], temp[[3]]}], {styles[[4]],
PlotStyle -> color}], PlotRange -> All];

не обновляет оси.. то есть ticks и цифры указаны для первого графика, что был
если добавить FrameTicks -> {Automatic, Automatic}, то по оси y вместо Log шкалы выводить линейную шкалу со значениями логарифмов
вместо 10^(-48) пишет -110
что правильно, но сложнее для оценки
Автор: popkov
Дата сообщения: 25.04.2009 10:50
Cheery
Общее правило: если нравится, как отображается - то лучше выводить на виртуальный принтер. Например, PrintMirror работает в вплоть до версии Windows XP SP3 (под SP3 и Vista уже не работает) и создаёт .EMF-векторные файлы высокого качества, которые далее легко преобразовать в любой формат. Есть ещё ePrint (его 4-я версия работает лучше 5-й) или же просто в PDF с помощью Distiller'а.
Ещё можно выделить рисунок и нажать "сохранить как..." - там будут опции для контроля качества.

P.S. Разные способы экспорта создают совершенно разные файлы...
Автор: Cheery
Дата сообщения: 25.04.2009 20:03
popkov

Цитата:
Ещё можно выделить рисунок и нажать "сохранить как..." - там будут опции для контроля качества.

мне нужно автоматом
ps: да, в 7.01 сохраняет уже без проблем
Автор: Griefin
Дата сообщения: 26.04.2009 09:24
Функция Export тоже позволяет задавать параметры изображений.
Автор: popkov
Дата сообщения: 23.05.2009 08:48
Ещё один баг интегрирования в Mathematica 7:

In[1]:= Integrate[(1)/(z^2 + b^2 + a^2 - 2 z b Sin[\[Theta]] - 2 a b Cos[\[Theta]])^(1/2), {\[Theta], 0, 2 \[Pi]},
Assumptions -> {a > 0, b > 0, z > 0}]

Out[1]= 0

Легко убедиться, что функция в подкоренном выражении неотрицательна, а значит, подинтегральное выражение всегда больше нуля:

In[2]:= Reduce[ z^2 + b^2 + a^2 - 2 z b Sin[\[Theta]] - 2 a b Cos[\[Theta]] < 0, {\[Theta]}]

Out[2]= False

Версия 5.2 этого бага не содержит и возвращает исходный интеграл без изменений, нерешённым.
Автор: Cheery
Дата сообщения: 19.06.2009 19:24
Кто нить скажет - чего он красным так выделяет?
Не ошибка - считает, но все же..

Автор: TomasVercetti
Дата сообщения: 20.06.2009 09:47
Cheery,
это указатель того, что функции нужен ещё аргумент(ы).

Видимо, глючит. У меня на Ваших примерах всё нормально.
Автор: Cheery
Дата сообщения: 20.06.2009 19:54
TomasVercetti
да 7 как то странно на больших кодах ведет себя.
у меня есть большой Module
так вот в нем есть циклы.. и когда просто добавляешь где то внутри цикла, скажем, Print["test"];
то она то хочет точку с запятой перед описанием цикла
,{j,0,10}
то не хочет.. глупости какие то..
Автор: TomasVercetti
Дата сообщения: 28.06.2009 14:07
А что такое в FindRoot DampingFactor? (Решаю систему уравнений методом секущих.)
Автор: egorovshura
Дата сообщения: 05.08.2009 13:39
Пытаюсь работать с матрицами которые содержат внутри себя элементы созданные с помощью функции Subscript:

создаю

tens = Table[Subscript[t, i, j, k], {i, 1, 2}, {j, 1, 2}, {k, 1, 3}]

присваиваю значения

Table[Subscript[t, i, j, k], {i, 1, 2}, {j, 1, 2}, {k, 1, 3}] = Table[1, {i,
1, 2}, {j, 1, 2}, {k, 1, 3}]

Возник вопрос как очистить переменные Subscript[t, i, j, k] с помощью Clear?

Пробовал различные вызова с использованием Hold, но ничего не сработало.

Автор: TomasVercetti
Дата сообщения: 05.08.2009 20:55
1. Table[Subscript[t, i, j, k], {i, 1, 2}, {j, 1, 2}, {k, 1, 3}] = Table[1, {i,
1, 2}, {j, 1, 2}, {k, 1, 3}]
А эта запись не вызывает ошибки? Что Вы хотите получить?
В любом случае, это Вы не значение t[i,j,k] присваиваете, а создаёте новый список.
«Присвоить значение» элементу списка в функциональном программировании = применить правило (rule) к элементу списка (или другую функцию). Например:
tens = Table[Subscript[t, i, j, k], {i, 1, 2}, {j, 1, 2}, {k, 1, 3}];
tens/. t -> 1
присвоит всем t значения, равные единице.

2. Clear[t, i, j, k]
Хотя в Вашей записи все эти переменные являются локальными для конкретных функций, и, по идее, должны быть глобально «свободны».
Автор: egorovshura
Дата сообщения: 05.08.2009 23:37
TomasVercetti

Да, действительно так как я написал получается ошибка. На самом деле я делал следующее:

выполнил tens = Table[Subscript[t, i, j, k], {i, 1, 2}, {j, 1, 2}, {k, 1, 3}]

получил на выходе

{{{Subscript[t, 1, 1, 1], Subscript[t, 1, 1, 2], Subscript[t, 1, 1,
3]}, {Subscript[t, 1, 2, 1], Subscript[t, 1, 2, 2], Subscript[t, 1,
2, 3]}}, {{Subscript[t, 2, 1, 1], Subscript[t, 2, 1, 2],
Subscript[t, 2, 1, 3]}, {Subscript[t, 2, 2, 1], Subscript[t, 2, 2,
2], Subscript[t, 2, 2, 3]}}}

скопировал этот вывод и добавил присваивание

{{{Subscript[t, 1, 1, 1], Subscript[t, 1, 1, 2], Subscript[t, 1, 1,
3]}, {Subscript[t, 1, 2, 1], Subscript[t, 1, 2, 2], Subscript[t,
1, 2, 3]}}, {{Subscript[t, 2, 1, 1], Subscript[t, 2, 1, 2],
Subscript[t, 2, 1, 3]}, {Subscript[t, 2, 2, 1], Subscript[t, 2, 2,
2], Subscript[t, 2, 2, 3]}}}
= Table[1, {i, 1, 2}, {j, 1, 2}, {k, 1, 3}]

Таким образом всем элементам Subscript[t, i, j, k] присвоились единички. Это видно если ввести выражение Subscript[t, i, j, k] с конкретными значениями i, j, k.

После этого при вводе tens я получаю список содержащий все единички.

Теперь я хотел бы сделать нечто вроде Clear[tens], но так чтобы очистить значения всех элементов списка Subscript[t, i, j, k].


Добавлено:
Эту проблему можно было бы решить если бы я смог создать такой список:

{Hold[Subscript[t, 1, 1, 1]], Hold[Subscript[t, 1, 1, 2]],
Hold[Subscript[t, 1, 1, 3]], Hold[Subscript[t, 1, 2, 1]],
Hold[Subscript[t, 1, 2, 2]], Hold[Subscript[t, 1, 2, 3]],
Hold[Subscript[t, 2, 1, 1]], Hold[Subscript[t, 2, 1, 2]],
Hold[Subscript[t, 2, 1, 3]], Hold[Subscript[t, 2, 2, 1]],
Hold[Subscript[t, 2, 2, 2]], Hold[Subscript[t, 2, 2, 3]]}

Только создать такой список программным путем у меня не получается. Я могу сделать так

Flatten[Table[
Subscript[Hold[t], i, j, k], {i, 1, 2}, {j, 1, 2}, {k, 1, 3}]]

и получаю на выходе

{Subscript[Hold[t], 1, 1, 1], Subscript[Hold[t], 1, 1, 2], Subscript[
Hold[t], 1, 1, 3], Subscript[Hold[t], 1, 2, 1], Subscript[
Hold[t], 1, 2, 2], Subscript[Hold[t], 1, 2, 3], Subscript[
Hold[t], 2, 1, 1], Subscript[Hold[t], 2, 1, 2], Subscript[
Hold[t], 2, 1, 3], Subscript[Hold[t], 2, 2, 1], Subscript[
Hold[t], 2, 2, 2], Subscript[Hold[t], 2, 2, 3]}

что близко к желаемому, но не совсем то.

Добавлено:
Только теперь сообразил, что

Clear[Subscript[t, 1, 1, 1]]

не работает. Странно, почему?

Работает вариант

Subscript[t, 1, 1, 1] = .

который тоже подходит так как сбрасывает значение переменной Subscript[t, 1, 1, 1], чего я и добиваюсь для всех Subscript[t, i, j, k].

Вообще получается так что Subscript[t, i, j, k] это и непеременная вовсе а нечто более сложное.
Автор: TomasVercetti
Дата сообщения: 06.08.2009 14:26
egorovshura,

Функция Clear очищает определение/значение конкретного символа (symbol). Например, символом является Subscript; но Clear[Subscript] очистит все определённые ранее Subscript'ы. А присваиваемые Вами значения присваиваются глобальному символу Subscript и хранятся внутри именно как Subscript[t,1,1,1], что не является отдельным символом. Поэтому значения можно очистить с помощью Unset[Subscript[t, 1, 1, 1]] (эквивалент точки).

В конечном счёте всё упрётся в то, когда Вы хотите трактовать t[i,j,k] как отдельный символ, а когда — как набор переменных. И насколько Вам всё это нужно автоматизировать. Одно из возможных решений, в той же теме были и другие предложения. Насколько я помню, в своё время были пакеты, которые позволяли трактовать Subscript как один символ, за исключением итераций, когда индекс трактуется как переменная; к сожалению, названия не помню.


In:
Map[Hold,
Flatten[Table[
Subscript[t, i, j, k], {i, 1, 2}, {j, 1, 2}, {k, 1, 3}]]]

Out:
{Hold[Subscript[t, 1, 1, 1]], Hold[Subscript[t, 1, 1, 2]],
Hold[Subscript[t, 1, 1, 3]], Hold[Subscript[t, 1, 2, 1]],
Hold[Subscript[t, 1, 2, 2]], Hold[Subscript[t, 1, 2, 3]],
Hold[Subscript[t, 2, 1, 1]], Hold[Subscript[t, 2, 1, 2]],
Hold[Subscript[t, 2, 1, 3]], Hold[Subscript[t, 2, 2, 1]],
Hold[Subscript[t, 2, 2, 2]], Hold[Subscript[t, 2, 2, 3]]}

Удачи!
Автор: egorovshura
Дата сообщения: 06.08.2009 16:26
TomasVercetti,

Вариант

Map[Hold,
Flatten[Table[
Subscript[t, i, j, k], {i, 1, 2}, {j, 1, 2}, {k, 1, 3}]]]

не работает, так как Subscript[t, i, j, k] буду заменены на значения, т.е. единички

{Hold[1], Hold[1], Hold[1], Hold[1], Hold[1], Hold[1], Hold[1],
Hold[1], Hold[1], Hold[1], Hold[1], Hold[1]}

Вариант который у меня сработал такой


Flatten[
Table[
a[t, i, j, k],
{i, 1, 2}, {j, 1, 2}, {k, 1, 3}
]
] /. a[x__] -> Defer[Subscript[x]]

Только мне кажется это слишком сложным. Наверное я что-то перемудрил.
Автор: TomasVercetti
Дата сообщения: 06.08.2009 17:44
egorovshura,

a[x__] -> Defer[Subscript[x]] заменяет выражение другим выражением, не вычисляя последнее. Глобальные переменные Subscript[t,i,j,k] по-прежнему будут равны единице.

Но ведь точно также с самого начала можно делать:
tens = Flatten[
Table[Subscript[t, i, j, k], {i, 1, 2}, {j, 1, 2}, {k, 1, 3}]];
tens /. Subscript[t, x__] -> 1;
tens /. x__ ->
Flatten[Table[
Subscript[t, i, j, k], {i, 1, 2}, {j, 1, 2}, {k, 1, 3}]];
...
И глобально Subscript[t, i, j, k] будет свободны.

Так что, всё зависит от того, что и как Вы будете делать. : )
Автор: egorovshura
Дата сообщения: 06.08.2009 20:24
TomasVercetti

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

tens1 . tens2 == tens3

Думаю проще было бы работать и индексами, т.е. t[i, j, k] вместо субскриптов. но субскрипты приятнее выглядят.
Автор: TomasVercetti
Дата сообщения: 04.09.2009 17:18
А есть ли встроенные средства, чтобы в Plot на каждую из строящихся кривых поместить надпись? Наподобие как ContourLabels в ContourPlot, только текст свой.
Автор: rakis
Дата сообщения: 05.09.2009 23:48
Необходимо решить задачу математического моделирования:
Сколько шариков диаметром 30мм вместится в 1м куб.

Вопрос: Можно ли эту задачу решить с помощью Mathematica?
Автор: KChernov
Дата сообщения: 06.09.2009 06:26
rakis

Цитата:
Сколько шариков диаметром 30мм вместится в 1м куб.

Вопрос: Можно ли эту задачу решить с помощью Mathematica?

В буквальной постановке вроде нет (по крайней мере без доп программирования).
Но если немного подумать над задачей, то и без субжа решается (в уме).
Автор: rakis
Дата сообщения: 06.09.2009 11:58
KChernov
Цитата:
В буквальной постановке вроде нет (по крайней мере без доп программирования).

Ну, то что надо программировать меня не пугает.


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

а вот тут возможны варианты (укладывать шары строго один над одним, допускать смещение в выемки, образованные нижним слоем и т.п.)
Автор: lisnake
Дата сообщения: 06.09.2009 15:28

Цитата:
Сколько шариков диаметром 30мм вместится в 1м куб.
 
Вопрос: Можно ли эту задачу решить с помощью Mathematica?

Эк вы хватили это же очень сложная и до сих пор до конца не решенная задача о плотной упаковке шаров. Впрочем, гексагональная упаковка, я думаю, вам подойдет, это наилучшая из известных конфигураций. Читать здесь — http://en.wikipedia.org/wiki/Sphere_packing
Автор: rakis
Дата сообщения: 06.09.2009 22:08
lisnake
Цитата:
Эк вы хватили это же очень сложная и до сих пор до конца не решенная задача о плотной упаковке шаров

О как... Не знал. Спасибо за наводку.

Страницы: 12345678910111213141516171819202122232425262728293031323334

Предыдущая тема: Идея несуществующей программы...


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.