📄 funtool.m
字号:
blanks = ' ';
set(findobj(figp,'tag','Sf'),'string',[blanks char(f)]);
%%%%%%%%%%%%%%%%%%%%%%%%%% Callback for second row of unary operators.
case 'row2'
figp = findobj(0,'tag','figp');
fhndl = findobj(figp,'tag','fobj');
f = get(fhndl,'UserData');
x = get(findobj(figp,'tag','xstr'),'UserData');
a = get(findobj(figp,'tag','aobj'),'UserData');
figf = findobj(0,'tag','figf');
switch varargin{1}
case 'f+a'
f = f+a;
case 'f-a'
f = f-a;
case 'f*a'
f = f*a;
case 'f/a'
f = f/a;
case 'f^a'
f = f^a;
case 'f(x+a)'
f = subs(f,sym('x'),sym('x')+a);
case 'f(x*a)', ...
f = subs(f,sym('x'),sym('x')*a);
end
set(fhndl,'UserData',f);
ezplot(f,x,figf)
blanks = ' ';
set(findobj(figp,'tag','Sf'),'string',[blanks char(f)]);
%%%%%%%%%%%%%%%%%%%%%%%%%% Callback for third row, binary operators.
case 'row3'
blanks = ' ';
% Get variables.
figp = findobj(0,'tag','figp');
fhndl = findobj(figp,'tag','fobj');
ghndl = findobj(figp,'tag','gobj');
f = get(fhndl,'UserData');
g = get(ghndl,'UserData');
x = get(findobj(figp,'tag','xstr'),'UserData');
a = get(findobj(figp,'tag','aobj'),'UserData');
figf = findobj(0,'tag','figf');
figg = findobj(0,'tag','figg');
if strcmp(varargin{1}, 'g=f')
g = f;
set(ghndl,'UserData',g);
ezplot(g,x,figg)
set(findobj(figp,'tag','Sg'),'string',[blanks char(g)]);
elseif strcmp(varargin{1}, 'swap')
h = f; f = g; g = h;
set(fhndl,'UserData',f);
ezplot(f,x,figf)
set(findobj(figp,'tag','Sf'),'string',[blanks char(f)]);
set(ghndl,'UserData',g);
ezplot(g,x,figg)
set(findobj(figp,'tag','Sg'),'string',[blanks char(g)]);
else
switch varargin{1}
case 'f+g'
f = f+g;
case 'f-g'
f = f-g;
case 'f*g'
f = f*g;
case 'f/g'
f = f/g;
case 'f(g)'
f = compose(f,g);
end
set(fhndl,'UserData',f);
ezplot(f,x,figf)
set(findobj(figp,'tag','Sf'),'string',[blanks char(f)]);
end
%%%%%%%%%%%%%%%%%%%%%%%%%% Callback for F's edit text box.
case 'Sfcallback'
figp = findobj(0,'tag','figp');
f = sym(get(gco,'string'));
fhndl = findobj(figp,'tag','fobj');
set(fhndl,'UserData',f);
x = get(findobj(figp,'tag','xstr'),'UserData');
figf = findobj(0,'tag','figf');
ezplot(f,x,figf)
%%%%%%%%%%%%%%%%%%%%%%%%%% Callback for G's edit text box.
case 'Sgcallback'
figp = findobj(0,'tag','figp');
g = sym(get(gco,'string'));
ghndl = findobj(figp,'tag','gobj');
set(ghndl,'UserData',g);
x = get(findobj(figp,'tag','xstr'),'UserData');
figg = findobj(0,'tag','figg');
ezplot(g,x,figg)
%%%%%%%%%%%%%%%%%%%%%%%%%% Callback for A's edit text box.
case 'Sacallback'
a = sym(get(gco,'String'));
set(findobj(gcf,'tag','aobj'),'UserData',a);
%%%%%%%%%%%%%%%%%%%%%%%%%% Callback for X's edit text box.
case 'Sxcallback'
figp = findobj(0,'tag','figp');
x = get(gco,'String');
% add brackets if needed
if isempty(x=='['),
x = ['[' x ']'];
blanks = ' ';
set(gco,'string',[blanks x]),
end;
set(findobj(figp,'tag','xstr'),'UserData',x);
fhndl = findobj(figp,'tag','fobj');
ghndl = findobj(figp,'tag','gobj');
f = get(fhndl,'UserData');
g = get(ghndl,'UserData');
a = get(findobj(figp,'tag','aobj'),'UserData');
figf = findobj(0,'tag','figf');
figg = findobj(0,'tag','figg');
ezplot(f,x,figf)
ezplot(g,x,figg)
%%%%%%%%%%%%%%%%%%%%%%%%%% Callback for Insert button.
case 'Insert'
f = get(findobj(gcf,'tag','fobj'),'UserData');
x = get(findobj(gcf,'tag','xstr'),'UserData');
fxlist = get(gcf,'UserData');
fxlist = str2mat(fxlist,[char(f) '; ' x]);
set(gcf,'UserData',fxlist);
%%%%%%%%%%%%%%%%%%%%%%%%%% Callback for Cycle button.
case 'Cycle'
% Get variables.
figp = gcf;
figf = findobj(0,'tag','figf');
fxlist = get(figp,'UserData');
fx = fxlist(1,:);
fx(find(fx==' ')) = [];
k = find(fx == ';');
fstr = fx(1:k-1); f = sym(fstr);
set(findobj(figp,'tag','fobj'),'UserData',f);
x = fx(k+1:length(fx));
set(findobj(figp,'tag','xstr'),'UserData',x);
blanks = ' ';
set(findobj(figp,'tag','Sx'),'string',[blanks x]);
set(findobj(figp,'tag','Sf'),'string',[blanks fstr]);
ezplot(f,x,figf);
k = [2:size(fxlist,1),1];
fxlist = fxlist(k,:);
set(figp,'UserData',fxlist);
%%%%%%%%%%%%%%%%%%%%%%%%%% Callback for Delete button.
case 'Delete'
% Get variables.
figp = gcf;
f = get(findobj(figp,'tag','fobj'),'UserData');
x = get(findobj(figp,'tag','xstr'),'UserData');
fxlist = get(figp,'UserData');
fx = [char(f) ';' x];
fx(find(fx==' ')) = [];
for k = 1:size(fxlist,1),
element = fxlist(k,:);
element(find(element==' ')) = [];
if strcmp(fx,element)
fxlist(k,:) = [];
break
end
end;
if isempty(fxlist), fxlist = '0-0; [0,1]'; end
set(figp,'UserData',fxlist);
%%%%%%%%%%%%%%%%%%%%%%%%%% Callback for Reset button.
case 'Reset'
blanks = ' ';
% Get variables.
figp = gcf;
figf = findobj(0,'tag','figf');
figg = findobj(0,'tag','figg');
init = get(findobj(figp,'tag','reset'),'UserData');
set(findobj(figp,'tag','fobj'),'UserData',sym(init.f));
set(findobj(figp,'tag','Sf'),'String',[blanks init.f]);
ezplot(sym(init.f),init.x,figf);
set(findobj(figp,'tag','gobj'),'UserData',sym(init.g));
set(findobj(figp,'tag','Sg'),'String',[blanks init.g]);
ezplot(sym(init.g),init.x,figg);
set(findobj(figp,'tag','xstr'),'UserData',init.x);
set(findobj(figp,'tag','Sx'),'string',[blanks init.x]);
set(findobj(figp,'tag','aobj'),'UserData',sym(init.a));
set(findobj(figp,'tag','Sa'),'string',[blanks init.a]);
set(figp,'UserData',init.l);
% Reset all buttons to default bkgd color.
set(findobj(figp,'Style','pushbutton'),'BackgroundColor','default');
%%%%%%%%%%%%%%%%%%%%%%%%%% Callback for Close button.
case 'close'
close(findobj(0,'tag','figf'));
close(findobj(0,'tag','figg'));
close(findobj(0,'tag','figp'));
%%%%%%%%%%%%%%%%%%%%%%%%%% Callback for Demo button.
case 'Demo'
% "B" is the vector of button handles in the control panel.
% "prog" is a "program" consisting of button codes.
prog = {'Reset','f/a','int f','f + g','1/f', ...
'int f','finv','int f','df/dx','num f'};
B = findobj(gcf,'Style','pushbutton');
for k = 1: length(prog)
currB = findobj(B,'String',prog{k});
set(currB,'BackgroundColor','white');
eval(get(currB,'Callback'));
pause(1)
set(currB,'BackgroundColor','default');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end % switch statement for callbacks
end % end of FUNTOOL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -