MATLAB程序设计详细记录_第十章

40. 可变长度输入参数列表

function [area,circum] = areacirc_d(varargin)
% varargin 接收输入变量的值,参数数量不确定,存到元胞数组
rad = varargin{1}; % 取出第一个元素值
if nargin == 2 % nargin是已存在的隐藏变量,用于接收输入变量的个数,传入参数为一个,则nargin = 1
    unit = varargin{2}; % 取出第二个元素值
    if unit == 'i'
        rad = rad / 12;
    end
end
area = pi * rad .^ 2;
circum = 2 * pi * rad;
end
[area,circum] = areacirc_d(1); % 单位:英尺
[area,circum] = areacirc_d(1,'i'); % 单位:英寸
function [area,circum] = areacirc_d(rad,varargin)
% rad 确定的
% varargin 接收第二参数开始的输入变量的值,存到元胞数组
if nargin == 2 % nargin是已存在的隐藏变量,用于接收输入变量的个数,传入参数为一个,则nargin = 1
    unit = varargin{1}; % 取出第1个元素值
    if unit == 'i'
        rad = rad / 12;
    end
end
area = pi * rad .^ 2;
circum = 2 * pi * rad;
end
[area,circum] = areacirc_d(1,'i'); % 单位:英寸

41.可变长度输出参数列表、嵌套函数

41.可变长度输出参数列表、嵌套函数

function [type,varargout] = typesize(M)
% varargout 用于接收输出参数值,不确定输出参数个数
[r,c] = size(M);
if r == 1 && c == 1
    type = 's';
elseif r == 1 || c == 1
    type = 'v';
else
    type = 'm';
end
% type 确定的输出参数
% nargout 不确定的输出参数个数
if nargout == 1
    return;
elseif nargout == 2
    varargout{1} = max(r,c);
elseif nargout == 3
    varargout{1} = r;
    varargout{2} = c;
else
    error{'expecting 1,2,or3 output varialbe(s).');
end
end
m = rand(3,4);
[t,r,c] = typesize(m);

41.2 嵌套函数

% function 不能定义在if
function example(a)
disp(addone(a));
end
function y = addone(x) % 局部函数,只能在定义该函数的文件中使用
y = x + 1;
end

function example(a)
disp(addone(a));
    function y = addone(x) % 嵌套函数
       y = x + 1;
    end
end
function outvol = nestedvolume(len,wid,ht)
outvol = base(len,wid)*ht; % 工作区:len,wid,ht
    function outbase = base(len,wid) %工作区:len,wid,与外部函数工作区的len和wid不是同一个变量
        outbase = len*wid;
    end
end
function outvol = nestedvolume(len,wid,ht)
outvol = base(len,wid)*ht; % 工作区:len,wid,ht
    function outbase = base()
        outbase = len*wid;
        inner_x = 1;
        inner_y = 2;
    end
disp(inner_x); % 错误,inner_x初始化在嵌套函数中,所以不能在外部函数使用
disp(inner_y); % 正确,inner_y初始化在外部函数(无论在哪个位置),所以可以在外部函数使用
inner_y = NaN;
end

42. 匿名函数与递归函数

42.1 匿名函数

function area = cirarea(radius)
area = pi * radiius .^ 2;
end
cirarea2 = @(radius)pi * radius .^ 2; % 匿名函数, 
% cirarea2:函数名
% (radius):用来表示变量的部分  
% pi * radius .^ 2:输出值,即计算公式
class(cirarea2); % 'function_handle' , handle:句柄
cirarea2(1); % 3.1416
vol = @(len,wid,ht)len*wid*ht; % 输出为标量
vol(1,2,3); % 6
volAndBase = @(len,wid,ht)[len*wid*ht,len*wid]; % 输出为向量
volAndBase(1,2,3); % 6 2
prtand = @()fprintf("aaa"); % 没有输出值的匿名函数
save 'prtrand' 'prtrand'; % 第一个值表示要保存的函数名,第二个值表示文件名,可以保存匿名函数

fn = @sin; % 把句柄给fn
function fnfnexamp(funh)% 将句柄fn发送给函数
x = 1:0.25:6;
y = funh(x); % 使用句柄包含的信息进行计算
plot(x,y,'ko');
end
fnfnexamp(fn);

42.2 递归函数

function facn = fact(n)
if n == 1
    facn = 1;
else
    facn = n * fact(n-1);
end
end
fact(3); % 6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值