MATLAB2-结构化编程和自定义函数-台大郭彦甫视频
目录
if elseif else
switch case otherwise
while
exercise练习
for
预宣告
练习题
break
tips编程的小技巧
functions函数
练习题
函数句柄
if elseif else
如果condition为真,执行语句
if condition1statement1
elseif condition2statement2
elsestatement3
end
实际例子:
a = 5;
if rem(a,2) == 0%余数remainderdisp('a is even')%偶数
elsedisp('a is odd')%奇数
end
运行结果:a is odd
switch case otherwise
用switch语句内容判断执行:
switch expressioncase value1statement1case value2statement2otherwisestatement
end
实际例子:
input_num = 10;
switch input_numcase -1disp('negative 1')case 0disp('zero')case 1disp('positive 1')otherwisedisp('other value')
end
运行结果与input_num有关,例如这个结果为:other value
while
标准:
while expressionstatement
end
举例:
n = 1;
while prod(1:n)<1e100%prod数组的乘积 1e100是1*10的100次方n = n+1;
end
运行结果:计算1累乘到小于10的100次方有多少个数--n=70
exercise练习
%use while loop to calculate the summation of the series 1+2+3...+999
m = 1;summation = 0;while m <1000summation = summation + m;m = m + 1;endsummation
运行结果:
for
标准:
for variable=start:increment:endcommand
例子:
for n = 1:2:10a(n)=2^n;
end
disp(a(1:2:10))
结果:
预宣告
pre-allocating space to variables
能够极大程度缩短代码运行时间
例如:
tic
for ii = 1:2000for jj = 1:2000A(ii,jj) = ii+jj;end
end
toctic
A = zeros(2000,2000);
for ii = 1:size(A,1)for jj = 1:size(A,2)A(ii,jj) = ii+jj;end
end
toc
结果发现,时间差距还是很大,所以预宣告还是很重要的:
练习题
A = [0 -1 4;9 -14 25;-34 49 64];
B = A;
for i = 1:size(B,1)for j = 1:size(B,2)if B(i,j)<0B(i,j) = -B(i,j);endend
end
B
运行结果(这玩意太简单了):
break
就是跳出循环,跟c/c++或者python逻辑same
x = 2;k = 0;error = inf;
error_threshold = 1e-32;
while error > error_thresholdif k>100breakendx = x-sin(x)/cos(x);error = abs(x - pi);k = k + 1;
end
tips编程的小技巧
- 在脚本开头,使用
clear all
清除之前的变量,用close all
关闭所有图形窗口。 - 在命令末尾使用分号
;
,以抑制不必要的输出。 - 使用省略号
...
使脚本更具可读性,比如示例中对矩阵A
的分行定义。 - 若要在脚本结束前终止它,可按下
Ctrl + C
functions函数
例如自由落体的代码x=x0+v0t+1/2gt^2的函数:
function x = freebody(x0,v0,t)
x = x0+v0.*t+1/2*9.8*t.*t;
(在matlab中也是.m文件
例如2 计算牛顿第二定律(没记错的话)F=ma:
function [a F] = acc(v2,v1,t2,t1,m)
a = (v2-v1)./(t2-t1);
F = m.*a;
练习题
就是输入一个华摄氏度,输入摄氏度,而且什么时候按回车什么时候停止:
我的代码:(注意一点:一定要把输入的字符F转化为double,我说怎么一直不对 用str2double)
%输入华摄氏度 输出摄氏度
function F2C()%fahrenheit to centigrade
F = input('请输入华摄氏度值:','s');
out0 = ['华摄氏度为:',num2str(F)];
disp(out0)
a = isempty(F);
while(a==0)C = (str2double(F)-32)/1.8;out = ['摄氏度是:',num2str(C)];disp(out)F = input('请输入华摄氏度的值:','s');out0 = ['华摄氏度为:',num2str(F)];disp(out0)a = isempty(F);
end
disp('input is end')
运行结果:
函数句柄
就是不用写.m文件直接在当前文档中写一个函数(我感觉有点乱,除非很简单的函数方便
%% function handle函数句柄
f = @(x) exp(-2*x);
x = 0:0.1:2;
plot(x,f(x))