Matlab程序设计基础

程序设计

函数文件

在 MATLAB 中,函数文件(Function File) 是用于定义自定义函数的基本方式,扩展名为 .m。它可以接收输入参数,执行一系列操作并返回结果。

1.函数文件的基本结构

函数文件以 function 开头,其基本结构如下:

function [输出1, 输出2, ...] = 函数名(输入1, 输入2, ...)
    % 函数说明
    % 执行语句
end
  • 文件名必须和函数名一致,例如函数叫 myadd,文件名必须是 myadd.m
  • 可定义多个输入和多个输出。
  • 一个函数文件只能有一个主函数,可以包含多个子函数

2.创建并使用函数文件的示例

定义一个加法函数 myadd.m

function result = myadd(a, b)
    % myadd: 返回 a + b 的结果
    % 输入检查
    if nargin ~= 2
        error('需要两个输入参数');
    end
    if ~isnumeric(a) || ~isnumeric(b)
        error('输入参数必须是数值类型');
    end
    result = a + b;
end

调用方法:

>> r = myadd(3, 5)
r =
     8

需要注意函数文件必须在当前工作路径中,否则索引不到

3.带多个输出的函数示例

定义一个计算平均值与标准差的函数 mystat.m

function [avg, s] = mystat(x)
    % mystat: 返回平均值和标准差
    if nargin ~= 1
        error('需要一个输入向量');
    end
    if ~isvector(x) || ~isnumeric(x)
        error('输入必须是数值向量');
    end

    n = length(x);
    avg = sum(x) / n;
    s = sqrt(sum((x - avg).^2) / (n - 1));
end

调用方法:

>> [mean_val, std_val] = mystat([1 2 3 4 5])
mean_val =
     3
std_val =
     1.5811

4.包含子函数的函数文件

一个函数文件中可以包含多个函数,但只有**第一个函数(主函数)**是对外可见的,其他的是子函数,仅供主函数调用。

function y = mainfunc(x)
    y = helperfunc(x) + 1;
end

function z = helperfunc(x)
    z = x^2;
end

流程控制

1. if 条件语句

用于执行满足条件的代码块。
语法:

if 条件1
    % 条件1为真时执行的语句
elseif 条件2
    % 条件2为真时执行的语句
else
    % 所有条件不满足时执行
end

示例:

x = 5;
if x > 10
    disp('x 大于 10');
elseif x == 5
    disp('x 等于 5');
else
    disp('x 小于或等于 10 且不等于 5');
end
x 等于 5

2. switch 多分支选择语句

根据变量的值选择执行哪个代码块,适用于多个固定值的判断。
语法:

switch 变量
    case1
        % 变量等于值1时执行
    case2
        % 变量等于值2时执行
    otherwise
        % 所有情况都不匹配时执行
end

示例:

day = 'Monday';
switch day
    case 'Monday'
        disp('今天是星期一');
    case 'Tuesday'
        disp('今天是星期二');
    otherwise
        disp('不是星期一也不是星期二');
end
今天是星期一

3. try-catch 异常处理语句

用于捕捉运行时错误,使程序即使遇到异常也不会中断运行。

语法:

try
    % 尝试执行的代码
catch 异常变量
    % 出错时执行的代码
end

示例:

>> try
     result = 10 / a
   catch ME
     disp('发生错误:');
     disp(ME);
   end
发生错误:
  MException - 属性:

    identifier: 'MATLAB:UndefinedFunction'
       message: '函数或变量 'a' 无法识别。'
         cause: {}
         stack: [0x1 struct]
    Correction: []

>> 
ME与lasterr

在早期 MATLAB 版本中,catch 子句不接变量名,错误信息由内置变量 lasterr 存储。示例如下:

>> try
    result = 10 / a;
catch
    disp('出错:');
    disp(lasterr);  % 显示最后一条错误信息
end
出错:
函数或变量 'a' 无法识别。

lasterr 是一个全局变量,保存最后发生的错误信息。

在新版本 MATLAB 中(R2010+),推荐使用结构化异常对象 MException 处理错误。catch 后可以接一个变量(如 ME),此变量就是一个 MException 对象。

try
    result = 10 / 0;
catch ME
    disp('发生错误:');
    disp(ME.message);        % 错误消息字符串
    disp(ME.identifier);     % 错误标识符(如'MATLAB:divideByZero')
    disp(ME.stack(1));       % 错误发生的位置(文件、行号、函数)
end

MException 对象详解:
当错误发生时,MATLAB 会创建一个 MException 类型的对象,常用属性如下:

属性名说明
ME.message错误的文本描述
ME.identifier错误的唯一标识符
ME.stack一个结构数组,描述错误发生的函数、文件和行号
ME.cause若是嵌套异常或 rethrow,可追踪根本原因

4. while 循环语句

当条件为真时反复执行某段代码。

语法:

while 条件
    % 循环体
end

示例:

i = 1;
while i <= 5
    disp(['当前 i = ', num2str(i)]);
    i = i + 1;
end
当前 i = 1
当前 i = 2
当前 i = 3
当前 i = 4
当前 i = 5

5. for 循环语句

用于对已知范围的变量进行迭代。

语法:

for 变量 = 向量或数组
    % 循环体
end

示例:

for i = 1:5
    disp(['i = ', num2str(i)]);
end
i = 1
i = 2
i = 3
i = 4
i = 5

break和continue

控制语句说明
break终止当前循环
continue跳过当前循环的剩余部分,直接进入下一轮

示例:

for i = 1:10
    if mod(i, 2) == 0
        continue;  % 跳过偶数
    end
    if i > 7
        break;     % 超过 7 时跳出循环
    end
    disp(i);
end
     1

     3

     5

     7
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值