⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cvpowerprocessor.m

📁 汽车动力学分析程序。车辆、航空和能动工程方面的通知可以参考
💻 M
📖 第 1 页 / 共 2 页
字号:
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 + -