和我一起练习MATLAB吧03——基本编程程序的设计

MATLAB编写的程序文件有两种:脚本M(Scripts)文件和函数M(Functions)文件

M文件的创建

M文件是普通的ASCII文本文件,可以采用文字编辑和处理软件来建立,M文件的命名和C类似,注意MATLAB中对大小写的区分

  1. 脚本M文件

是一系列的命令、语句的简单组合。其中的变量都为全局变量,一般用clear清除变量

  1. 函数M文件

实现程序的模块化,可以实现程序的分工合作,适合程序的开发。其中变量一般都是局部变量,存放在自身函数的函数空间

使用edit可以查看函数的M文件,如edit std.m

参数传递

nargin为输入参数个数,nargout为输出参数个数

function y=mymax3(x1,x2,x3)

% 计算标量或向量的最大值

if nargin==0

    y=NaN;

    disp('请输入参数!');%当参数为0是会提示输入参数

    return;

elseif nargin==1

    y=max(x1);

elseif nargin==2

    y=max(max(x1),max(x2));

else

    y=max([max(x1),max(x2),max(x3)]);

end

变量

全局变量采用global进行声明

永久变量只能在函数M文件在定义,persistent

顺序结构

从上到下执行

分支结构

1.条件结构

1.1.if…end

a=6;

b=4;

if a>=b

    a=b;

end

a,b

1.2.if…else…end

a=12345;

if rem(a,2)==0

    disp('偶数');

else

    disp('奇数');

end

1.3.if…elseif…else…end

x=87;

if x>=90

    disp('优秀');

elseif x>=80

    disp('良好');

elseif x>=70

    disp('中等');

elseif x>=60

    disp('及格');

else

    disp('不及格');

end

1.4.switch…case…end

x=5;

switch x

    case 1

        disp('x=1');

    case 2

        disp('x=2');

    case {3,4,5}

        disp('x=3,4,5');

    otherwise

        disp('x');

end

2.循环结构

2.1.for

for i=1:1:10

    x(i)=i^10;

end

for i=[1,2,3,4,5,6,7,8,9,10]

    y(i)=i^10;

end

i=1:10;

z=i.^10

2.2while

x=zeros(1,10);

i=1;

while i<=length(x)

    x(i)=1/i;

    i=i+1;

end

x

2.3.break(跳出循环)

x=magic(6)

for i=1:size(x,1)

    for j=1:size(x,2)

        if x(i,j)==5

            break;

        else

            x(i,j)=0;

        end

    end

end

x

2.4.continue(继续)

x=magic(6)

for i=1:size(x,1)

    if rem(i,2)==0

        continue;

    end

    x(i,:)=0;

end

x

3.try…catch 异常处理

当你不确定该段程序代码是否会出错时,采用该语句可以捕获和处理异常

a=[1,2,3;2,3,4]

b=[3,4,5;1,6,7]

try

    c=a*b;

    disp('c=a*b');

catch

    disp(lasterr);

end

交互式结构

1.input

r1=input('Do you like apple? Y/N: ','s');

while isempty(r1)

    r1=input('Do you like apple? Y/N: ','s');

end

disp(r1);

disp('input matrix,for example:eye(5)');

r2=input('','s');

f=eval(r2)

2.keyboard修改变量的值

a=[1 2 3;2 3 4]

b=[4 5 3;7 8 9]

keyboard

c=a+b

3.pause暂停,按任意键继续

t=0:pi/20:2*pi;

x=sin(t);

figure;

plot(t,x)

xlabel('t');

ylabel('x');

hold on;

for i=1:7

    pause;

    plot(t,sin(t+i/5));

    hold on;

end

4.echo(echo on显示程序语句;echo off不显示)

a=[1 2 3;2 3 4];

b=[1 2 3;7 8 9];

echo on;

c=a+b

d=a-b

echo off;

e=a.*b

5.return终止运行或返回

函数类型

1.主函数

每个函数M文件的第一行定义的函数是主函数,一个函数M文件只有一个主函数,主函数名字与函数的名字相同。主函数可以调用子函数和嵌套函数。

2.子函数

一个函数M文件可以有多个子函数,也采用function定义。如果主函数中包含子函数则每个采用function定义的函数必须采用end结束。子函数只能被同一文件下的主函数或其他子函数调用。

function [a,b]=mymain(x,y)% 主函数

a=mysub1(x,y);

b=mysub2(x,y);

end

function z=mysub1(x,y)% 子函数1

z=x-y;

end

function z=mysub2(x,y)% 子函数2

z=x+y;

end

3.嵌套函数

function a=A(x,y)  % B(x,y);

                % D(x,y);

    a=1

    function b=B(x,y)

        C(x);

        D(y);

        b=2

        function c=C(x)

            B(x)

            D(x);

            c=3

        end

    end

    function d=D(x,y)

        B(x,y);

        E(y);

        d=4

        function e=E(y)

            B(x);

            D(x);

            e=5

        end

    end

end

4.私有函数(要保存在private文件下,有有限的访问权限,不能直接调用)

function z=myprivatefun(x,y)  

% 这是私有函数 myprivatefun()

disp('这是私有函数!');

if nargin==2

    z=x+y;

elseif nargin==1

        z=x;

else

        warning('没有输入参数!');

        return;

end

5.重载函数(具有相同的函数名,在调用时MATLAB会根据实际的参数类型和个数来选择其中一个,通常目录名以@开头后跟一个代表MATLAB数据类型的字符,如@int8)

function m=max(x,y,z,w,varargin)

% 新建的重载函数 max()

% 该函数求三个标量的最大值

% author,copyright

if nargin~=4

    return;

end

temp=x;

if x<y

    temp=y;

end

if temp<z

    temp=z;

end

if temp<w

    temp=w;

end

m=temp;

6.匿名函数(fhandle=@(arglist)expr,其中arglist是匿名函数的输入参数列表,用逗号分隔,expr是具体函数表达式)

6.1.

f=@(x) 2*x^2+3*x+4

a1=f(2)

a2=f(3)

a3=f(4)

6.2.

f1=@()disp('This is an anonymous function')

f1()

functions(f1)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值