📄 flame.m
字号:
function flame(r0)% FLAME A stiff ordinary differential equation.% FLAME(r0) specifies the initial radius is r0. Default r0 = .02.% A ball of fire grows until its radius is just large enough that all of% the oxygen available through the surface is consumed by combustion in% the interior. The equation for the radius is rdot = r^2 - r^3.% The problem becomes stiff as the radius approaches its limiting value.if nargin < 1, r0 = .02; endt = (0:.002:2)/r0;opts = odeset('reltol',1.e-5,'outputfcn',@flameplot);ode23s(@flameeqn,t,r0,opts);uicontrol('string','close','callback','close(gcf)')% ------------------------------function rdot = flameeqn(t,r);%FLAMEEQN ODE for expanding flame.rdot = r.^2-r.^3;% ------------------------------function fin = flameplot(t,r,job)%FLAMEPLOT Plot the expanding flame.persistent r0 rho theta x y z p sif isequal(job,'init') shg set(gcf,'double','on','color','black') set(gca,'color','black') r0 = r; m = 30; [rho,theta] = ndgrid((0:m)'/m, pi*(-m:m)/m); x = rho.*sin(theta); y = rho.*cos(theta); z = 1-rho/r0; p = pcolor(x,y,z); shading interp colormap(hot) axis square axis off s = title(sprintf('t = %8.2f r = %10.6f',0,r0),'fontsize',16); set(s,'color','white'); fin = 0;elseif isequal(job,'done') fin = 1;else for k = 1:length(t) z = max(0,1-rho/r(k)); set(p,'cdata',z) set(s,'string',sprintf('t = %8.1f r = %10.6f',t(k),r(k))); drawnow end fin = 0;end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -