2014 dxdy logo

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

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




 
 Две небольшие проблемки с Mathematica
Сообщение21.09.2014, 14:32 
Всем доброго времени суток. Описываю проблемы.

1. Строится большая таблица статических изображений(не графиков).
a1 = Table[Image[
Plot[u /. t -> h, {x, -70, 70},
PlotRange -> {{-70, 70}, {0, umax}}, ImageSize -> 1000,
PlotPoints -> 200, MaxRecursion -> 12,
PlotStyle -> Hue[0.5, 0.6, 0.7]]], {h, -100, 100, 0.8}];


Затем таблица экспортируется в анимацию .swf:

Export["D:\\KdV-5s-1.swf", a1, "FrameRate" -> 30]

Анимация получается багованная: фон у графиков черный:
Изображение
Вся эта чернь пропадает, если применить к каждому элементу таблицы картинок функцию TableForm[]:
a1 = Table[
TableForm[
Image[ Plot[...] ] ], {h, -150, 150, 1}];

Во-первых, почему получается эта чернота? Во-вторых, что можно сделать чтобы от нее избавиться(без всяких таких костылей)?
Кстати, сами картинки a1[[i]] нормальные, без черного фона.

2. В ходе решения задачи получается выражение для функции содержащее много парных слагаемых следующего вида:
$$-1.21566 \cdot e^{(-1.107 t + 0.9 x)} + 1.21566 \cdot  e^{(-1.107 t + 0.9 x)}$$
Эти пары не сокращаются, потому что на самом деле математика видит в них вот что:
$$-1.2156564642529046`\cdot e^{(-1.10699999999985` t + 0.9` x)} + 
 1.2156564642605576` \cdot e^{(-1.10700000000015` t + 
   0.900000000004` x)}$$Вопрос тот же:откуда берутся эти маленькие добавочки, при том, что слагаемые в паре вроде бы получаются из одних и тех же множителей, и как эти пары уничтожить?

 
 
 
 Re: Две небольшие проблемки с Mathematica
Сообщение21.09.2014, 16:23 
1. Если убрать Image[], то черного фона нет (по крайней мере в версии 10)
Код:
SetDirectory[NotebookDirectory[]];
Export[
   "eg.swf",
   Plot[#, {x, 0, 2 Pi}, Axes -> False, Frame -> True, PlotRange -> {{0., 2. Pi}, {-1., 1.}}] & /@ (Sin[x] Sin[Range[0., 2. Pi, 2. Pi/100.]])
]

2. Скорее всего это ошибки округлений. Поcмотрите функции SetPrecision[], SetAccuracy[] и Chop[].
Код:
Chop[SetPrecision[-1.2156564642529046` E^(-1.10699999999985` t + 0.9` x) + 1.2156564642605576` E^(-1.10700000000015` t + 0.900000000004`x),10 ], 10^-9 ]

 
 
 
 Re: Две небольшие проблемки с Mathematica
Сообщение21.09.2014, 16:37 
sithif в сообщении #910174 писал(а):
1. Если убрать Image[], то черного фона нет (по крайней мере в версии 10)
Вполне может быть. Но дело в том, что без Image[] в некоторых случаях не обойтись. Я начал его использовать в таких ситуациях с этого лета, когда делал анимации по такому же принципу(через таблицу графиков). Там анимации были трехмерные, и кроме этого требовалась большая точность (параметры MaxRecursion, PlotPoints). Так вот в худших случаях таблица графиков (именно графиков, которые можно крутить, вертеть, увеличивать и т.д.) у меня занимала 17 Gb. памяти. Понятно, что оперативной памяти не хватало, программа работала долго и со всякими ошибками. Введение Image[] позволило сократить требуемый объем до всего 4 Gb.

sithif в сообщении #910174 писал(а):
2. Скорее всего это ошибки округлений. Поcмотрите функции SetPrecision[], SetAccuracy[] и Chop[].
Посмотрю, когда она освободится. Но уже пробовал Chop[] – он в этих случаях не помогает.

 
 
 
 Re: Две небольшие проблемки с Mathematica
Сообщение21.09.2014, 16:44 
Аватара пользователя
1. Может быть, использовать Rasterize вместо Image? Авось поможет.

 
 
 
 Re: Две небольшие проблемки с Mathematica
Сообщение21.09.2014, 20:35 
Aritaborian в сообщении #910183 писал(а):
1. Может быть, использовать Rasterize вместо Image? Авось поможет.
Вроде помогает. А в чем разница между этими функциями?

 
 
 
 Re: Две небольшие проблемки с Mathematica
Сообщение22.09.2014, 10:37 
Аватара пользователя
_Er в сообщении #910130 писал(а):
2. В ходе решения задачи получается выражение для функции содержащее много парных слагаемых следующего вида:
$$-1.21566 \cdot e^{(-1.107 t + 0.9 x)} + 1.21566 \cdot  e^{(-1.107 t + 0.9 x)}$$
Эти пары не сокращаются, потому что на самом деле математика видит в них вот что:
$$-1.2156564642529046`\cdot e^{(-1.10699999999985` t + 0.9` x)} + 
 1.2156564642605576` \cdot e^{(-1.10700000000015` t + 
   0.900000000004` x)}$$Вопрос тот же:откуда берутся эти маленькие добавочки, при том, что слагаемые в паре вроде бы получаются из одних и тех же множителей, и как эти пары уничтожить?

В каком смысле Вы хотите их уничтожить?
Один из вариантов: дискретизация. Chop сводит к 0 (нормальному 0, а не 1e-8) околонулевые числа. Функция Round[x, 10^-8] приводит к рациональному числу с точностью 8 знаков, функция Rationalize просто приводит аргумент к ближайшему рациональному. Экспоненты, многовероятно, сократятся. Потом можно применить N.

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


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