matlab 郭彦甫 3 结构化程式与自定义函数

本文介绍了MATLAB的脚本文件格式,包括函数定义、注释、断点设置和debug模式。讨论了逻辑运算符如&&和||,并展示了if-else、switch-case、while和for循环的用法。此外,还强调了预分配内存以提高效率的重要性,并给出了函数句柄的示例。文章还涉及如何创建用户自定义函数以及处理多输入多输出的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.脚本文件   保存文件格式  *.m   文件格式

函数部分    fx   包含绝大部分的函数介绍

注释为     行前加一个  %        如果为连续多行  需要先选中这些行  右键选择注释

两个  %%    将下面的部分分为section      区块

 

通常用于debug        设置程序的断点 “鼠标点击当前行  序号位置  形成圆点”

debug模式    fx k>>   出现了中间的k字母 表示当前为debug模式   普通模式没有k

        2.脚本flow 流程      面向过程的执行过程   从1行 运行到最后一行

       结构化程序     子程序    循环    条件   等等   

 逻辑运算符

&&  和  ||    支持逻辑短路功能

实例:

    if    else

if rem(a, 2) == 0
    disp('a is even');
else
    disp('a is odd');
end
switch  case
switch input_num
case -1
    disp('negative 1');
case 0
    disp('zero');
case 1
    disp('positive 1');
otherwise
    disp('other value');
end

   while 

n = 1;
while prod(1:n) < 1e100
    n = n + 1;
end

  for

for n=1:10
    a(n)=2^n;
end
disp(a)

break 

x = 2; k = 0; error = inf;
error_threshold = 1e-32;
while error > error_threshold
    if k > 100
        break
    end
    x = x - sin(x)/cos(x);
    error = abs(x - pi);
    k = k + 1;
end

使用循环语句应尽量预先分配内存空间

若一个变量所需要的内存空间是一个可预测的定值,我们应尽量提前为其分配内存空间.

tic
for ii = 1:2000
    for jj = 1:2000
        A(ii,jj) = ii + jj;
    end
end
toc

程序输出Elapsed time is 4.616199 seconds.

tic
A = zeros(2000, 2000);        % 预先为变量分配内存空间
for ii = 1:size(A,1)
    for jj = 1:size(A,2)
        A(ii,jj) = ii + jj;
    end
end
toc

Elapsed time is 2.786401 seconds.

可以看到,程序一比程序二所用的时间更长.这是因为: 对于程序一,没有预先为变量A分配内存,因此每当A的形状发生改变时,都需要重新为A分配内存地址,这花费了更多的时间.

tips
   clear all    清除所有变量
   close all    关闭之前绘制的图像
   ;   当前语句执行  不显示结果
   ...    连接本行和下一行的内容   A=[1 2 3 4 5 6;...
                                  6 5 4 3 2 1];    等价于 A=[1 2 3 4 5 6;6 5 4 3 2 1];

   ctrl+c   中断当前执行的程序或语句  跳出

脚本和函数
   函数   和普通脚本    都以 .m 文件 形式存在
 普通脚本    无输入输出参数    数据为全局作用域
 函数  有输入输出参数    数据为局部作用域 


查看内建函数的内容   edit(which('mean.m'))       mean函数   计算平均值
用户自定义函数   

function [输出变量名] = 函数名(输入变量名) 
% 函数的文档

函数代码

function x=freebody(x0,v0,t)
x=x0+v0.*t+1/2*9.8*t.*t;  点乘  对应元素相乘       为什么不用*呢    因为当参数t为标量和向量或矩阵的情况都可使用。
保存为  freebody.m  文件形式的函数
调用方式   
案例1
  cos(10)    输出1个值
  cos([1 2 3 4 5])  输出5个数值
案例2
  freebody(1,2,5)   x0=1    v0=2   t=5
  freebody([0 1],[0 1],[10 20])   输入两组数据  分别是 x0=0   v0=0   t=10     第2组输入为x0=1  v0=1   t=20   
         所以输出为两组 分别为490       1981

实例:
freebody(0, 0, 2)            % 得到 19.6000
freebody(0, 0, [0 1 2 3])    % 得到 [0 4.9000 19.6000 44.1000]
freebody(0, 0, [0 1; 2 3])    % 得到 [0 4.9000; 19.6000 44.1000]
inputname  
MATLAB不提供其他高级语言的指定默认参数值以及函数重载等语法,但灵活使用上述内置的函数参数,可以在一定程度上实现指定默认参数值以及方法重载:
function [volume]=pillar(Do,Di,height)
if nargin==2,
    height=1;
end
volume=abs(Do.^2-Di.^2).*height*pi/4;
多输入  多输出的函数
实例:下面函数实现了从华氏温度到摄氏温度的转换,该函数可以识别输入的待转换样例的个数,当输入的待转换样例个数为0时,退出函数.
function F2C()
while 1
    F_degree = input('tempreature in Fahrenheit: ', 's');
    F_degree = str2num(F_degree);
    if isempty(F_degree)
        return
    end
    C_degree = (F_degree-32)*5/9;
    disp(['tempreature in Celsius: ' num2str(C_degree)])
end

以函数句柄形式定义函数

我们也可以使用函数句柄的形式定义函数,这更接近数学上的函数定义,其语法如下:
函数句柄 = @(输入变量) 输出变量 
% 直接通过函数句柄调用该方法
f = @(x) exp(-2*x);
x = 0:0.1:2;
plot(x, f(x));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值