%可变参数输入列表
% nargin 返回函数输入参数的数量
% nargout 返回函数输出的参数数目
%例题
%计算圆的面积和周长当输入有单位'i'是代表inch, 而基本单位是feet,所以要进行单位换算
function [area,circum] = practice(varargin)
disp(varargin)
radii = varargin{1};
if nargin == 2
unit = varargin{2};
% disp(unit)
end
if unit == 'i'
radii = radii / 12
area = pi * radii .^ 2;
circum = 2 * pi * radii;
end
end
>> practice(3,'i')
{[3]} {'i'}
radii =
0.2500
ans =
0.1963
% 嵌套函数
%{
一嵌一
function x = A(p1, p2)
...
function y = B(p1)
...
end
end
一嵌多
function x = A(p1, p2)
...
function y = B(p1)
...
end
function y = B(p1)
...
end
...
end
多嵌多
function x = A(p1, p2)
...
function y = B(p1)
...
end
function y = B(p1)
...
end
...
end
%}
%例题:通过嵌套函数的方式编写函数
% y = sqrt((x+1)+e^x) - 1
function practice(x)
nest = subfun1(x) + subfun2(x);
function y1 = subfun1(x1)
y1 = (x1 + 1) ^ 2;
end
function y2 = subfun2(x2)
y2 = exp(x2);
end
y = subfun3(nest);
fprintf('y = %.4f\n',y);
end
function y = subfun3(nest)
y = sqrt(nest) - 1;
end
>>practice(4)
y = 7.9218
% 匿名函数
%变量名 = @(参数) 语句
calcul = @(radius)pi * radius .^ 2
% 执行
calcul(2) % ans = 12.5664
% 对内部函数进行匿名
fn = @sin %把sin函数赋值给fn用fn进行调用
fn(45 * pi / 180) % ans = 0.7071
% such as
fn1 = @factorial %factorical 阶乘
fn1(10) % ans =3628800
% func2str() 把函数变成字符
func2str(fn1) % ans = 'factorial'
fplot 对函数进行绘图
x = @(t) cos(3*t);
y = @(t) sin(2*t);
fpolt(x,y)
feval 对函数进行计算
feval(@sin,0:1:4) %计算sin函数0~4的值
% timeit 计算匿名函数执行的时间
% prod 乘法函数
fn = @()prod(1:100) %从1乘到100的
fn() % 调用函数
timeit(fn) %计算fn函数执行的时间
%递归函数:函数调用函数
%递归函数的两个约束条件
%(1) 存在限制条件,当满足这个限制条件的时候,递归便不再继续。
%(2) 每次递归调用之后越来越接近这个限制条件
% 阶乘
function facn = fact(n)
if n == 1
facn = 1;
else
facn = n * fact(n - 1);
end
end
>> fact(10)
ans =
3628800
% 斐波拉契数 1 1 2 3 5 8 13...
function f = fab(n)
if n == 1 || n == 2
f = 1;
else
f = fab(n-2) + fab(n-1);
end
end
>> fab(6)
ans =
8