作者:金良([email protected]) csdn博客:http://blog.csdn.net/u012176591
效果图(http://www.tuyitu.com/gif/可以将多张图片转换成gif,不限图片张数,不过一定要等待转换结束才能保存,否则转换成的gif图片不能完全播放):
代码:
x=linspace(-2, 2, 100); % 在x轴上取100点 y=linspace(-2, 2, 100); % 在y轴上取100点 r = 0.5;%学习率 m=-1.5;n=-1.5; [xx,yy]=meshgrid(x, y); % xx和yy都是100x100的矩阵 zz=exp(-xx.^2-yy.^2); % 计算函数值,zz也是100x100的矩阵 plot3(xx, yy, zz,'g-'); % 画出立体曲面图 %shading interp%去掉网格 colormap([]); % 去掉颜色剩网线了 hold on; delta=100; plot3(m,n,exp(-m^2-n^2),'k*'); pause(1) i=0; while delta>0.005 vx=-m*exp(-m^2-n^2);%梯度上升法求梯度 vy=-n*exp(-m^2-n^2); mtemp = m+r*vx;%更新位置 ntemp = n+r*vy; hold on;%画图前,先hold on plot3(mtemp,ntemp,exp(-mtemp^2-ntemp^2),'k*')%画点 plot3([m,mtemp],[n,ntemp],[exp(-m^2-n^2),exp(-mtemp^2-ntemp^2)],'r-')%连线 hold off;%画图后,要先释放 m=mtemp; n=ntemp; delta = sqrt(vx^2+vy^2); pause(0.25); F=getframe(gcf); %保存图像,第二个参数是图像路径名,由于保存多张,每张都有一个动态的编号 imwrite(F.cdata,['e:\pic\jin_',num2str(i),'.jpg']); i=i+1;%图像编号 end el=30; %设置仰角为30度。 for az=0:20:360 %让方位角从0变到360,绕z轴一周 view(az,el); drawnow; pause(0.25);%暂停0.25s,不暂停的话图像将得不到刷新 F=getframe(gcf); imwrite(F.cdata,['e:\pic\jin_',num2str(i),'.jpg']); i=i+1; end
画图前先要hold on,画图之后要hold off,并且要暂停一会儿pause(0.25),这样才能看到图像的刷新。
图像刷新后,用F=getframe(gcf);获得图像的操作句柄,用imwrite(F.cdata,图像文件名);来保存图片。上边的代码中['e:\pic\jin_',num2str(i),'.jpg']将三个字符串连接成保存图片的路径名和文件名,其中i是一个不断的整数,作为图片的序号并体现在文件名里。图片格式是.jpg。
至于view(az,el);中的两个参数(方位角和仰角)的概念,这里有详细的介绍和例子http://blog.csdn.net/u012176591/article/details/40921033。
none
--MATLAB does not erase the objects when it is moved.background
--MATLAB erases the object by redrawing it in the background color. This mode erases the object and anything below it (such as grid lines).xor
--This mode erases only the object and is usually used for animation.A = [ -8/3 0 0; 0 -10 10; 0 28 -1 ]; y = [35 -10 -7]'; h = 0.01; p = plot3(y(1),y(2),y(3),'.', ... 'EraseMode','none','MarkerSize',5); % Set EraseMode to none axis([0 50 -25 25 -25 25]) hold on for i=1:4000 A(1,3) = y(2); A(3,1) = -y(2); ydot = A*y; y = y + h*ydot; % Change coordinates set(p,'XData',y(1),'YData',y(2),'ZData',y(3)) drawnow i=i+1; end