matlab笔记八

%可变参数输入列表

% 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

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值