Секция 7 - MATLAB в образовании и Интернете (1250002), страница 14
Текст из файла (страница 14)
Мыразработали процедуру вычисления емкости и заряда на поверхности и добавили в меню Solve задачи pdetool новый пункт Capacity (Емкость). Оригинальный алгоритм такого расчета нам подсказал (после обращения черезфорум сайта Matlab.ru) ведущий одного из разделов Шмелев В. Е.Большинство представляющих интерес демонстраций и учебных задач представляют собой решение динамических задач, поэтому для ихпредставления как локально, так и в Интернете представляется важнымвывод анимированных изображений. И хотя в системе MATLAB имеютсясредства для локального вывода анимированного изображения, эта проблема не всегда решается стандартными средствами даже для локальногопредставления, тем более для представления в Интернете.Проблемы вывода динамических изображений в локальных задачах ипути их решенияВ настоящее время в системе MATLAB существует два способа получения анимированных изображений — анимация «на лету» с помощьюизменения свойств соответствующих графических объектов, и анимация,получаемая с помощью создания соответствующей матрицы с последующим ее выводом с помощью процедуры movie [6].
Для создания анимированных демонстраций, обладающих интерактивными возможностями,предпочтительным является первый способ, особенно, в сочетании с графическим интерфейсом, позволяющим оперативно менять параметры задачи и тут же получать динамические результаты расчета на экран. Еслизадача готовится для самостоятельной работы студента, то предпочтитель1887Труды II научной конференции «Проектирование инженерных и научных приложений в среде MATLAB»ным вариантом является анимация «на лету» с одновременной возможностью самостоятельного задания входных параметров.
Такая задача должнатщательно разрабатываться и еще с той точки зрения, что необходимо вводить достаточное количество проверок вводимых параметров, посколькуошибочное (или злонамеренное) введение неверных значений может привести к аварийным ситуациям (деление на ноль, вычисление с несуществующим элементом и т. д.). Если же та же самая задача готовится преподавателем для демонстрации на лекции, то желательно заготовить набор параметров при которых демонстрируемый эффект наиболее ясен, либо приготовить заранее готовые массивы данных с уже записанными анимациями.При разработке задач по электродинамике часто приходится выводить изолинии скалярного поля или силовые линии (линии тока) векторного поля, причем желательно делать это в режиме анимации если поле меняется со временем.
Если для вывода отдельных линий в режиме «анимации на лету» существует подробное описание [4, 6], то для вывода изолиний скалярного поля такого очевидного пути нет. Такая же проблема возникает при динамическом выводе гистограммы. Проблема состоит в том,что процедура вывода изолиний contour() и процедура построения гистограммы hist() являются процедурами высокого уровня, и они не генерирует дескриптор какого-либо графического объекта, чьи свойства можно было бы менять в процессе вывода для создания эффекта анимации. В этомслучае для анимирования гистограммы [4] приходится поступать следующим образом. С помощью процедуры hist и stairs генерируется (безвывода на экран) набор координат ломаной, которая описывает требуемуюгистограмму.
Это может быть, например, такой кодy= %Генерация случайных чиселdx=0.25; % Ширина биновx=-2.5:dx:2.5; % Центры бинов% Вычисление параметров гистограммы[ny,xh]=hist(y,x);xh=xh-dx/2;% Вычисление координат ломаной[xl,yl]=stairs(xh,ny);% Создание дескриптора ломаной линииhl=line(xl,yl);set(hl,’EraseMode’,’xor’);pause;После этого уже можно запускать вычислительный цикл, в которомизменяются свойства линии XData и YData, что и приведет к анимированному выводу гистограммы.Для создания анимированной картины движения изолиний пришлосьиспользовать более сложный алгоритм, хотя суть его осталась такой же —выделение с помощью стандартных функций (в случае с изолиниями этофункция contourc) векторов координат и дескрипторов линий, которые1888Секция 7.
MATLAB в образовании и Интернетеописывают искомые изолинии, присвоение им соответствующих свойств‘EraseMode’ и постоянное обновление их координат в процессе движенияизолиний. Трудность еще состояла в том, что в силу физической специфики задачи и ограниченной области вывода изолиний число изолиний изменялось в процессе вывода. Все это требовало специальных решений приразработке соответствующих процедур. Так например, для решения такихразных задач как изображение силовых линий поля излучения с помощьювектора Герца и изображения силовых линий магнитного поля и токов настенках прямоугольных волноводов была разработана функцияmove_contour, которая приводится далее.function [v,hl]=move_contour(x,y,Z,Niz,ini,hl)% Эта процедура позволяет изобразить движущиеся% изолинии переменного поля% x и y - координаты прямоугольной сетки в узлах % которой рассчитано выводимое скалярное поле% Y — матрица значений скалярного поля в узлах% Niz — если это целое число, то это число выво% димых изолиний, а если это вектор, то его зна% чения — значения поля на выводимых изолинияхpersistent NNI% Вычисление матрицы изолинийCC=contourc(x,y,Z,Niz);n1=0;n3=length(CC);n2=1;ii=0;while n2<n3ii=ii+1;n1=n1+2;n2=n1-1+CC(2,n1-1);if ini% Выделение отдельной линииhl(ii)=line(CC(1,n1:n2),CC(2,n1:n2));v(ii)=CC(1,n1-1);set(hl(ii),'EraseMode','Xor','color','k');else% Выделение отдельной линииset(hl(ii),'Xdata',CC(1,n1:n2),'Ydata',…CC(2,n1:n2));end;n1=n2;end;% цикла whileif iniNNI=length(hl);elseif NNI>iifor iii=ii+1:NNI% Удаление «исчезнувших» линийset(hl(iii),'Xdata',[],'Ydata',[]);1889Труды II научной конференции «Проектирование инженерных и научных приложений в среде MATLAB»end;end;Вывод анимированных изображений в ИнтернетНи один из описанных выше способов анимации в чистом виде негодится при представлении задачи в Интернете.
Последовательную пересылку и загрузку html-страниц для получения анимации, конечно, реализовать невозможно. Пересылка же матрицы для функции movie и ее последующее воспроизведение на стороне клиента требует наличия у клиентаустановленной системы MATLAB, от чего мы отказались с самого начала.Поэтому нами было принято решение генерировать на стороне серверасредствами MATLAB стандартный для Интернет анимированный графический файл. Система MATLAB до версии 6.0 таких средств в качествевстроенных функций не содержала. Поэтому после проведенного поискамы остановились на программе mpgwrite, взятой нами из архива MathWorks, и пакета программ makemovie, разработанного А.
Вейманом(A. Weigman, wiegmann@math.lbl.gov).Программа mpgwrite использует матрицу, подготовленную с помощью стандартных средств Matlab для использования с функцией movie. Нодело в том, что функция getframe, используемая для этих целей, не работает на стороне сервера и команда M(j)=getframe возвращает пустую матрицу. Пришлось создавать матрицу M с помощью функции print.print -djpeg -r72 skin.jpgOutImage = imread('skin.jpg');%frame(j1).cdata=OutImage;frame(j1).colormap=[];После чего использовать матрицу frame в качестве аргументафункции mpgwrite для создания mpg-файла.При использовании функции makemovie в пакете поставки имеетсяфункция makeframe, которая создает и записывает на диск промежуточные файлы с мгновенными изображениями.
В этом пакете имеются варианты создания gif-файлов и mpg-файлов, но вариант с созданием mpgфайлов не работает, поэтому нами в настоящее время используются обапакета один - для создания gif-файлов и второй - mpg-файлов. Необходимость предоставлять пользователю возможность выбора типа генерируемого файла связана с тем, что просмотр этих файлов осуществляется разными средствами по разному. Gif-файл просматривается на экране средствами браузера и полученная анимация прокручивается заранее заданноечисло раз. Mpg-файл просматривается с помощью проигрывателя WindowsMedia (на компьютерах, на которых установлена операционная системаWindows) и этим просмотром можно управлять (останавливать, повторять,просматривать по кадрам)1890Секция 7.
MATLAB в образовании и ИнтернетеОпыт разработки и эксплуатации моделирующих программПо описанной технологии к настоящему времени разработаны 11 задач по электродинамике: «Диаграмма направленности антенн», «Токи наповерхности кубического резонатора», «Диаграмма направленности излучения релятивистской частицы», «Движение релятивистской частицы вполе сильной электромагнитной волны», «Нестационарный скин-эффект»и «Скин-эффект внутри проводящего полого цилиндра», «Расплывание пакета в среде с дисперсией», «Фурье-преобразование», «Электростатическое поле зарядов», «Излучение вектора Герца».
С этими задачами можнопознакомитьсянасайтахhttp://matlab.tutornet.ru,http://www.phys.nsu.ru:8000.При эксплуатации задач выяснилась следующая проблема - аварийный останов программы (деление на ноль, несовпадение размерности массивов и т. д.), т.
е. те ошибки, которые при локальном исполнении приводят к останову исполнения задачи и переходу в режим командного окна,приводит к зависанию программы matweb.exe и необходимости его перезапуска. Кроме того, использованная система генерации графических файлов с записью на диск промежуточных картинок является достаточносложной и относительно медленной. Выходом может быть разработкафункции, генерирующей графические анимированные файлы в памяти.Возможно, появившаяся в версии 6.Х функция avifile поможет решить этупроблему.В настоящее время все разработанные задачи могут работать также влокальном варианте, если на компьютера пользователя установлен MatLab.При работе в пределах Новосибирского научного центра время получениярезультата расчета составляет для разных задач от 30 секунд до 2 минут.Литература1.