MATLAB基础——函数的使用

函数基本概念

1.MATLAB中函数一般定义为一个独立的m文件,文件名与函数名相同
2.函数也可以定义在一个脚本文件的末尾
3.以function开头,end结尾
4.在函数定义行(function那行)的下面一行为H1行,包括程序名称和简短说明,利用此可以通过lookfor或help搜索到函数,如下lookfor average_2即可搜索到函数

function output_args = average( input_args )
%average_2
end

函数类型

1.匿名函数

定义:
不存储在程序文件中、数据类型是函数句柄。可以接受输入并返回输出。
1.使用匿名函数来定义函数,用于输入输出(许多 MATLAB函数接受将函数句柄用作输入)

%演示匿名函数 许多 MATLAB函数接受将函数句柄用作输入
a=1;
f=@(x)a* x.^2;
fplot(f,[-1 1]);
hold on;
%改变系数需要重新创建句柄
a=2;
f1=@(x)a* x.^2;
fplot(f1,[-1 1]);
hold off;

2.利用多个匿名函数实现参变量积分+复合函数

%演示多个匿名函数
%1.求含未知系数的积分
g=@(c) integral((@(x) x.^2+c*x+1),0,1);
disp(g(2));

%2.复合函数g(x)=f(x)^2+1 f(x)=sin(x)
f=@(x) x.^2+1;
%arrayfun(func,A) 
%将函数 func 应用于 A 的元素 对于 A 的第 i 个元素来说,B(i) = func(A(i))。
g=@(x) arrayfun(f,sin(x));
fplot(g,[-1 1])

3.带有多个输出的匿名函数,不需要显示定义输出参数
注:
1.ndgrid()的作用是生成一个二维网格
2.x为矩阵,以列为副本即每列相同
3.y为同样大小矩阵,以行为副本即每行相同
4.目的是生成一个三维坐标系的xy平面,方便求f(x,y)

%演示多返回值的匿名函数
c = 10;
%生成一个网络二维网络 x以列为副本 y以行为副本
mygrid = @(x,y) ndgrid((-x:x/c:x),(-y:y/c:y));
[x,y] = mygrid(pi,2*pi);
mesh(x,y,sin(x)+cos(y));

2.局部函数

定义:
函数文件中,第一个函数称为主函数,此函数对其他文件可见。文件中的其他函数都为局部函数,只对同一文件中的其他函数可见。

function output_args = average( input_args )
%average_2
%使用lookfor时仅能查找H1行的内容
%计算平均值

output_args=sum( input_args )/length(input_args);
%使用子函数
print_str();
end

%说明:子函数 只能被主函数调用
%局部函数仅对同一文件中的其他函数可见
function print_str()
    fprintf('hello,world\n');
    %找到私有函数 只能在父级文件夹目录下的函数中才能找到
    findme;
end

3.嵌套函数

定义:
完全包含在父函数内的函数,程序文件中的任何函数都可以包含嵌套函数

注意:
1.嵌套函数可以访问和修改在父函数中定义的变量
2.不能在程序控制语句内定义嵌套函数

1.利用函数句柄使得嵌套函数可以被外部文件调用
好处:可以得到多个系数不同但函数形式相同的函数

%makeParabola.m
function p=  makeParabola( a,b,c )
%返回嵌套函数的句柄,供外部使用
%嵌套函数的变量来源
%1.输入参数
%2.嵌套函数内部定义的变量
%3.父函数定义的变量
p=@Parabola;

    function y=Parabola(x)
        y=a*x.^2+b*x+c;
    end
end

%脚本文件
%使用函数句柄在外部调用嵌套函数 好处:可以得到多个系数不同但函数形式相同的函数
p=makeParabola(1,1,1);
p1=makeParabola(1,2,1);
fplot(p);
hold on;
fplot(p1);
hold off;

4.私有函数

定义:
将函数存储在名称为private的子文件夹后,仅有仅 private 子文件夹紧邻的上一级文件夹中的函数可使用该函数
目的:可以建立自己的函数库

1.定义私有函数
注:
average定义在private文件夹的上一级中,所以可以调用findme

function output_args = average( input_args )
%average_2
%使用lookfor时仅能查找H1行的内容
%计算平均值

output_args=sum( input_args )/length(input_args);
%使用子函数
print_str();
end

%说明:子函数 只能被主函数调用
%局部函数仅对同一文件中的其他函数可见
function print_str()
    fprintf('hello,world\n');
    %找到私有函数 只能在父级文件夹目录下的函数中才能找到
    findme;
end
发布了99 篇原创文章 · 获赞 29 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_44586750/article/details/102809044
今日推荐