2014 dxdy logo

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

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




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


24/07/14
138
Всем доброго времени суток. Описываю проблемы.

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 


08/03/11
186
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 


24/07/14
138
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 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
1. Может быть, использовать Rasterize вместо Image? Авось поможет.

 Профиль  
                  
 
 Re: Две небольшие проблемки с Mathematica
Сообщение21.09.2014, 20:35 


24/07/14
138
Aritaborian в сообщении #910183 писал(а):
1. Может быть, использовать Rasterize вместо Image? Авось поможет.
Вроде помогает. А в чем разница между этими функциями?

 Профиль  
                  
 
 Re: Две небольшие проблемки с Mathematica
Сообщение22.09.2014, 10:37 
Аватара пользователя


29/05/11
227
Красноармейск, Донецкая обл.
_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 ] 

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



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

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


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

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