Помощь в написании студенческих работ
Антистрессовый сервис

Callback-функции. 
Решение двумерного уравнения колебаний с помощью программной системы Matlab

РефератПомощь в написанииУзнать стоимостьмоей работы

Возникает законный вопрос, зачем же нужно такое текстовое поле, если в нем нет никакого текста? Ответ на этот вопрос заключается в том, что графический элемент управления стиля text можно использовать для нанесения на поверхность графического окна системы Matlab различных элементов оформления, например разграничительных линий. Именно такую вертикальную линию мы и формируем, создавая текстовое… Читать ещё >

Callback-функции. Решение двумерного уравнения колебаний с помощью программной системы Matlab (реферат, курсовая, диплом, контрольная)

Приведем пример m-файла, создающего в графическом окне один объект axes, один список, четыре редактируемых поля для ввода числовой информации и две командные кнопки, не считая нескольких текстовых полей (без возможности редактирования), содержащих подписи, пояснения и разграничительные линии. Текст m-файла приведен в приложении Г.

Отметим, что из семи созданных текстовых полей (без возможности редактирования) шесть применяются в виде поясняющих надписей, расположенных над редактируемыми текстовыми полями ввода, над списком и над объектом axes. Седьмое же текстовое поле (его описатель hTxt6) не содержит никаких надписей, так как мы не задаем явно его свойство String. Оно по умолчанию равно пустой строке.

Возникает законный вопрос, зачем же нужно такое текстовое поле, если в нем нет никакого текста? Ответ на этот вопрос заключается в том, что графический элемент управления стиля text можно использовать для нанесения на поверхность графического окна системы Matlab различных элементов оформления, например разграничительных линий. Именно такую вертикальную линию мы и формируем, создавая текстовое поле с помощью кода.

hTxt6 = uicontrol (hFigl,'Style',' text',…

' BackgroundColor', [0 0 0], …

'Position', [430 5 1 900]);

в котором задаем цвет фона управляющего элемента отличным от цвета фона графического окна (цвет [0 0 0] это черный цвет, а цвет графического окна по умолчанию серый). Кроме того, мы задаем ширину этого элемента в один пиксел.

В результате получается графическое окно, изображенное на рисунке 3.3:

Пример оформления интерфейса.

Рисунок 3.3 Пример оформления интерфейса.

Это окно предназначено для численного решения дифференциального уравнения.

;

;

Callback-функции. Решение двумерного уравнения колебаний с помощью программной системы Matlab.
Callback-функции. Решение двумерного уравнения колебаний с помощью программной системы Matlab.

;

Callback-функции. Решение двумерного уравнения колебаний с помощью программной системы Matlab.

где функция выбирается из списка, расположенного в правом нижнем углу графического окна. Остальные параметры задаются с клавиатуры в редактируемых полях. Кнопка GO предназначена для начала расчетов по методу Эйлера и показа результата в виде графика на поверхности объекта axes. Кнопка CLEAR позволяет очистить объект axes от содержимого.

Callback-функции. Решение двумерного уравнения колебаний с помощью программной системы Matlab.
Callback-функции. Решение двумерного уравнения колебаний с помощью программной системы Matlab.

Как мы видим из рисунка, предусмотрены расчеты со стандартными функциями sin (x) и cos (x), а также с собственными функциями, и. Последние должны быть записаны в m-файлы MyFunct1 .m, MyFunct2 .m, f3.m.

Callback-функции. Решение двумерного уравнения колебаний с помощью программной системы Matlab.

Число N вводится перед расчетами с клавиатуры и определяет шаг интегрирования, который равен.

Callback-функции. Решение двумерного уравнения колебаний с помощью программной системы Matlab.

.

Чтобы запустить программы расчетов, нужно не только написать алгоритмы решения на m-языке и сохранить их тексты в m-файлах, но и связать эти программы с командными кнопками.

Callback-функции. Решение двумерного уравнения колебаний с помощью программной системы Matlab.

Функции, которые связываются с графическими элементами управления, называют callback-функциями (их не вызывают наши m-функции, они вызываются средой Matlab у нас «за спиной», отсюда и происхождение их названия).

Чтобы связать наши командные кнопки с callback-функциями, которые будут вызываться средой Matlab при «нажатии» на эти кнопки, при их создании функцией uicontrol нужно прописать свойство ' Callback', указав ему в качестве значения имя соответствующей m-функции. Эти callback-функции можно также назвать функциями обработки событий, связанных с элементами управления. Это значит, что в представленном m-файле MyFig1 .m необходимо добавить свойства: 'Callback', 'MyGO' - для hBut1 и 'Callback', 'MyCLEAR' - для hBut2.

Внеся указанные выше изменения в файл MyFig1. m, перейдем к написанию функций MyGO и MyCLEAR. Начнем с более простой функции MyCLEAR. Вот текст этой функции:

function MyClear.

global hAxes.

axes (hAxes);

cla.

Ранее мы уже в файле MyFig1 .m обозначили все описатели созданных нами графических объектов как глобальные. Таким образом, у нас имеется очень простой к ним доступ. Все функции, где эти описатели маркированы как глобальные, имеют к ним непосредственный доступ. Именно так все и происходит в функции MyCLEAR (ее мы записываем в файл MyCLEAR. m).

Поясним текст этой функции. Здесь команда cla стирает содержимое текущего (активного) объекта axes. Предварительный вызов функции axes (hAxes) позволяет гарантировать, что будет стерто содержимое именно объекта axes с описателем hAxes, так как такой вызов делает активным объект, описатель которого указан в качестве параметра. У нас в данной конфигурации имеется всего один объект axes, так что этот вызов не является обязательным, но он иллюстрирует решение проблемы в случае нескольких объектов axes.

