Version: Next

结构化程序与自定义函数

  1. 脚本编写
  2. 分支编程
  3. 自定义函数

Matlab 脚本

  • .m 格式文件

  • 不需要 编译

  • 左上角 new script,新建脚本

for i = 1 : 10
x = linspace(0, 10, 101);
plot(x, sin(x + i));
print(gcf, '-deps', strcat('plot', num2str(i), '.ps'));
end
  • run 执行

image-20220105225056805

  • 单行注释符 %

  • %% 标记一个 区块 section,可以使用 run section 只执行指定 section 而不是所有程序

  • debug:在数字位置点一下,就可以打 断点

  • ctrl + i 为自动格式化代码

分支与条件控制语句

if,elseif,else

for

switch, case, otherwise

try catch

while

break

continue

end

pause —— 暂时退出执行

return

逻辑表达式

==

<

<=

~= 不等于

&&

||

if

if 条件1
表达式1
elseif 条件2
表达式2
else
表达式3
end

判断奇偶数

>> a = 3;
if rem(a, 2) == 0 % 对 2 取余
disp('a is even')
else
disp('a is odd')
end
a is odd
>>

while

while 条件
表达式
end

1 2 3 ... n 连乘的积 < 10的100次方,求n

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

练习1

使用 while 循环计算 1 + 2 + ... + 999 的和

sum = 0;
i = 1;
while i < 1000
sum = sum + i;
i = i + 1;
end
disp(sum)

for 循环

for 变量=初始值:增量:end
表达式
end
for n = 1 : 10
a(n) = 2 ^ n
end
disp(a)
警告

matlab 中变量的值有时不会被新值替代掉,最好用 clear 变量名 手动释放旧值

练习2

用 for 循环输出 a = [2 2^3 2^5 2^7 2^9]

提示代码

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

该代码的问题是,能够生成需要的那几个数,但是下标多了,空出来的那些下标位置上的值为 0

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

image-20220105225056805

tic toc 可以对之间的指令 计时

练习3

image-20220105225426049

  1. 把矩阵 A 复制到 矩阵 B
  2. 在 B 中,将所有负数元素变为正数
A = [0 -1 4; 9 -14 25; -34 49 64]
B = zeros(3, 3);
for i = 1 : numel(A)
if A(i) < 0
B(i) = -A(i);
else
B(i) = A(i);
end
end
disp(B)