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));


 

posted on 2023-07-21 21:39  学习记录园  阅读(32)  评论(0编辑  收藏  举报