ik760218 发表于 2005-9-5 23:17

[转帖]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 发表于 2005-9-5 23:18

回复:(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 编辑 ]

zjliu 发表于 2005-9-21 16:57

<a href="http://luobo.yculblog.com/post.876803.html" target="_blank" >http://luobo.yculblog.com/post.876803.html</A>

liwensheng 发表于 2006-11-10 21:57

很不错,研究研究

hbyyj2008 发表于 2006-11-14 08:38

pigmin 发表于 2006-11-14 09:43

谢谢

xjtu211 发表于 2006-11-14 09:54

有意思,艺无止境啊

yikoyu 发表于 2006-11-14 14:16

原帖由 xjtu211 于 2006-11-14 09:54 发表

是不是龙哥啊?
怎么在这逛阿?

liwensheng 发表于 2006-11-14 19:15

先研究研究!

dfly1997 发表于 2008-4-30 15:34

有意思,很好很强大!学习中...

zhuhuanuaa 发表于 2009-6-6 10:48

不错,好好学习
页: [1]
查看完整版本: [转帖]M文件编写的一些经典实用实例