UserData задает матрицу, связанную с меню;
/имя матрицы/;
Visible задает виден ли элемент управления на экране;
/on или off/.
Продолжение примера: открытие Checked - меню
solid=uimenu(m_plot,’Label’,’Solid line’,’CallBack’,[‘ltype=’’-‘’;
set(solid,’Checked’,’on’), set(’dotted’, ’Checked’,’off’),
set(’dashed’, ’Checked’,’off’)’]
Открытие переключающегося меню:
toggle=uimenu(tmenu,’Label’,’Теперь On’,’CallBack’,
[‘if strcmp(get(tooggle,’Label’),’Теперь On’),’,
set(tooggle,’Label’),’Теперь Off’),’,’fnoff’,
else set(tooggle,’Label’),’Теперь On’),’,’fnon’, ‘end’]
§6. Использование мыши в пакете MatLab.
fig=figure('Color','k','Name',' Пример');
position=[200 200 75 25];
pb=uicontrol(fig,'Style','Push','String','Ìûøü','Position',position);
wnew_p=['set(fig,''WindowButtonMotionFcn'',['
' ''new_pos=get(fig,''''CurrentPoint'''');'' ',...
' ''position(1)=new_pos(1);'' ',' ''position(2)=new_pos(2);''])'];
curs_p='set(pb,''Pos'',position)';
set(fig,'WindowButtonDownFcn',wnew_p)
set(fig,'WindowButtonUpFcn',['set(fig,''WindowButtonMotionFcn'','' ''),',curs_p])
IV. ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ ПАКЕТА
§1. Решение обыкновенных дифференциальных уравнений.
Решение обыкновенных дифференциальных уравнений, в том числе и нелинейных, производится с помощью функций пакета MatLab ode23 и ode45, в которых реализованы алгоритмы интегрирования системы д.у. методом Рунге-Кутта 2,3 и 4,5 порядков. Обращение к функции имеет следующий вид
[t,y]=ode23('uravn',t0,tk,y0,tol,trace), где t0, tk - начальное и конечное время, y0 - начальные условия, tol - точность, trace - определяет вывод решения, 'uravn' название m-файла, в котором описаны правые части д.у. Функции возвращают вектор времени t и векторы решений по всем координатам y1, y2 ... yn. Например, в файле uravn1.m описаны правые части системы д.у.
.
y1 = y2,
.
y2 = - y2 - y1, соответствующей дифференциальному уравнению
p2 x + px + x = 0.
Файл описания дифференциального уравнения uravn1.m имеет вид:
function yp=uravn1(t,y);
yp = [y(2,:); -y(2,:)-y(1,:)];
Программа решения дифференциального уравнения тогда будет иметь следующий вид:
%Решение обыкновенного дифференциального уравнения
%правые части описаны в файле uravn1.m
clc; t0=0; tk=16; y0=[0 0.25]'; tol=1e-3; trace=1;
[t,y]=ode23('uravn1',t0,tk,y0,tol,trace);
plot(t,y), title('Решение уравнения');
Для решения другого уравнения необходимо заменить лишь файл с правыми частями уравнений. Например для системы дифференциальных уравнений вида
.
y1 = y1(1-y2 )-y22,
.
y2 = y1
файл описания будет выглядеть так
function yp=uravn2(t,y);
yp = [(y(1,:).*(1-y(2,:).^2)-y(2,:)); y(1,:)];
§2. Имитация движения (управление многозвенным роботом-манипулятором).
echo off; clear
%Программа проверки функций для k-звенного робота
%l - массив длин звеньев, q - массив углов,
%nk - массив номеров звеньев для вывода следа
%al, p0, s0 - параметры линии, K - коэффициенты ОС
%yz(k-2) - уставки для избыточных звеньев, vz - уставка по скорости
%nk - массив номеров звеньев для вывода следа
l=[2 2 1 1 1 1 1 1]; q=[120 -70 -30 -30 -20 30 -10 10];
K=[0 -5 -5 -5 -5 -5 -5 -5]; yz=[0.0 0.0 0.0 0.0 0.0 0.0];
ry=[0 0 0 0 0 0]; nk=[8]; vz=1.0; al=30; p0=2; s0=1.6;
t=0; tk=1; h=0.02; xs=0; ys=0; gg=[2 10]; g=1; k=length(l);
K=diag(K); u=zeros(length(l),1);
q=q'*pi/180; al=al*pi/180; M=azvml(l,al);
[k,nk]=azvpodg(l,q,nk,yz); azvldr(l,al,s0);
while (t<tk), q=q+h*u;
%for i=1:k, if abs(q(i))<pi/18/5, q(i)=sign(q(i))*pi/18; end; end;
[y,et]=azvryetl(l,q,al,s0,p0,yz,ry);
[u,et]=azvu(l,q,al,vz,K,et,M,u,ry);
[xg,yg]=azvrysh(l,q);
if g~=gg(1)&g~=gg(2) plot(xs,ys,'i',xs,ys,'*i'); end;
plot(xg,yg,'c13',xg,yg,'*c6'); xs=xg; ys=yg; g=g+1;
[sx,sy]=azvsp(l,nk,xg,yg,sx,sy);
tg=[tg; t]; etg=[etg; et(2:k)']; t=t+h; end;
pause; hold off, axis('normal'), plot(tg,etg);
title('Отклонения концов звеньев');
function azvldr(l,al,s0)
%Рисование линии
m=ceil(sum(l)); x=-m:m/2:m; y=x*tan(al)-s0/cos(al); plot(x,y,'c12');
function M=azvml(l,al)
%Расчет матрицы M для линии
k=length(l); M=[cos(al) sin(al); -sin(al) cos(al)];
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.