目录
前言
为在B站跟随台湾大学郭彦甫老师学习matlab的笔记,截图来自郭老师PPT,部分内容参考B站弹幕和评论,仅供学习参考。
一、脚本编辑器
新建和运行脚本文件
新建脚本文件,运行脚本文件
脚本编辑器功能
二、 脚本流
控制流
if,elseif,else
for
switch,case
while
break
continue
end
pause
return
关系(逻辑)运算符
指令 if elseif else
所有matlab程序指令要以end宣告结束
rem(a,2) 余数,a除以2的余数
disp 显示变量的值
a=3;
if rem(a,2)==0;
disp('a is even')
else
disp('a is odd')
end
a is odd
指令 switch
input_num = 1;
switch input_num
case -1
disp('negative 1');
case 0
disp('zero');
case 1
disp('positive 1');
otherwise
disp('other value');
end
positive 1
指令 while
prod() product求积
prod(1:n)=n!
prod([1 2 3 5]) =1x2x3x5
1e100=1x10^100
n=1;
while prod(1:n)<1e100
n=n+1;
end
>> n
n =
70
Exercise
使用while循环计算
n=1;
sum=0;
while n<1000
sum=sum+n;
n=n+1;
end
disp(sum)
499500
for 指令
将a的n次方储存在数组a的第n个位置
for n=1:10
a(n)=2^n;
end
disp(a)
1 至 7 列
2 4 8 16 32 64 128
8 至 10 列
256 512 1024
只计算奇数次方
for n=1:5
a(n)=2^(2*n-1);
end
disp(a)
2 8 32 128 512
为变量预先分配空间
上面例子中每次循环需要调整向量A的大小,这会影响计算速度,下面例子中将事先为向量A分配空间。
计时指令,tic(开始)toc(结束)
使用分节运行
%%
tic
for ii=1:2000
for jj=1:2000
A(ii,jj)=ii+jj;
end
end
toc
%%
tic
A=zeros(2000,2000);
for ii=1:2000
for jj=1:2000
A(ii,jj)=ii+jj;
end
end
toc
时间已过 2.068275 秒。
时间已过 0.030096 秒。
Exercise
把矩阵A中的元素复制到矩阵B中
如果它们在矩阵A中的对应项是负的,改变矩阵B中的值
A=[0 -1 4;9 -14 25;-34 49 64];
B=zeros(3,3);
for n=1:9
B(n)=A(n);
if A(n)<0
B(n)=-A(n);
end
end
disp(B)
0 1 4
9 14 25
34 49 64
指令 break
技巧
clear all 以删除以前的变量
close all 以关闭所有数字
clc 以清除指令窗口
使用换行号...换行以提升程序可读性
按 Ctrl+C 以终止脚本
脚本与函数
脚本和函数都是包含MATLAB命令的。
.m文件函数是在需要执行例程时编写的。
MATLAB 内置函数的内容
用户定义函数
文件名要与函数名一致
用.*可以在输入时输入多组变量,如下第二个例子所示
function x = freebody(x0,v0,t)
% calculation of free falling
% x0: initial displacement in m
% v0: initial velocity in m/sec
% t: the elapsed time in sec
% x: the depth of falling in m
x = x0 + v0.*t + 1/2*9.8*t.*t;
>> freebody(0,0,10)
ans =
490
>> freebody([0 1],[0 1],[10,20])
ans =
490 1981
具有多个输入和输出的功能
function [a F] = acc(v2,v1,t2,t1,m)
a = (v2-v1)./(t2-t1);
F = m.*a;
>> [Acc Force] = acc(20,10,5,4,1)
Acc =
10
Force =
10
Exercise
编写一个函数要求输入华氏温度
计算摄氏温度
以度为单位显示转换后的温度摄氏度
脚本应继续运行,直到没有数字提供用于转换
function F2C()
while true
F=input('temperature in F is: ');
if isempty(F) %判断F是否为空矩阵,是空矩阵返回true
break;
else
C=(F-32)*5/9;
disp(['temperature in C is: ',num2str(C)])
end
end
>> F2C
temperature in F is: 100
temperature in C is: 37.7778
temperature in F is: 10
temperature in C is: -12.2222
temperature in F is:
>>
函数默认变量
inputname | 函数输入的变量名称 |
mfilename | 当前正在运行的函数的文件名 |
nargin | 函数输入参数数 |
nargout | 函数输出参数数 |
varargin | 可变长度输入参数列表 |
varargout | 可变长度输出参数列表 |
function [volume]=pillar(Do,Di,height)
if nargin==2
height=1;
end
volume=abs(Do.^2-Di.^2).*height*pi/4;
>> pillar(2,1)
ans =
2.3562
>> pillar(2,1,2)
ans =
4.7124
功能句柄
f = @(x) exp(-2*x);
x = 0:0.1:2;
plot(x, f(x));
类似C语言指针,将 f 指向 exp(-2*x)