一、m文件定义函数(m-函数)

Matlab函数的基本结构

在这里必须注意函数脚本名字要与函数名一致
你可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 function关键词开头,后接输出变量和函数标识符名称和圆括号 ()
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以end结束。

函数需要定义在脚本文件(*.m)中运行,不可以在命令窗口中临时创建。

  1. function[输出形参表: output1, ...,outptn] = 函数名(输入形参表: input1, ... , inputn)
  2. % 注释说明部分
  3. 函数体代码部分
  4. end

函数调用

定义完的函数保存为同函数名的m文件,放置在Matlab的当前路径之下(或修改当前路径为m-函数文件所在路径),然后就和使用Matlab自带的函数一样,直接在命令窗口或程序代码中使用该函数就是调用它了。调用函数时,只需要知道函数是完成什么功能的,以及它的输入参数、输出参数。
函数调用的一般格式为:

[输出实参表]=函数名(输入实参表)

注1:函数中遇return语句时,将退出函数体,此函数调用结束;

注2:函数体里面也可以定义一个或几个函数,称为子函数;注意:子函数只能存在于主函数体内,不独立存在;子函数在主函数体内的位置可以任意,不影响使用;子函数只能被主函数以及其他位于同一主函数体下的子函数调用,但子函数“句柄”例外;

注3:在调用函数时,Matlab用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。

实例

调用的是函数所在文件名,而非函数名,所以尽量让两者一致;
function 首字母小写;
需要注意的是调用函数要在当前文件夹中;
image.pngimage.png

function x=Thomas(c,a,b,f)
%用追赶法求线性方程组 Ax=b的解,其中A为三对角矩阵 A=(c,a,b)
% a为主对角元素向量,b为上对角元素向量,c为下对角元素向量
% (为了算法简便,令abc三向量的元素数相同,c(1) b(n) 多的元素并未参与运算)
%原理  Ax=LUx=Ly=f  先求y向量,再求x向量
n=length(a)

for i=1:n
    if(a(i)==0)
        disp('Error : 对角有元素为0!');
        return;
    end
end

%求解Ly=f的解,解保存在y中
% l(i)=c(i)/u(i-1); 省略一个中间变量
y(1)=f(1)  %y1=f1
u(1)=a(1)
for i=2:n 
    u(i)=a(i)-(c(i)/u(i-1))*b(i-1);
    y(i)=f(i)-(c(i)/u(i-1))*y(i-1);    
end

%求解Ux=y的解 x 
x(n)=y(n)/u(n)
for i=n-1:-1:1
    x(i)=(y(i)-b(i)*x(i+1))/u(i)
end

二、内联函数

可以让用户编写简单的函数而不需要创建M文件。语法格式:
f=inline(‘函数表达式’, ‘变量1’, ‘变量2’, ……)
调用方式:y=f(实参列表)
注意:实参列表顺序应与inline()定义中形参列表的顺序一致。
这种函数定义方式是将它作为一个内部函数调用。好处是,它是基于Matlab的数值运算内核的,所以它的运算速度较快,程序效率更高。缺点是,该方法只能对数值进行代入,不支持符号代入,且对定义后的函数不能进行求导等符号运算。

实例:

f=inline('x^2+y','x','y');
z=f(2,3);

>>z=7

Meshgrid

1、主要使用的函数为[X,Y]=meshgrid(xgv,ygv);

meshgrid函数生成的X,Y是大小相等的矩阵,xgv,ygv是两个网格矢量,xgv,ygv都是行向量。

X:通过将xgv复制length(ygv)行(严格意义上是length(ygv)-1行)得到。 X:将xgv行向量复制到多行

Y:首先对ygv进行转置得到ygv’,将ygv’复制(length(xgv)-1)次得到。Y:将ygv转为列向量并复制到多列

xgv=1:3;
ygv=10:14;
xgv=
    1 2 3  %1*3的行向量
ygv=
    10 11 12 13 14   %1*5的行向量
[X,Y] = meshgrid(xgv,ygv);
X =

     1     2     3
     1     2     3
     1     2     3
     1     2     3
     1     2     3


Y =

    10    10    10
    11    11    11
    12    12    12
    13    13    13
    14    14    14