matlab基础
说明
书名《MATLAB原理与应用(第五版)——工程问题求解与科学计算》
清华大学出版社
用的是matlab2012a。
这一篇是前两章合在一起
一些零散的命令
a=3
按下回车,即显示a=3。如果是a=3;
,则a的值不会显示,但仍被赋值。
whos
可以确定当前工作区中局部变量或命令的清单。
clc
是清除当前页面的文字。
clear
是清除工作区中的所有局部变量。
help
是查看帮助的命令。
size(r)
用来查看r这个变量的大小,即几行几列。
plot(x,y),grid
以x为横坐标以y为纵坐标画图,grid为增加网格背景。
plot(x,y),axis[0 10 1 10
x范围为0到10,y范围为1到10。画图。
x=double(x)
强制转换类型。
file
打开file.m。
edit file
编辑file.m。
type file
列出file.m中的内容。
%balabala
以%开头的为注释,注释一行。
工作空间
若是经常需要用到某些常量,可以将它们保存在一个M-文件中,并且在会话开始前运行该文件。例如:
g=9.8;
e=exp(1);
以上保存在const.m中,会话开始前运行该文件,会将里面的变量变成工作空间的一部分,直到将他们清除为止。
向量与矩阵
给变量x赋值,使其成为向量的方法如下:
x = [1 3 4 -1]; %用逗号来分隔里面的元素也可以
y = 1:0.5:10; %第一个元素为1,按0.5递增,最后一位元素不大于4
y = 1:10; %中间的递增的值为1时可以省略
z = [x,-y]; %前面是x中的元素,后面是y中元素的相反数
x = [];
x = 1:0; %这两个都是生成空向量
x = [y,1,0];
若增量为负,则最后一个元素不小于第三个值。
r=linspace(0, 2, 10);
向量r首项为0,末项为2,项数为10,是等差数列。
r=logspace(0, 2, 10);
向量r首项为100,末项为102,项数为10,是等比数列。
以上向量均为行向量
若需要列向量,需要在行向量末尾加上单引号。单引号作用是转置该向量或矩阵。
以下命令是关于下标的:
r = rand(1,7); %r行数为1,生成7个随机数,为行向量。
r(3); %r中第3个元素(下标是从1开始的)
r(2:6); %r中第2到第6个元素
r(1:2:7); %r中第1、3、5、7个元素。其中,最后的元素应不大于7。
r([1 7 2 6]) %r中第1、7、2、6个元素。这四个下标用一个向量来表示了。
r([1 7 2]) = []; %移除r中第1、7、2个元素。
给x赋值,若x=[1 2 3; 2 3 5]
则x为2行3列的矩阵。
也可以像向量一样,用别的向量赋值,如下:
x = 0:30:180;
table = [x' sin(x*pi/180)'];
输出结果为7行2列的向量,第一列为角度,第二列为对应的sin值。
diary file
该命令是将之后出现在命令窗口中所有内容附加到文件file中,将新信息添加到文件末尾。接下来可以使用任意文本编辑器来编辑。file是是文件全名(包括扩展名),若文件不存在则会重新创建该文件。
diary off
用来终止该会话记录。
运算符、表达式和语句
1.234e-4为科学计数法。1.234*10^-4是运算而不是科学计数法,进行两次运算,所以更加耗时。
数字的相对精度由eps给出,eps是1.0与1.0之间的最小浮点数的距离,输入eps按下回车可查看该值。
realmin
与realmax
可以返回计算机所能表示的数字的上下限(与正负无关,是绝对值)。
默认数值类型为double。
对标量来说,1/3与3\1一样,但对矩阵不同。
x=1+1:5
的意思是,先执行加法,然后将x初始化为一个包含2、3、4、5的向量。
要转置1:5
,应为[1:5]'
。
两个向量做算术运算,行数与列数必须相同(1*n和n*1是不一样的)。
a.*b
、a./b
与a.^b
是对两个向量各个元素逐一对应进行运算。sum(a.*b)
即为a与b的内积。
a+b
与a-b
为a与b的加减法(没有“ . ”)。
逗号不禁止输出,分号禁止输出。分号与逗号不是语句的一部分,只是分隔符。
输出
有两种直接输出的方法
- 不使用分号,在命令行中输入要输出的变量、赋值语句、表达式。
- 使用disp语句。
disp(x);
disp('he said, "what?" ');
x=2;
disp(['The answer is ', num2str(x)]);
disp([x,x+1,x^2]');
num2str
读作“number to string”。
format命令如下:
format short e
数字用科学计数法表示,5位有效数字
format
恢复原来的格式设置
help format
查看帮助
其余有很多,懒得打了,看帮助就完事儿了。
不想让输出的矩阵乘上比例因子的话可以用format bank
或者format short e
for循环(部分形式)
for a = 1:5, disp(a), end %循环5次,分号用来分隔也可以
for a = 1:0, disp(a), end %循环0次
for index = j:k
statements;
end
for index = j:m:k
statements;
end
for完了之后得接个end算结束,没有大括号。
书中说for循环用向量来替代的话效率更高,如下:
%for循环
tic
n=1:100000;
s=sum(1./n.^2);
toc
%向量化
tic
n=1:100000;
s=sum(1./n.^2);
toc
我用的是2015a,按书上给的例子验证了一下,发现这两种方法时间从总体上看没什么差别,不是书上说的向量化比for循环快很多倍。可能是版本更新,for循环与向量化没什么差别了吧。
判断(if)
真值为1,非真为0。
不等号是~=,等号是==。其余的关系运算符是>、<、>=、<=。
if语句形式如下:
%单行if语句
if condition; statements; end
%单行if-else语句
if condition; statementA; else; statementB; end
%多行if-else语句
if condition
statementsA; %一个或多个语句
else
statementsB; %一个或多个语句
end
%elseif语句
if condition1
statementsA;
elseif condition2
statementsB;
...
else
statementsN;
end
if可以嵌套。
逻辑运算符为:&(与)、|(或)、~(非)。
赋值表达式不能当做条件。
switch语句如下:
switch x
case x1
statementsA;
case x2
statementsB;
...
otherwise
statementsN;
end
复数
i2=-1。
real(z) %实部
imag(z) %虚部
conj(z) %共轭
abs(z) %向量大小
angle(z) %幅角
plot(z)
相当于plot(real(z),imag(z))
对有复数的矩阵来说:
a' %转置,且取共轭
a.' %仅转置