Теперь займемся функцией MyGO, которая запускается при нажатии кнопки GO. Эта функция опрашивает редактируемые поля, в результате чего инициализируются необходимые для счета переменные, после чего производит вычисление решения дифференциального уравнения в соответствии с простейшим алгоритмом Эйлера:

function MyGo.

global hAxes hEd1 hEd2 hEd3 hEd4 hList.

str1=get (hEd1,'String');

str2=get (hEd2,'String');

str3=get (hEd3,'String');

str4=get (hEd4,'String');

x0 = str2num (str1);

y0 = str2num (str2);

xf = str2num (str3);

N = str2num (str4);

index = get (hList,'Value');

cellArr = get (hList,'String');

funName = cellArr{index};

dx= (xf-x0)/N;

X=x0;

Y=y0;

for k=1:N.

Y=[Y, Y (end)+feval (funName, X (end))*dx];

X=[X, X (end)+dx];

end.

axes (hAxes);

plot (X, Y);

С помощью функций get, указывая им в качестве первого аргумента описатели редактирующих полей, мы получаем значения свойства 'String', то есть текстовое содержимое этих полей, которое вводится пользователем с клавиатуры. Это и есть входные данные. Только пока что числовые данные представлены в строковой (текстовой) форме.

Для получения имени функции, представляющей правую часть дифференциального уравнения, сначала у списка запрашиваем через свойство 'Value' индекс подсвеченной (выбранной) строки, затем читаем значение свойства 'String'. Последнее для списка является массивом ячеек, откуда и выбираем имя функции с помощью операции индексирования массива ячеек фигурными скобками.

Callback-функции. Решение двумерного уравнения колебаний с помощью программной системы Matlab.
Callback-функции. Решение двумерного уравнения колебаний с помощью программной системы Matlab.

С помощью функций str2num преобразовываем текстовые величины в числа. Затем устанавливаем начальные значения для массива значений аргумента и массива значений функции на сетке. Шаг сетки (шаг интегрирования) вычисляется делением длины отрезка интегрирования на количество шагов, которое пользователь вводит с клавиатуры. Наращивание массивов осуществляется операцией конкатенации, в то время как очередное значение функции вычисляется согласно алгоритму метода Эйлера и равно.

Callback-функции. Решение двумерного уравнения колебаний с помощью программной системы Matlab.

feval (funName, X (end)) * dx.

Ключевое слово системы Matlab end в индексирующих выражениях означает ссылку на последний элемент массива, что нам и требуется в данном случае. С помощью функции feval осуществляется вызов функции с именем funName, прочитанным из списка, и ей передается аргумент X (end) (текущее значение независимого аргумента).

В конце осуществляется построение графика вычисленного решения дифференциального уравнения с помощью функции plot. Перед вызовом этой функции с помощью axes (hAxes) гарантируется, что наш объект типа axes является активным, и именно в нем функция plot строит график функции.

Проверим работу приложения для пользовательских функций MyFunct1, MyFunct2 и f3. Текст функции MyFunct1:

function ret = MyFunct1(x).

ret=x3;

записываем в файл MyFunct1 .m.

Текст функции MyFunct2.

function ret = MyFunct2(x).

ret=1/sin (x);

записываем в файл MyFunct2 .m. Текст функции f3.

function ret = f3(х) ret = sin (x * x) ;

записываем в файл f3.m.

Получим решение для данных функций.

Callback-функции. Решение двумерного уравнения колебаний с помощью программной системы Matlab.

sin.

cos.

MyFunct1.

MyFunct2.

Callback-функции. Решение двумерного уравнения колебаний с помощью программной системы Matlab.
Callback-функции. Решение двумерного уравнения колебаний с помощью программной системы Matlab.
Callback-функции. Решение двумерного уравнения колебаний с помощью программной системы Matlab.
Callback-функции. Решение двумерного уравнения колебаний с помощью программной системы Matlab.

f3.

Рисунок 3.4 Пример численного решения дифференциального ура…

Для тестирования программы рассмотрим несколько решений с различными параметрами.

Решение уравнения теплопроводности в различные моменты времени. Результаты приведены в рисунках 4.2 4.4.

Решение при tmax=0.2.

Рисунок 4.2 — Решение при tmax=0.2.

Решение при tmax=0.5.

Рисунок 4.3 — Решение при tmax=0.5.

Решение при tmax=1.

Рисунок 4.4 — Решение при tmax=1.

Из рисунков видно, что с увеличением tmax уменьшается температура в центральной точке стержня.

Рассмотрим, как влияет наличие источника на решение. Результаты приведены в рисунках 4.5 4.7.

Решение при отсутствии источника.

Рисунок 4.5 — Решение при отсутствии источника.

Решение при параметре источника А=1.

Рисунок 4.6 — Решение при параметре источника А=1.

Решение при параметре источника А=2.

Рисунок 4.7 — Решение при параметре источника А=2.

Из рисунков видно, что с увеличением параметра, А увеличивается температура в центральной точке стержня.

Рассмотрим, как влияют начальные условия на решение. Результаты приведены в рисунках 4.8 4.9.

Решение при отсутствии начальных условий.

Рисунок 4.8 — Решение при отсутствии начальных условий.

Решение при параметрах C=1 и D=0 в начальных условиях.

Рисунок 4.9 — Решение при параметрах C=1 и D=0 в начальных условиях.

Рассмотрим, как влияет тип уравнения на решение. Результаты приведены в рисунках 4.10 4.12.

Решение при m=0.

Рисунок 4.10 — Решение при m=0.

Решение при m=1.

Рисунок 4.11 — Решение при m=1.

Решение при m=2.

Рисунок 4.12 — Решение при m=2.

Показать весь текст
Заполнить форму текущей работой