📄 cvpowerprocessor.m
字号:
function varargout = CVPowerProcessor(varargin)% CVPOWERPROCESSOR Application M-file for CVPowerProcessor.fig% FIG = CVPOWERPROCESSOR launch CVPowerProcessor GUI.% CVPOWERPROCESSOR('callback_name', ...) invoke the named callback.% Last Modified by GUIDE v2.0 20-Sep-2003 12:07:47if nargin == 0 % LAUNCH GUI fig = openfig(mfilename,'reuse'); % Generate a structure of handles to pass to callbacks, and store it. handles = guihandles(fig); guidata(fig, handles); if nargout > 0 varargout{1} = fig; endelseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK try if (nargout) [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard else feval(varargin{:}); % FEVAL switchyard end catch disp(lasterr); endend%| ABOUT CALLBACKS:%| GUIDE automatically appends subfunction prototypes to this file, and %| sets objects' callback properties to call them through the FEVAL %| switchyard above. This comment describes that mechanism.%|%| Each callback subfunction declaration has the following form:%| <SUBFUNCTION_NAME>(H, EVENTDATA, HANDLES, VARARGIN)%|%| The subfunction name is composed using the object's Tag and the %| callback type separated by '_', e.g. 'slider2_Callback',%| 'figure1_CloseRequestFcn', 'axis1_ButtondownFcn'.%|%| H is the callback object's handle (obtained using GCBO).%|%| EVENTDATA is empty, but reserved for future use.%|%| HANDLES is a structure containing handles of components in GUI using%| tags as fieldnames, e.g. handles.figure1, handles.slider2. This%| structure is created at GUI startup using GUIHANDLES and stored in%| the figure's application data using GUIDATA. A copy of the structure%| is passed to each callback. You can store additional information in%| this structure at GUI startup, and you can change the structure%| during callbacks. Call guidata(h, handles) after changing your%| copy to replace the stored original so that subsequent callbacks see%| the updates. Type "help guihandles" and "help guidata" for more%| information.%|%| VARARGIN contains any extra arguments you have passed to the%| callback. Specify the extra arguments by editing the callback%| property in the inspector. By default, GUIDE sets the property to:%| <MFILENAME>('<SUBFUNCTION_NAME>', gcbo, [], guidata(gcbo))%| Add any extra arguments after the last argument, before the final%| closing parenthesis.% --------------------------------------------------------------------% function varargout = pushbutton1_Callback(h, eventdata, handles, varargin)% --------------------------------------------------------------------function varargout = pushbutton2_Callback(h, eventdata, handles, varargin)global nmin nmax ne Ttq n Tq Pe m1 m2 m r nt f CD A If Iwf Iwr Iw i0 ig Uastar Uaend... get1 get2 ignum coeff... Tqmax Pemax Uamax Ftmax1 amax1 imax1 Dmax1 t_accele h=waitbar(0,'calculation is running,please wait...'); for ii=1:20 Ua=zeros(ignum,size(n,2)); Ft=zeros(ignum,size(n,2)); for k1=1:ignum Ua(k1,:)=0.377*r*n/(i0*ig(k1)); end Ua=Ua'; Ft=i0*nt*ig'*Tq/r; Ft=Ft'; Ff=m*9.8*f*ones(size(Ua)); Fw=CD*A*Ua.^2/21.15; F=Ff+Fw; deta=1+Iw/(m*r^2)+If*i0^2*nt*ig.^2/(m*r^2); Fa=(Ft-Ff-Fw)/m; for l1=1:ignum a(:,l1)=Fa(:,l1)/deta(l1); end i=tan(asin((Ft-F)/(m*9.8)))*100; D=(Ft-Fw)/(m*9.8); Pf=F.*Ua/(nt*3600); assignin('base','Ua',Ua); assignin('base','Ft',Ft); assignin('base','Ff',Ff); assignin('base','Fw',Fw); assignin('base','a',a); assignin('base','i',i); assignin('base','D',D); assignin('base','Pf',Pf);if get1==1&get2==0 tTq=inline('-(-19.313+295.27.*n/1000-165.44.*(n/1000).^2+40.874.*(n/1000).^3-3.8445.*(n/1000).^4)'); [nTqmax,Tqmax]=fminbnd(tTq,min(n),max(n)); pPe=inline('-(-19.313+295.27.*n/1000-165.44.*(n/1000).^2+40.874.*(n/1000).^3-3.8445.*(n/1000).^4).*n/9550'); [nPemax,Pemax]=fminbnd(pPe,min(n),max(n)); igmax=ig(ignum); FUamax=inline('(-19.313+295.27.*n/1000-165.44.*(n/1000).^2+40.874.*(n/1000).^3-3.8445.*(n/1000).^4)*igmax*i0*nt/r-CD*A*(0.377*r*n/(igmax*i0))^2/21.15-m*9.8*f'... ,'n','igmax','i0','nt','r','CD','A','m','f'); [nUamax,F0,exitflag]=fzero(FUamax,nPemax,[],igmax,i0,nt,r,CD,A,m,f); if exitflag<0 | nUamax>max(n) nUamax=nPemax; end Uamax=0.377*r*nUamax/(ig(ignum)*i0); igmin=ig(1); fFtmax=inline('-(-19.313+295.27.*n/1000-165.44.*(n/1000).^2+40.874.*(n/1000).^3-3.8445.*(n/1000).^4)*igmin*i0*nt/r','n','igmin','i0','nt','r'); [UaFtmax1,Ftmax1]=fminbnd(fFtmax,min(n),max(n),[],igmin,i0,nt,r); namax=inline('-(((-19.313+295.27.*(n/1000)-165.44.*(n/1000).^2+40.874.*(n/1000).^3-3.8445.*(n/1000).^4)*igmin*i0*nt/r-CD*A*(0.377*r*n/(igmin*i0))^2/21.15-m*9.8*f)/m/(1+Iw/(m*r^2)+If*i0^2*nt*igmin^2/(m*r^2)))'... ,'n','igmin','i0','nt','r','CD','A','m','f','Iw','If'); [Uaamax1,amax1]=fminbnd(namax,min(n),max(n),[],igmin,i0,nt,r,CD,A,m,f,Iw,If); nimax=inline('-(tan(asin(((-19.313+295.27.*(n/1000)-165.44.*(n/1000).^2+40.874.*(n/1000).^3-3.8445.*(n/1000).^4)*igmin*i0*nt/r-CD*A*(0.377*r*n/(igmin*i0))^2/21.15-m*9.8*f)/(m*9.8)))*100)'... ,'n','igmin','i0','nt','r','CD','A','m','f'); [Uaimax1,imax1]=fminbnd(nimax,min(n),max(n),[],igmin,i0,nt,r,CD,A,m,f); nDmax=inline('-(((-19.313+295.27.*(n/1000)-165.44.*(n/1000).^2+40.874.*(n/1000).^3-3.8445.*(n/1000).^4)*igmin*i0*nt/r-CD*A*(0.377*r*n/(igmin*i0))^2/21.15)/(m*9.8))'... ,'n','igmin','i0','nt','r','CD','A','m'); [UaDmax1,Dmax1]=fminbnd(nDmax,min(n),max(n),[],igmin,i0,nt,r,CD,A,m);else if get1==0&get2==1 tTq=inline('-polyval(coeff,n)','n','coeff'); [nTqmax,Tqmax]=fminbnd(tTq,min(n),max(n),[],coeff); pPe=inline('-polyval(coeff,n).*n/9550','n','coeff'); [nPemax,Pemax]=fminbnd(pPe,min(n),max(n),[],coeff); igmax=ig(ignum); FUamax=inline('polyval(coeff,n)*igmax*i0*nt/r-CD*A*(0.377*r*n/(igmax*i0))^2/21.15-m*9.8*f'... ,'n','coeff','igmax','i0','nt','r','CD','A','m','f'); [nUamax,F0,exitflag]=fzero(FUamax,nPemax,[],coeff,igmax,i0,nt,r,CD,A,m,f); if exitflag<0 | nUamax>max(n) nUamax=nPemax; end Uamax=0.377*r*nUamax/(ig(ignum)*i0); igmin=ig(1); fFtmax=inline('-polyval(coeff,n)*igmin*i0*nt/r','n','coeff','igmin','i0','nt','r'); [UaFtmax1,Ftmax1]=fminbnd(fFtmax,min(n),max(n),[],coeff,igmin,i0,nt,r); namax=inline('-((polyval(coeff,n)*igmin*i0*nt/r-CD*A*(0.377*r*n/(igmin*i0))^2/21.15-m*9.8*f)/m/(1+Iw/(m*r^2)+If*i0^2*nt*igmin^2/(m*r^2)))'... ,'n','coeff','igmin','i0','nt','r','CD','A','m','f','Iw','If'); [Uaamax1,amax1]=fminbnd(namax,min(n),max(n),[],coeff,igmin,i0,nt,r,CD,A,m,f,Iw,If); nimax=inline('-(tan(asin((polyval(coeff,n)*igmin*i0*nt/r-CD*A*(0.377*r*n/(igmin*i0))^2/21.15-m*9.8*f)/(m*9.8)))*100)'... ,'n','coeff','igmin','i0','nt','r','CD','A','m','f'); [Uaimax1,imax1]=fminbnd(nimax,min(n),max(n),[],coeff,igmin,i0,nt,r,CD,A,m,f); nDmax=inline('-((polyval(coeff,n)*igmin*i0*nt/r-CD*A*(0.377*r*n/(igmin*i0))^2/21.15)/(m*9.8))'... ,'n','coeff','igmin','i0','nt','r','CD','A','m'); [UaDmax1,Dmax1]=fminbnd(nDmax,min(n),max(n),[],coeff,igmin,i0,nt,r,CD,A,m); endendwaitbar(ii/20);endclose(h);Uaj=ones(ignum,5);for k1=1:ignum Ua=0.377*r*n/(ig(k1)*i0); Ft=Tq*ig(k1)*i0*nt/r; Ff=m*9.8*f; Fw=CD*A*Ua.^2/21.15; F=Ff+Fw; deta=1+Iw/(m*r^2)+If*i0^2*nt*ig(k1).^2/(m*r^2); Fa=(Ft-Ff-Fw)/m; jj=deta./Fa; j=jj(find(jj>0&jj<30)); Ua1=Ua(find(jj>0&jj<30)); Uaj(k1,:)=polyfit(Ua1,j,4);endif get1==1&get2==0 pPe=inline('-(-19.313+295.27.*n/1000-165.44.*(n/1000).^2+40.874.*(n/1000).^3-3.8445.*(n/1000).^4).*n/9550'); [nPemax,Pemax]=fminbnd(pPe,min(n),max(n));else if get1==0&get2==1 pPe=inline('-polyval(coeff,n).*n/9550','n','coeff'); [nPemax,Pemax]=fminbnd(pPe,min(n),max(n),[],coeff); endend Ua1j=inline('polyval(Uaj1,Ua1)-polyval(Uaj2,Ua1)','Ua1','Uaj1','Uaj2'); for k2=1:ignum-1 Ua=0.377*r*n/(ig(k2)*i0); Ua1=0.377*r*nPemax/(ig(k2)*i0); [Uajj(k2),F02,exitflag2]=fzero(Ua1j,Ua1,[],Uaj(k2,1:5),Uaj(k2+1,1:5)); if exitflag2<0 | Uajj(k2)>max(Ua) | Uajj(k2)<min(Ua) Uajj(k2)=Ua1; end end jjj=inline('polyval(Uaj,Ua)','Ua','Uaj'); t=0; Uastar1=Uastar; if Uamax<Uaend errordlg('Data is wrong. Uaend is beyond maximal vehicle speed, please chang the Uaend','Warning'); else if Uastar>Uaend errordlg('Data is wrong. Uastar is beyond Uaend, please check the data','Warning'); else for k3=1:ignum-1 if Uajj(k3)<Uaend Uadown=Uajj(k3); else Uadown=Uaend; end tt=quadl(jjj,Uastar1,Uadown,1e-6,0,Uaj(k3,:))/3.6; t=t+tt; Uastar1=Uadown; end end endwarning off;t_accele=t;nmin=min(n);nmax=max(n);assignin('base','nmin',nmin);assignin('base','nmax',nmax);assignin('base','ninPemax',nPemax);assignin('base','ninUamax',nUamax);assignin('base','Tqmax',-Tqmax);assignin('base','Pemax',-Pemax);assignin('base','Uamax',Uamax);assignin('base','Ftmax',-Ftmax1);assignin('base','amax',-amax1);assignin('base','imax',-imax1);assignin('base','Dmax',-Dmax1);assignin('base','t_accele',t_accele);set(handles.text4,'string',num2str(nmin));set(handles.text8,'string',num2str(nmax));set(handles.text12,'string',num2str(-Tqmax));set(handles.text16,'string',num2str(-Pemax));set(handles.text20,'string',num2str(Uamax));set(handles.text24,'string',num2str(-Ftmax1));set(handles.text28,'string',num2str(-amax1));set(handles.text32,'string',num2str(-imax1));set(handles.text36,'string',num2str(-Dmax1));set(handles.text39,'string',num2str(t_accele));% --------------------------------------------------------------------function varargout = pushbutton3_Callback(h, eventdata, handles, varargin)close CVPowerProcessor;CVPowerEdit;% --------------------------------------------------------------------function varargout = pushbutton4_Callback(h, eventdata, handles, varargin)global nmin nmax Tqmax Pemax Uamax Ftmax1 amax1 imax1 Dmax1 t_accele Uastar Uaend[name,path]=uiputfile('untitled.m','Save Result');name=[name,''];fid=fopen([path,name],'wt');fprintf(fid,'nmin=');fprintf(fid,'%10.4f',nmin);fprintf(fid,'; %% 发动机最低转速(r/min)\n');fprintf(fid,'nmax=');fprintf(fid,'%10.4f',nmax);fprintf(fid,'; %% 发动机最高转速(r/min)\n');fprintf(fid,'Tqmax=');fprintf(fid,'%8.4f',-Tqmax);fprintf(fid,'; %% 发动机最大转矩(N*m)\n');fprintf(fid,'Pemax=');fprintf(fid,'%8.4f',-Pemax);fprintf(fid,'; %% 发动机最大功率(kw)\n');fprintf(fid,'Uamax=');fprintf(fid,'%8.4f',Uamax);fprintf(fid,'; %% 汽车最高车速(km/h)\n');fprintf(fid,'Ftmax=');fprintf(fid,'%11.4f',-Ftmax1);fprintf(fid,'; %% 汽车最大驱动力(N)\n');fprintf(fid,'amax=');fprintf(fid,'%7.4f',-amax1);fprintf(fid,'; %% 汽车最大加速度(m/s^2)\n');fprintf(fid,'imax=');fprintf(fid,'%8.4f',-imax1);fprintf(fid,'; %% 汽车最大爬坡度(%)\n');fprintf(fid,'Dmax=');fprintf(fid,'%6.4f',-Dmax1);fprintf(fid,'; %% 汽车最大动力因数\n');fprintf(fid,'t_accele=');fprintf(fid,'%8.4f',t_accele);fprintf(fid,'; %% 汽车加速时间(s)(');fprintf(fid,'%8.4f',Uastar);fprintf(fid,'km/h-');fprintf(fid,'%8.4f',Uaend);fprintf(fid,'km/h)\n');fclose(fid);% --------------------------------------------------------------------function varargout = pushbutton5_Callback(h, eventdata, handles, varargin)close CVPowerProcessor;% --------------------------------------------------------------------function varargout = popupmenu1_Callback(h, eventdata, handles, varargin)global nmin nmax ne Ttq n Tq Pe m1 m2 m r nt f CD A If Iwf Iwr Iw i0 ig... get1 get2 ignum coeff... Tqmax Pemax Uamax Ftmax1 amax1 imax1 Dmax1v=get(handles.figure,'Value');axes(handles.axes);switch vcase 1, if get1==1&get2==0 plot(n,Tq,'r') tTq=inline('-(-19.313+295.27.*n/1000-165.44.*(n/1000).^2+40.874.*(n/1000).^3-3.8445.*(n/1000).^4)'); [nTqmax,Tqmax]=fminbnd(tTq,min(n),max(n)); text(nTqmax,-Tqmax,['Tq_{max}=',num2str(-Tqmax),'N*m'],'Fontsize',8) hold on plot(n,Pe,'b') pPe=inline('-(-19.313+295.27.*n/1000-165.44.*(n/1000).^2+40.874.*(n/1000).^3-3.8445.*(n/1000).^4).*n/9550'); [nPemax,Pemax]=fminbnd(pPe,min(n),max(n)); text(nPemax,-Pemax,['Pe_{max}=',num2str(-Pemax),'kw'],'Fontsize',8) title('发动机外特性中功率与转矩曲线','FontWeight','bold','Fontsize',10) xlabel('n(r/min)','Fontsize',10) axis([min(n)-200 max(n)+1000 0 -Tqmax+20]) hold off else if get1==0&get2==1 plot(n,Tq,'r') tTq=inline('-polyval(coeff,n)','n','coeff'); [nTqmax,Tqmax]=fminbnd(tTq,min(n),max(n),[],coeff); text(nTqmax,-Tqmax,['Tq_{max}=',num2str(-Tqmax),'N*m'],'Fontsize',8) hold on plot(n,Pe,'b') pPe=inline('-polyval(coeff,n).*n/9550','n','coeff'); [nPemax,Pemax]=fminbnd(pPe,min(n),max(n),[],coeff); text(nPemax,-Pemax,['Pe_{max}=',num2str(-Pemax),'kw'],'Fontsize',8) title('发动机外特性中功率与转矩曲线','FontWeight','bold','Fontsize',10) xlabel('n(r/min)','Fontsize',10) axis([min(n)-200 max(n)+1000 0 -Tqmax+20]) hold off end end case 2, if get1==1&get2==0 for k=1:ignum Ua=0.377*r*n/(ig(k)*i0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -