Matlab
基础知识
1. 末尾加不加“;”的区别
a=10; 加分号不会显示ans结果,编写长串代码这样会显得界面简洁
a=10
2. 注释: %
3. 不等于: ~=
续行书写
>>s = 1-1/2+1/3+... % '...' 表示续行书写 用于单行代码太长时使用
1/4-1/5
设置当前文件夹
先建立一个文件夹,然后在命令行窗口输入
>> cd 建立文件夹的路径
函数总结
sin(p1/2) | 弧度 |
---|---|
sind(90) | 角度 |
abs(x) | 求实数的绝对值、复数的模、字符串的ASCII码 |
round | 四舍五入规则取整 |
ceil | 向上取整 |
floor | 向下取整 |
fix | 舍去小数取整 |
rem(m,10) | 求m除以10的余数,其中m可以是矩阵A,即矩阵A中每个元素除以10 的余数 |
isprime(n) | n为素数返回1 |
sqrt(x) | 根号下 |
exp(x) | e的指数 |
>>save mydata a x | 将变量 a x 保存在mydata.mat 文件中 |
>>load mydata | 下次打开文件,就可以载入这个.mat文件 |
linspace(a,b,n) | 从a到b一共生成n个 |
D=sub2ind(size(A),[1,2;2,2],[1,1,;3,2]) | 参数1:由矩阵A行数和列数组成的向量,size(A):返回的是矩阵行数和列数组成的向量;参数2:行下标;参数3:列下标。将矩阵中元素的行列数转换为序号数,比如获取行1列1的元素在矩阵中的序号为多少 |
[I,J]=ind2sub(S,D) | S:由矩阵A行数和列数组成的向量;D:序号。将矩阵元素序号转换为对应元素的行列下标。例如:[I,J]=ind2sub([3,3],[1,3,5]) 表示对一个三行三列的矩阵的第1,3,5个序号的元素求其对应的行列下标 |
reshape(A,x,y) | 将矩阵A维度改为x行y列 其余不变 |
find(表达式) | 返回满足表达式的序号构成的 向量 |
clear | 清除当前工作区的全部变量 |
lower(c ) | 将大写字母转换成小写 |
upper( c ) | 将小写转换为大写 |
str2double( c) | 将字符串转换为数值 |
num2cell(0:34) | 将 [0,1,2,…,34] 的 向量 转换为 数值 形式 |
向量与矩阵
1. 行向量
a=[1 2 3 4] 中间用空格
a(3) 取出第三个元素
2. 列向量
b=[1;2;3;4] 中间用分号
3. 矩阵
A=[1 2 3;4 5 6;7 8 9]
A(1,2) 取出矩阵第一行第二个元素
利用已经建立好的矩阵,拼接成更大的矩阵
B = [-1 2 3;3 2 1;1 3 1]
C = [A B;B A]
复数矩阵
D = A + B * i
4.创建等差 “:”
为创建 A=1,2,3,...,100
A=[1:100] 等差=1
x = 1:2:100 %生成1-100 步长为2 的行向量
B=[1:2:100] 等差=2
矩阵引用
C(3 , :) 取出矩阵第三行所有值
A(i : i+m ; k:k+m) 取出i到i+m行 k到k+m列的元素
A(2:3,1:2:5)引用第2-3行 第1,3,5列元素
A(3,2) 第三行第二列元素
A(end,:) 取最后一行所有元素
A(:) 将矩阵每一列都堆在一起,形成新的一列的列向量
A([1,4],3:end) 第一行和第四行 从第三列到最后一列的所有元素
A = [1 2 3;4 5 6]
>>A(3) % 取出序号为3 的元素
ans = 2 %矩阵按列存储元素
删除矩阵元素
将元素置空
>>A(:,[2,4])=[] %将第二和第四列的所有元素置空,即删除元素,矩阵的维度会缩小
**注:**置空与赋值为0 不一样,赋值为0 ,矩阵原有维度不变,置空后维度会缩小
矩阵算法
A+2 每个元素➕2
A/2 每个元素除以2
A^2 矩阵A的平方
点运算
是指对应元素进行相关运算
A .* B | 对应元素相乘 |
---|---|
A * B | 两个矩阵在矩阵意义下的计算 |
例如:
>> x=0.1:0.3:1;
>> y = sin(x) .* cos(x)
这里必须用 .* 因为假设 x 是列向量,那么 sin(x) 和 cos(x) 都是和 x 同维列向量,此时如果只用 * 而不用 .* 会导致两个列向量相乘,不满足矩阵向量相乘的前提
特殊矩阵
eye(n) n维单位矩阵
diag([2 3 4 ]) 对角线矩阵,主对角线元素为2 3 4
zeros(m,n) 全零矩阵
zeros(size(A)) 产生与A同样大小的0矩阵
ones 全1 矩阵
rand (0,1)均匀分布的随机矩阵
randn 均值为0 方差为1 的标准正态分布
magic(3) 三阶魔方矩阵
vander(1:5) 产生1 2 3 4 5 向量为基础的范德蒙矩阵
hilb(n) n阶希尔伯特矩阵
compan(p) 伴随矩阵,其中p 为多项式的系数向量
矩阵变换
diag(A) | 提取矩阵A主对角线 形成列向量 |
---|---|
triu(A) | 提取主对角线及以上的元素 |
A .’ | 转置 |
A’ | 共轭转置 |
inv(A) | 求逆矩阵 |
矩阵求值
det(A) | 行列式 |
---|---|
rank(A) | 秩 |
trace(A) | 迹 |
矩阵特征值与特征向量
eig(A) | 全部特征值 |
---|---|
[X,D]=eig(A) | D为特征值构成的对角阵,X为对应特征向量 |
字符串
>>s ='banana' %单引号
>>s(1:3)
ans=
ban
字符串比较
按照ASCII码 逐个比较
>>'www0' >= 'W123'
ans=
1 1 1 0
字符串函数总结
abs(s) | 获取字符串s 中每个字符的ASCII码 |
---|---|
char(s) | 将ASCII码S 转换为字符串 |
strcmp(s1,s2) | 比较字符串s1 s2是否相等 |
strncmp(s1,s2,n) | 比较字符串s1 s2前n个字符是否相等 |
strcmpi(s1,s2) | 忽略大小写,比较字符串s1 s2是否相等 |
strncmpi(s1,s2,n) | 忽略大小写,比较字符串s1 s2前n个字符是否相等 |
findstr(s1,s2) | 返回短字符串在长字符串中的 开始位置 |
strrep(s1,s2,s3) | 将s1中所有s2替换为s3 |
基本语法
输入
>> A = input('请输入');
输出
>> s = 'Hello';
>> disp(s)
if-elseif-else-end
if 条件1
语句1
elseif 条件2
语句2
else
语句3
end
switch
switch 数值
case value1
语句1
case value2
语句2
otherwise
语句3
end
while
while 表达式
语句
end
for
for n=1:2:100
语句
end
函数文件的定义与调用
函数定义
在函数文件中
function 输出形参表 = 函数名(输入形参表)
函数体语句
% 有多个形参时,用逗号分隔,多个输出形参之间除了逗号,还需要 方括号括起来,构成输出矩阵
例:
求半斤为r的圆的周长与面积
function [s,p] = fcircle(r)
s = pi *r*r;
p=2*pi*r;
函数调用
[输出实参表]=函数名(输入实参表)
>>[s,p] = fcircle(10) % 调用并传入 r=10 实参
匿名函数
>>f = @(x,y)x^2+y^2 %别名 = @ (参数)表达式
>>f(3,4)
ans =
25
EXCEL 数据
读取
information=xlsread('1.xlsx') 读取excel表中 全部 数据信息
information=xlsread('1.xlsx','B2:D4') 读取excel表中B2:D4表格区域数据信息
绘图
二维曲线
折线
>>x=[2,3,1,3];
>>y=[1,3,1,1];
>>plot(x,y)
基本绘图
1. plot(x,y)
2. hold on
plot(x1,y1)
plot(x2,y2)
hold off
% hold on/off 是把两个曲线放在一个图中,不然只会绘制出x2,y2的图
3.subplot() 在一个figure上放多个plots -> 05初阶绘图1:11:36
美化
1.plot(x,y,'ok-') 绘制线条是圈圈黑色实线
2.plot(x1,y1,'ok-',x2,y2,'sb--',x3,y3,'dr:') 一幅图中绘制多个
legend('第一条曲线名称','第二条曲线名称','第三条曲线名称') 加图注,不然分不清哪条曲线是啥
3.title(‘图名称’)
4.xlabel(‘x轴名称’)
ylabel(‘y轴名称’)