Секция 7 - MATLAB в образовании и Интернете (1250002), страница 8
Текст из файла (страница 8)
Вданной публикации мы ограничимся рассмотрением изменений, которыецелесообразно внести в локальное приложение MATLAB, чтобы адаптировать его к специфическим условиям Интернета, оставив за рамками изложения подробности технологии генерации веб интерфейса как такового.Мы покажем, как сделать приложение MATLAB устойчивым к возможнымошибкам ввода входных параметров и унифицировать операции вводавывода, освободив разработчиков конкретных задач от забот о согласовании своих задач с архитектурой веб сервера.
Мы опишем разработаннуюнами библиотеку функций MATLAB, с помощью которых достигаетсяунификация операций ввода-вывода на указанных выше сайтах, включаядинамическую генерацию и кэширование графических и видео- изображений.В дальнейшем изложении выделено несколько разделов. В разделе 1мы приводим текст локального приложения MATLAB, на примере которого далее демонстрируем принципы создания веб приложения с использованием MWS. В разделе 2 показано, как преобразовать локальное приложение MATLAB так, чтобы оно могло принимать входные параметры отвеб сервера.
Здесь же обсуждаются способы проверки входных параметровна стороне сервера. В разделе 3 описана технология кэширования графических изображений, сгенерированных расчетной программой MATLAB,позволяющая существенно уменьшить время отклика сервера при вызовеприложения с типичным набором входных параметров. В разделе 4 обсуждается применяемая нами технология генерации текстового потока, возвращаемого веб браузеру клиента. В разделе 5 описаны возможные варианты вызова приложения MATLAB, размещенного на сайте, через веб интерфейс.
В разделе 6 более детально разбирается сценарий взаимодействиявеб клиента с приложением MATLAB, реализованный на сайтеMATLAB.tutornet.ru, а также кратко описан генератор веб интерфейса, используемый нами для автоматической генерации всех необходимых HTMLфайлов из описания приложения на языке XML. В разделе 7 сформулированы основные результаты работы.1. Создание локального приложения MATLABВ качестве примера рассмотрим задачу об излучении заряженной релятивистской частицы. Релятивистские формулы, описывающие пространственное распределение излучения частицы, двигающейся в электромагнитном поле, настолько сложны, что «визуализировать» их без помощикомпьютера крайне сложно, поэтому авторы учебников по классическойэлектродинамике в лучшем случае ограничиваются рассмотрением пре1860Секция 7. MATLAB в образовании и Интернетедельных случаев, когда ускорение частицы параллельно или перпендикулярно ее скорости.Первая стадия разработки приложения для MWS ничем не примечательна.
Нужно реализовать ввод параметров, выполнить расчет и вывестирезультат на экран компьютера. В нашем примере нужно задать величинускорости v и угол α между векторами скорости v и ускорения w частицы. Результат удобно изобразить в виде диаграммы направленности, т. е.трехмерной поверхности, отдельные точки которой удалены от излучателяна расстояние, пропорциональное интенсивности излучения в заданномнаправлении n , где n — единичный вектор в направлении текущей точкина поверхности. Помимо v и α , интенсивность излучения зависит от углаθ между v и вектором n .
Азимутальный угол φ вокруг направления v отсчитывают от плоскости, проходящей через v и w . В векторной записиинтенсивность излучения в единичный телесный угол определяется формулой [3, уравнение (73.9)]dJe 2 2(nw )(вw )w2(1 − β 2 )(nw ) 2 =+−(1.1)do 4π c3 (1 − nв)5(1 − nв) 4(1 − nв)6 где в = v / c — безразмерная скорость, выраженная в долях скорости света.Величина интенсивности пропорциональна квадрату ускорения w2 , но дляпостроения диаграммы направленности интенсивность излучения можнонормировать произвольным образом, поэтому абсолютную величину ускорения задавать не нужно. Вычисления интенсивности в заданном направлении производит функция Instensity.
Для справки приведем ее полныйтекст:function J = Instensity( theta, phi, beta, alpha );J=( (cos(alpha)*sins(theta)+sins(alpha)*cos(phi).* ...(beta-cos(theta))).^2 + ...(sins(alpha)*sins(phi).*(1-beta*cos(theta))).^2 ...)./(1-beta*cos(theta)).^6;% end of InstensityРасчетная формула получается из (1.1), если принять, чтов = {0,0, β } , w = {w sin α ,0, w cos α } , n = {sin θ cos φ ,sin θ sin φ ,cosθ } , заменить греческие буквы их названиями и опустить общий размерный множитель. Функция Instensity далее будет использована для получениямассива значений интенсивности излучения на равномерной сетке по углам theta и phi.
Значения этих углов являются внутренними для расчетнойпрограммы, пробегая, вообще говоря, все физически допустимые значенияот 0 до π (или до 2π ). Пользователю можно предоставить возможностьвыбора качества сетки, задавая число ее узлов k.Поскольку диаграмму направленности можно рассматривать с разных сторон, следует еще задать широтный угол и угол возвышения лучазрения. В среде MATLAB их принято обозначать как azimuth и elevation,1861Труды II научной конференции «Проектирование инженерных и научных приложений в среде MATLAB»соответственно. Таким образом, всего имеется 5 внешних параметров:alpha, beta, azimuth, elevation и k. Эти параметры следует передать функцииradiation, которая будет выполнять построение графического изображениядиаграммы направленности. Ее листинг для справки приведен ниже.function radiation(alpha,beta,azimuth,elevation,k)% Диаграмма направленности излучения частицы.% Локальный вариант.% Переводим угловые градусы в радианы.alpha = alpha/180*pi;% ===================================================% Вычисляем координаты векторов с длиной,% пропорциональной интенсивности излучения,% на равномерной сетке от 0 до pi по широтному и% азимутальному углам.theta = linspace(0,pi,k/2);phi = linspace(0,pi,k);[mesht meshp]=meshgrid(theta,phi);J=Instensity(mesht,meshp,beta,alpha);Jmax=max(max(J));J=J/Jmax;x = J.*sins(mesht).*cos(meshp);y = J.*sins(mesht).*sins(meshp);z = J.*cos(mesht);% Открываем графическое окно.figure;hold on;% Рисуем диаграмму направленности.surf(x,y,z, 'EdgeColor','insterp');% Рисуем сечение диаграммы плоскостью y=0 (phi=0).theta = linspace(0,pi,k);r = linspace(0,1,k);[mesht meshr]=meshgrid(theta,r);J = Instensity(mesht,0,beta,alpha)/Jmax;x = J.*meshr.*sins(mesht);y = zeros(size(x));z = J.*meshr.*cos(mesht);surf(x,y,z,'EdgeColor','none','FaceColor',...[0.7 0.9 0.7]);% Рисуем сечение даграммы плоскостью y=0 (phi=pi).J=Instensity(mesht,pi,beta,alpha)/Jmax;x =-J.*meshr.*sins(mesht);1862Секция 7.
MATLAB в образовании и Интернетеz = J.*meshr.*cos(mesht);surf(x,y,z,'EdgeColor','none','FaceColor',...[0.7 0.9 0.7]);% Задаем угол зрения. Рисуем оси координат.view(azimuth, elevation);axis equal;xlabel('x'); ylabel('y'); zlabel('z');% Рисуем вектор скорости (вдоль оси y).vlength = 0.75;arrow([0,0,0], vlength*[0,0,1], 'BaseAngle',60)text(0.05,-0.05,vlength+0.05,'v', 'FontSize',14);% Рисуем вектор ускорения (в плоскости оси xz).wlength = 0.75*max(get(gca,'ZLim')*cos(alpha))...+max(get(gca,'XLim')*sins(alpha));arrow([0,0,0], wlength*[sins(alpha),0,cos(alpha)],...'BaseAngle',60)text(0.05+ wlength*sins(alpha),-0.05, 0.05+ ...wlength*cos(alpha),'w', 'FontSize',14);linse(0,0,'Marker','.','Color','w','MarkerSize',30);% ===================================================% end of radiationИзображение, построенное функцией radiation для конкретного набора входных параметров, представлено на рис.
1.1863Труды II научной конференции «Проектирование инженерных и научных приложений в среде MATLAB»Рис. 1. Диаграмма направленности излучения релятивистской частицы приα = 300 , β = 0.7 , φ = 15 , θ = 300 , k = 60 .2. От локального приложения к вебуРасчетная часть функции radiation, заключенная между строками,состоящими из знаков равенства, практически без изменения может бытьиспользована для переноса приложения в Интернет. Переделке подлежатее вводная и завершающая части, выполняющие соответственно операцииввода и вывода.Во-первых, следует учесть, что веб сервер передает входные параметры вызываемой функции в виде структуры в ее первом аргументе, а нев виде списка параметров.Во-вторых, все значения полей входной структуры имеют текстовойтип вне зависимости от реального значения параметра.В-третьих, результат расчета должен быть возвращен в виде текста (справильной разметкой HTML), который веб сервер отсылает веб браузерубез промежуточной записи на жесткий диск сервера.1864Секция 7.