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

📄 dfield7.m

📁 matlab of linear system
💻 M
📖 第 1 页 / 共 5 页
字号:
	  end	  pstring{kk} = [pname{kk},' = ', tp1str];	end      end            % Get ready to do some error trapping.            SS = warning;      warning off      XxXxXx = WINvect(1) + rand*(WINvect(2)-WINvect(1));      TtTtTt = WINvect(3) + rand*(WINvect(4)-WINvect(3));      err = 0;            % Now we remove the backslashes (\) used to get Greek into the      % labels.       txname = Xname;      ttname = Tname;         derivstr(find(abs(derivstr)==92))=[];      Xname(find(abs(Xname)==92))=[];      Tname(find(abs(Tname)==92))=[];            eval([Xname,'=XxXxXx;'],'err = 1;');      if err	errmsg = ['"',xstr, '" is not a valid variable name in MATLAB.'];	fprintf('\a')	errordlg(errmsg,'dfield7 error','on');	warning(SS)	return      end      err = 0;      eval([Tname,'=TtTtTt;'],'err = 1;');      if err	errmsg = ['"',tstr, '" is not a valid variable name in MATLAB.'];	fprintf('\a')	errordlg(errmsg,'dfield7 error','on');	warning(SS)	return      end                  % Replace the parameters/expressions with their values.            pflag = zeros(1,4);      perr = [];      pnameh = sud.h.pname;      pvalh = sud.h.pval;      for kk = 1:4;	pn = char(get(pnameh(kk),'string'));	pn(find(abs(pn)==92))=[];	pv = char(get(pvalh(kk),'string'));	if ~isempty(pn)	  if isempty(pv) 	    perr = pvalh(kk);	  else 	    if isempty(str2num(pv)) % This is an expression.	      tpv = pv;	      tpv(find(abs(tpv)==92))=[];	      err = 0; pval = '';	      eval(['pval = ',tpv,';'],'err=1;');   %pval;	      if (err | isempty(pval))		errmsg = ['The expression for ',pn,' is not valid.'];		fprintf('\a')		errordlg(errmsg,'dfield7 error','on');		warning(SS)		return	      end	    end	    xderivstr = dfield7('paraeval',pn,pv,derivstr);	    if ~strcmp(xderivstr,derivstr)	      pflag(kk) = 1;	      derivstr = xderivstr;	    end	  end	end      end            % We have to make the derivative strings array smart.            l = length(derivstr);      for (k=fliplr(find((derivstr=='^')|(derivstr=='*')|(derivstr=='/'))))	derivstr = [derivstr(1:k-1) '.' derivstr(k:l)];	l = l+1;      end            % Some more error trapping.            eval(['res = ',derivstr, ';'],'err = 1;');      if err | isempty(res)	if isempty(perr)          errmsg = ['The differential equation ',...		    'is not entered correctly.'];	else          errstr1 = 'The differential equation does not evaluate correctly.';          errstr2 = 'At least one of the parameter values is not a number.';          errmsg = str2mat(errstr1,errstr2);          set(perr,'string','?');	end	fprintf('\a')	errordlg(errmsg,'dfield7 error','on');	dfield7('restart');	warning(SS);	return      end      warning(SS);            % Build a new derivative m-file.            tee = clock;      tee = ceil(tee(6)*100);      dfcn=['dftp',num2str(tee)];      fcnstr = ['function YYyYypr = ',dfcn,'(TtTt,YyYy)\n\n'];      commstr = '%%%% Created by dfield7\n\n';      varstr = [Xname,' = YyYy;', Tname,' = TtTt;\n\n'];      lenstr = ['l = length(YyYy);\n'];      derstr1 = ['YYyYypr = ', derivstr,';\n'];      derstr2 = ['if (length(YYyYypr) < l) YYyYypr = YYyYypr*ones(1,l);end\n'];            dff = fopen([tempdir,dfcn,'.m'],'w');      fprintf(dff,fcnstr);      fprintf(dff,commstr);      fprintf(dff,varstr);      fprintf(dff,lenstr);      fprintf(dff,derstr1);      fprintf(dff,derstr2);      fclose(dff);                  % Find dfield7 Display if it exists.	      % If dfield7 Display exists, update it.  If it does not build it.            dfdisp = findobj('name','dfield7 Display');      if (~isempty(dfdisp))	figure(dfdisp);	dud = get(dfdisp,'user');	dud.syst = sud.c;	dud.settings = sud.settings;	dfcnn = dud.function;	  if exist(dfcnn) == 2	    delete([tempdir,dfcnn,'.m'])	  end	        else	dfdisp = figure('name','dfield7 Display',...			'numb','off','interrupt','on',...			'visible','off','tag','dfield7');	dfield7('figdefault',dfdisp);	dud = get(dfdisp,'user');		dud.syst = sud.c;	dud.settings = sud.settings;	fs = dud.fontsize;	ssize = dud.ssize;	r = ssize/10;	dfaxw = 437*1.2;	% Default axes width	dfaxh = 315*1.2;	% Default axes height	dfaxl = 45*1.2;	% Default axes left	buttw = 40*1.2;     % Default button width	uni = get(0,'units');	set(0,'units','pixels');	ss = get(0,'screensize');	style = sud.style;	set(0,'units',uni);		nframeh = 70;   % Default notice frame height	dfaxb = 4+nframeh+35;		titleh = 30;	bottomedge = 38;	dfdh = dfaxh + nframeh + titleh + bottomedge;		sw = ss(3);sh = ss(4);	bottom = 20;			if r*dfdh > sh - bottom -35;	  r = (sh-bottom-35)/dfdh;	  fs = 10*r;	  lw = 0.5*r;	  set(gcf,'defaultaxesfontsize',fs,'defaultaxeslinewidth',lw);	  set(gcf,'defaulttextfontsize',fs);	  set(gcf,'defaultlinelinewidth',lw);	  set(gcf,'defaultuicontrolfontsize',fs*0.9);	end		% Set up the bulletin window.		nframe = uicontrol('style','frame','visible','on');	nstr = {'More';'than';'five';'lines';'of text'};	dud.notice = uicontrol('style','text',...			       'horiz','left',...			       'string',nstr,'visible','on');	ext = get(dud.notice,'extent');	nframeh = ext(4)+2;		titleh = r*titleh;	dfaxl = r*dfaxl;	buttw = r*buttw;	butth = fs+20*r;		dfaxw = r*dfaxw;	dfaxh = r*dfaxh;	dfaxb = nframeh+r*bottomedge;	buttl = dfaxl + dfaxw + 5;	buttsep = (dfaxh - butth)/2;		% Set up the coordinate display		cstr = '(0.9999, 0,9999)';	dud.ccwind = uicontrol('style','text',...			       'horiz','left',...			       'string',cstr,...			       'visible','on');	cext = get(dud.ccwind,'extent');	ccwindtxt = uicontrol('style','text',...			      'horiz','left',...			      'string','Cursor position: ',...			      'visible','on');	cwh = cext(4);	cww = cext(3);		% Set up the plot axes.		dud.axes = axes('units','pix',...			'position',[dfaxl,dfaxb,dfaxw,dfaxh],...			'next','add',...			'box','on',...			'interrupt','on',...			'xgrid','on',...			'ygrid','on',...			'drawmode','fast',...			'visible','off',...			'tag','display axes');		% Finish the positions.		dfdw = buttl + buttw +5;	dfdh = dfaxb+dfaxh+titleh;	set(nframe,'pos',[10,1,dfdw-20,nframeh]);	set(dud.notice,'pos',[15,1,dfdw-30,nframeh-2],...		       'string',{' ';' ';' ';' ';' '});		ctext = get(ccwindtxt,'extent');	cc1pos = [dfaxl,2+nframeh,ctext(3),cwh];	cc2pos = [dfaxl+ctext(3),2+nframeh,cww,cwh];	set(ccwindtxt,'pos',cc1pos);	set(dud.ccwind,'pos',cc2pos,...		       'string','');	dfdleft = max((sw-dfdw)/2,sw-dfdw-60);	dfdbot = sh - dfdh - 70;	dfdpos = [dfdleft,dfdbot,dfdw,dfdh];	set(dfdisp,'resize','on');	set(dfdisp,'pos',dfdpos);		Arrflag = sud.fieldtype;		% Set up the buttons and the menu.		stopstr = 'aud = get(gca,''user'');aud.stop = 4;set(gca,''user'',aud);';		dbutt(1) = uicontrol('style','push',...			     'pos',[buttl,dfaxb+2*buttsep,buttw,butth],...			     'string','Stop',...			     'call',stopstr,...			     'vis','off',...			     'tag','stop');		dbutt(2) = uicontrol('style','push',...			     'pos',[buttl,dfaxb,buttw,butth],...			     'string','Quit',...			     'call','dfield7(''quit'')',...			     'visible','off');		dbutt(3) = uicontrol('style','push',...			     'pos',[buttl,dfaxb+buttsep,buttw,butth],...			     'string','Print',...			     'call','dfield7(''print'')',...			     'visible','off');	      	dud.butt = dbutt;	hhsetup = get(0,'showhiddenhandles');	set(0,'showhiddenhandles','on');			% File menu		fmenu = findobj(gcf,'label','&File'); 	delete(findobj(fmenu,'label','&New Figure'));	delete(findobj(fmenu,'label','&Open...'));	delete(findobj(fmenu,'label','&Close'));	set(findobj(fmenu,'label','&Save'),...	    'separator','off',...	    'pos',1);	set(findobj(fmenu,'label','Save &As...'),...	    'pos',2);	delete(findobj(fmenu,'label','Pre&ferences...'));	set(findobj(fmenu,'label','&Export...'),...	    'pos',3);	set(findobj(fmenu,'label','Pa&ge Setup...'),'pos',4,...			  'separator','on');	set(findobj(fmenu,'label','Print Pre&view...'),'pos',5);	set(findobj(fmenu,'label','Print Set&up...'),'pos',6);	set(findobj(fmenu,'label','&Print...'),'pos',7);	merestart = uimenu(fmenu,'label','Restart dfield7','call',...			   'dfield7(''restart'')','separator','on','pos',8);		mequit = uimenu(fmenu,'label','Quit dfield7',...			'call','dfield7(''quit'')','separator','on');		% Tools menu		tmenu = findobj(gcf,'label','&Tools'); 	delete(tmenu);		% Insert menu		imenu = findobj(gcf,'label','&Insert');	inschild = get(imenu,'child');	legitem = findobj(inschild,'label','&Legend');	colitem = findobj(inschild,'label','&Colorbar');	delete([legitem,colitem]);			% Edit menu		emenu = findobj(gcf,'label','&Edit'); 	menu(2) = uimenu(emenu,'label','Zoom in.',...			 'call','dfield7(''zoomin'')',...			 'pos',1);		zbmenu = uimenu(emenu,'label','Zoom back.',...			'call','dfield7(''zoomback'')',...			'enable','off',...			'tag','zbmenu',...			'pos',2);		metext = uimenu(emenu,'label','Enter text on the Display Window.',...			'call','dfield7(''text'')',...			'separator','on',...			'pos',3);		medel = uimenu(emenu,'label','Delete a graphics object.',...		       'call','dfield7(''delete'')',...		       'visible','on',...		       'pos',4);	medall = uimenu(emenu,'label','Erase all solutions.',...			'call','dfield7(''dallsol'')',...			'separator','off',...			'pos',5);		medalllev = uimenu(emenu,'label','Erase all level curves.',...			   'call','dfield7(''dalllev'')',...			   'separator','off',...			   'pos',6);		medall = uimenu(emenu,'label','Erase all graphics objects.',...			'call','dfield7(''dall'')',...			'separator','off',...			'pos',7);		set(findobj(emenu,'label','&Undo'),'separator','on',...			  'pos',8);	set(findobj(emenu,'label','Cu&t'),'pos',9);	set(findobj(emenu,'label','&Copy'),'pos',10);	set(findobj(emenu,'label','&Paste'),'pos',11);	set(findobj(emenu,'label','&Select All'),'pos',12);	set(findobj(emenu,'label','Copy &Figure'),'pos',13);	set(findobj(emenu,'label','Copy &Options'),'pos',14);	set(findobj(emenu,'label','F&igure Properties'),'pos',15);	set(findobj(emenu,'label','&Axes Properties'),'pos',16);	set(findobj(emenu,'label','C&urrent Object Properties'),'pos',17);		% Options menu		menu(1) = uimenu('label','Options','visible','off','pos',3);		menukey = uimenu(menu(1),'label','Keyboard input.','call',...			 'dfield7(''kbd'')');		mesev   = uimenu(menu(1),'label','Plot several solutions.',...			 'call','dfield7(''several'')');		menulevel = uimenu(menu(1),'label','Plot level curves.',...			   'call','dfield7(''level'')',...			   'separator','off','tag','level');		meexportdata = uimenu(menu(1),'label','Export solution data.',...			      'call','dfield7(''export'')',...			      'separator','off','tag','dexp');		plcall = [	    'ud = get(gcf,''user'');',...	    'me = gcbo;',...	    'label = get(me,''label'');',...  	    'if strcmp(label,''Show the phase line.''),',...	    '  set(me,''label'',''Hide the phase line.'');',...	    '  ud.pline = ''on'';',...	    '  set(ud.plineh,''vis'',''on'');',...	  	    '  set(gcf,''user'',ud);',...	    'else,',...	    '  set(me,''label'',''Show the phase line.'');',...	    '  ud.pline = ''off'';',...	    '  set(ud.plineh,''vis'',''off'');',...	  	    '  kk = find(ishandle(ud.plhand));',...	  	    '  delete(ud.plhand(kk));',...	    '  ud.plhand = [];',...	  	    '  set(gcf,''user'',ud);',...	    'end'];  		mepline = uimenu(menu(1),'label','Show the phase line.',...			 'call',plcall,'tag','pline','separator','on');	  		mesolvset = uimenu(menu(1),'label','Solver settings.',...			   'call','dfield7(''solvset'')');	mesolve = uimenu(menu(1),'label','Solver.');		solverstr = ['ud = get(gcf,''user'');',...		     'me = gcbo;',...		     'meud = get(me,''user'');',...		     'ud.settings.refine = meud.refine;',...		     'ud.settings.tol = meud.tol;',...		     'ud.settings.solver = meud.solver;',...		     'ud.settings.solvhandle = meud.solvhandle;',...		     'ud.settings.stepsize = meud.stepsize;',...		     'ud.settings.hmax = meud.hmax;',...		     'set(ud.solver,''checked'',''off'');',...		     'set(me,''checked'',''on'');',...		     'set(gcf,''user'',ud);',...		     'dfset = findobj(''name'',''dfield7 Setup'');',...		     'sud = get(dfset,''user'');',...		     'sud.settings = ud.settings;',...		     'set(dfset,''user'',sud);',...		     'dfield7(''solvset'');'];	solver = dud.settings.solver;	dpset.refine = 4;	dpset.tol = 1e-6;	dpset.solver = 'Dormand-Prince';	dpset.solvhandle = @dfdp45;	dpset.stepsize = 0;	dpset.hmax = 0;	if strcmp(solver,'Dormand-Prince')	  dpch = 'on';	else	  dpch = 'off';	end		eulset.refine = 1;	eulset.tol = 0;	eulset.solver = 'Euler';	eulset.solvhandle = @dfeul;	eulset.stepsize = 0.1;	eulset.hmax = 0;	if strcmp(solver,'Euler')	  eulch = 'on';

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -