[转帖]M文件编写的一些经典实用实例
“变长度”输入输出宗量(参数数量可变的)最近在看张志涌的matlab6.5, 书写得很好,有很多东西值得分享,这是一个边写输入参数和输出结果都是变化的实例, 大家不妨仔细看看,相信对大家有帮助..
【例7.5.2-1】变长度宗量使用示例。
(1) 主程序
function varargout = exm07052_1(r,varargin)
%RINGZY Plot a ring and calculate the area of the ring.
%
%
vin=length(varargin);Nin=vin+1; % <11>
error(nargchk(1,Nin,nargin)) %
if nargout>6 %
error('Too many output arguments')
end
t=0:pi/20:2*pi;x=r*exp(i*t);s=pi*r*r;
if nargout==0
switch Nin
case 1
plot(x,'b')
case 2
r2=varargin{1}; %<22>
x2=r2*exp(i*t);
plot(x,'b');hold on ;plot(x2,'b');hold off
otherwise
r2=varargin{1}; %<26>
x2=r2*exp(i*t);
plot(x,varargin{2:end});hold on % <28>
plot(x2,varargin{2:end});hold off % <29>
end;
axis('square')
else
varargout{1}=real(x);varargout{2}=imag(x); %<33>
varargout{5}=pi*r*r;varargout{6}=[]; %<34>
if Nin>1
r2=varargin{1}; %<36>
x2=r2*exp(i*t);
varargout{3}=real(x2);varargout{4}=imag(x2); %<38>
varargout{6}=pi*(r^2-r2^2); %<39>
end;
end
(2)调用格式1
r1=1;r2=3;
=exm07052_1(r1);
=exm07052_1(r1,r2);
=exm07052_1(r1,r2);
(3)调用格式2
r1=1;r2=0.6;
subplot(1,3,1),exm07052_1(r1,r2),
subplot(1,3,2),exm07052_1(r1,r2,'Marker','o')
subplot(1,3,3),exm07052_1(r1,r2,'LineWidth',5,'Color',)
[ 本帖最后由 yejet 于 2006-11-11 16:01 编辑 ]
回复:(ik760218)[转帖]M文件编写的一些经典实用实例...
主要是evalin函数的用法和eval的区别.evalin可调用不同范围的数据,如基本空间,主函数空间,和子函数空间.通过结果你可以发现明显的区别. 具体通过help evalin查看.跨空间计算串表达式的值
本例演示:(A)编写绘制正多边形或圆的程序。(B)子函数与(母)函数的关系。(C)各种不同的工作空间。(D)evalin运行机理与eval的异同。
(1)文件如下:
function y1=exm070531_1(a,s)
t=(0:a)/a*2*pi;
y1=subevalinzzy(4,s);
%------------ subfunction -------------
function y2=subevalinzzy(a,s)
t=(0:a)/a*2*pi;ss='a*exp(i*t)';
switch s
case {'base','caller'}
y2=evalin(s,ss);
case 'self'
y2=eval(ss);
end
(2)调用格式
clear,a=30;t=(0:a)/a*2*pi;sss={'base','caller','self'};
for k=1:3
y0=exm070531_1(8,sss{k});
subplot(1,3,k)
plot(real(y0),imag(y0),'r','LineWidth',3),axis square image
end
还要注意各函数assignin,有相似的功能.
>> help assignin
ASSIGNIN Assign variable in workspace.
ASSIGNIN(WS,'name',V) assigns the variable 'name' in the
workspace WS the value V. WS can be one of 'caller' or 'base'.
[ 本帖最后由 yejet 于 2006-11-11 16:01 编辑 ] <a href="http://luobo.yculblog.com/post.876803.html" target="_blank" >http://luobo.yculblog.com/post.876803.html</A> 很不错,研究研究 好 谢谢
有意思,艺无止境啊
原帖由 xjtu211 于 2006-11-14 09:54 发表是不是龙哥啊?
怎么在这逛阿? 先研究研究! 有意思,很好很强大!学习中... 不错,好好学习
页:
[1]