📄 zhihou.m
字号:
function varargout = zhihou(varargin)%ZHIHOU M-file for zhihou.fig% ZHIHOU, by itself, creates a new ZHIHOU or raises the existing% singleton*.%% H = ZHIHOU returns the handle to a new ZHIHOU or the handle to% the existing singleton*.%% ZHIHOU('Property','Value',...) creates a new ZHIHOU using the% given property value pairs. Unrecognized properties are passed via% varargin to zhihou_OpeningFcn. This calling syntax produces a% warning when there is an existing singleton*.%% ZHIHOU('CALLBACK') and ZHIHOU('CALLBACK',hObject,...) call the% local function named CALLBACK in ZHIHOU.M with the given input% arguments.%% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one% instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help zhihou% Last Modified by GUIDE v2.5 12-Jun-2005 14:25:05% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @zhihou_OpeningFcn, ... 'gui_OutputFcn', @zhihou_OutputFcn, ... 'gui_LayoutFcn', [], ... 'gui_Callback', []);if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1});endif nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else gui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT% --- Executes just before zhihou is made visible.function zhihou_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin unrecognized PropertyName/PropertyValue pairs from the% command line (see VARARGIN)% Choose default command line output for zhihouhandles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes zhihou wait for user response (see UIRESUME)% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.function varargout = zhihou_OutputFcn(hObject, eventdata, handles)% varargout cell array for returning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Get default command line output from handles structurevarargout{1} = handles.output;% --- Executes on button press in zhihou.function zhihou_Callback(hObject, eventdata, handles)% hObject handle to zhihou (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)Val_Selection = get(findobj('Tag','passorzp'),'Value');Val_clooporopen = get(findobj('Tag','clooporopen'),'Value');%--------根据判断建立相应的模型---------switch Val_Selection%----获得传递函数形式的输入 ---------- case 1 Handle_numorzero = findobj( 'Tag','numorzero'); Val_numzero = get(Handle_numorzero,'String'); Val_num = str2num(Val_numzero); Handle_denorp = findobj('Tag','denorp'); Val_denp = get(Handle_denorp,'String'); Val_den = str2num(Val_denp); Handle_kedit = findobj('Tag','kedit'); Val_kedit = get (Handle_kedit,'String'); %Val_k = str2num(Val_kedit); num = Val_num%*Val_k; den = Val_den;%获得零极点形式的输入 case 2 Handle_numorzero = findobj( 'Tag','numorzero'); Val_numzero = get (Handle_numorzero,'String'); Val_zero = str2num(Val_numzero); Handle_denorp = findobj('Tag','denorp'); Val_denorp = get(Handle_denorp,'String'); Val_p = str2num(Val_denorp); Handle_kedit = findobj('Tag','kedit'); Val_kedit = get (Handle_kedit,'String'); Val_k = str2num(Val_kedit); [num,den] = zp2tf(Val_zero,Val_p,Val_k); end%------判断输入模型为开环or闭环并建立相应的模型-------if (Val_clooporopen ==2) [numc,denc] = cloop(num,den); sys = tf(numc,denc); [z,p,k] = tf2zp(numc,denc);else numc = num; denc = den; sys = tf(numc,denc); [z,p,k] = tf2zp(numc,denc);endHandle_edit5 = findobj('Tag','edit5');Val_edit5 = get(Handle_edit5,'string');val5 = str2num(Val_edit5);Handle_edit6 = findobj('Tag','edit6');Val_edit6 = get(Handle_edit6,'string');val6 = str2num(Val_edit6);n1 = length(numc)n2 = length(denc)if denc(n2) ~= 0 k1 = numc(n1)/denc(n2);elseif denc(n2-1) ~=0 k1 = numc(n1)/denc(n2-1);elseif denc(n2-2) ~=0 k1 = numc(n1)/denc(n2-2);endkc=100/val5*k1;w=logspace(-1,2,200);[Mg1,Pg1,w]=bode(kc*numc,denc,w);dpm=0;Pm=0;%先设置最小相位裕量为0while(Pm<val6) Pg=val6-180+dpm;%试寻找频率点,在该点要求开环频率特性的相角 wgc=spline(Pg1,w,Pg);%spline():样条插值 Mg_db=20*log10(Mg1);%Mg1本来是用度表示的,现转换成分贝的形式 gr1=spline(w,Mg_db,wgc); gr=-gr1; alpha=10^(gr/20); T=10/(alpha*wgc); numtwo=[alpha*T,1]*kc; dentwo=[T,1]; Gjz=tf(numtwo,dentwo); [numend,denend]=series(numc,denc,numtwo,dentwo); Gjzhou=tf(numend,denend); [Gm,Pm,Wcg,Wcp]=margin(numend,denend); dpm=dpm+0.1;endfigure(1)hold onbode(Gjzhou,Gjz,sys);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -