发布企业信息

Matlab 变量的检测传递和限权使用函数

作者:未知  信息来源:未知  2006-1-26

字体大小:  网友评论  进入论坛  

5 变量的检测传递和限权使用函数8。2 -1 】变长度宗量使用示例。(1)编写函数文件 ringzy。 %11error(nargchk(1,Nin,nargin)) % 检查输入变量数目是否合适if nargout6 % 检查输出变量数目是否合适error( ‘Too many output arguments‘ )endt=0:pi/20:2*pi。...


8.5 变量的检测传递和限权使用函数
8.5.2 “变长度”输入输出宗量

【 * 例 8.5.2 -1 】变长度宗量使用示例。

(1)编写函数文件 ringzy.m
[ringzy.m]
function varargout = ringzy(r,varargin)
%RINGZY Plot a ring and calculate the area of the ring.
% r 基圆半径
% 调用格式
% [x1,y1,x2,y2,s1,s2]=ringzy(r,r2,'PropertyName','PropertyValue',...)
% ( 1 )无输出时,绘圆或环。
% ( 2 )有输出时,不绘图。
% (x1,y1),(x2,y2) 分别是两个圆的坐标点;
% s1 是基圆面积;
% s2 为正值时,表示内环面积;为负值时,表示外环面积。
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)有输出情况 :请读者自己用 plot(x1,y1,x2,y2) 检验下列三个调用示例的运行结果。
r1=1;r2=3;
[x1,y1,x2,y2,s1,s2]=ringzy(r1);
[x1,y1,x2,y2]=ringzy(r1,r2);
[x1,y1,x2,y2,s1,s2]=ringzy(r1,r2);

(3)无输出情况:为节省篇幅,在此给出三个调用示例。
r1=1;r2=0.6;
subplot(1,3,1),ringzy(r1,r2),
subplot(1,3,2),ringzy(r1,r2,'Marker','o')
subplot(1,3,3),ringzy(r1,r2,'LineWidth',5,'Color',[1 0.4 0])


图 8.5.2 -1-1 变长度输入宗量不同调用格式产生的图形


8.5.3 跨空间变量传递
8.5.3.1 跨空间计算串表达式的值

【 * 例 8.5.3 .1-1 】 evalin 运行机理与 eval 的异同。

(1)编写 M 函数文件
[evalinzzy.m]
function y1=evalinzzy(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)在 Notebook 或 MATLAB 指令窗中运行以下指令
clear,a=30;t=(0:a)/a*2*pi;sss={'base','caller','self'};
for k=1:3
y0=evalinzzy(8,sss{k});
subplot(1,3,k)
plot(real(y0),imag(y0),'r','LineWidth',3),axis square image
end


图 8.5.3 .1-1 利用不同工作空间中的变量值计算 eval('a*exp(i*t)')


8.5.3.2 跨空间赋值

【 * 例 8.5.3 .2-1 】 assignin 运作机理示范。

(1)编写 M 函数文件
[assigninxyq.m]
function y=assigninxyq(x)
y=sqrt(x);t=x^2;
assignin( 'base' , 'yy' ,t) 

(2)在 Notebbok 或 MATLAB 指令窗中运行以下指令
clear;x=4;y=assigninxyq(x);
disp([blanks(5),'x',blanks(5),'y',blanks(4),'yy']),disp([x,y,yy])
x y yy
4 2 16

分页:
Google


推荐图文

广告

机械热点图文

  • 数控车床加工编程典型实例分析2
  • 内螺纹车削加工——数控车床编程实例42
  • 子程序编程方法-数控车床编程实例36
  • 塑料模具动画演示

机械风云人物

Copyright © 2004 51base.com Inc. All rights reserved.

无忧基地 版权所有│粤ICP备06098418号│XHTML | CSS

客服:+86-755-2212 2202 工作时间:周1~5 10点~16点

感谢中国网络提供带宽支持

《网络营销技巧》