Matlab基础操作
美赛备赛基础
一、基础命令/快捷方式
% clear all一个百分号是注释
%% Section 两个百分号是节(可以分节运行)
运行(运行整个代码)、运行并前进(一节一节的运行)
clc:清空命令行区
clear:清空工作区变量
close:关闭当前图像的窗口
Ctrl+C:强制停止(必须在命令行窗口)
Ctrl+R:注释 Ctrl+T:反注释
Ctrl+I:智能缩进
dpstop if error:建立变量缓冲区,在错误位置自动断点调试
二、数学运算
1.对数
log() 默认以e为底
log10() 以10为底
log(9)/log(3) 利用换底公式求任意底对数
2.指数
exp() 以e为底
pow2(10) 以2为底的指数
nextpow2() 寻找最大的n,是2n-1小于该值(偶尔会用)
3.三角函数
sin( )
cos( )
tan( )
asin( ) 弧度制
acos( )
atan( )
asind( )角度值(d代表角度)
acosd( )
atand( )
4.其他函数
mod( ) 求余数
rem( ) 与被除数符号相同的余数
sign( ) 符号函数
fix( ) 向0舍入
floor( ) 比它小的最大的整数
ceil( ) 比它大的最小的整数
round( ) 四舍五入
roundn(1.0072,-2) 任意位四舍五入
min( )
max( )
mean( ) 平均值
median( ) 中位数
prod( ) 求乘积
sum( ) 求和
var( )/std( ) 方差/标准差(matlab采取的是无偏的)
cov( ) 计算协方差
5.生成随机数
rand(2) 随机生成m个0-1的数,这里括号的2表示生成2个随机数
randi(n) 随机生成一个整数0-n
randn(1) 生成正态分布的随机数
sprand(10,10,0.5) 稀疏均匀分布随机矩阵
rng(‘default’) 随机种子
三、数据基础
realmax 最大值
realmin 最小值
数据过大,会返回inf(无限大)
nan非数
double、single类型
运算符优先级 ^ + -
四、矩阵基础(matlab核心)
1.特殊的矩阵(向量)
1:100(等价于1:1:100)
1:2:100 间隔为2
100: -1:1
[1,2,3] 逗号和空格行,回车和分号列
[1;2;3]
2.矩阵
zeros(10,20)
eye(10)
magic(10),10*10的幻方矩阵,每行每列的和都相等
rand(10),生成10*10的均匀分布随机矩阵
randn(10),生成10*10的正态分布随机矩阵
[xx,yy] = meshgrid(1:100,1:5),基矩阵
repmat(A,m,n),扩充矩阵
3.矩阵运算
A*B 矩阵相乘
A/B 矩阵右除
A\B 矩阵左除
A.*B 矩阵数乘
A./B 矩阵右数除
A.\B 矩阵左数除
对于数+或-矩阵,相当于矩阵的每个元素加减此数
inv(A) 求逆矩阵,必须是方阵
pinv(A) 求伪逆矩阵,非方阵
A’ 求转置
det(A) 求行列式
trace(A) 求行列式A的迹
lu(A) 矩阵A的LU分解
qr(A) 矩阵A的QR分解
eig(A) 矩阵A的特征值和特征向量
4.矩阵数据读取
size( ) 矩阵大小
length( ) 向量大小
A(m,n) 表示提取矩阵的第m,n处的值,matlab中起始值为1(不是0)
A(:,1) 第一列所有元素
A(end,1)最后一行第一列
Matrix_out=reshape(Matrix_in,m,n)
(先遍历行|再遍历列,元素个数一定要不变)
B=repmat(A,2,4) 矩阵扩充
5.补充:
-
使用GPU加速运算
A = gpuArray(rand(1e4))
B=A*A
-
稀疏矩阵
[(m,n),value]
sparse(m,n) 生成稀疏矩阵
sparse(A) 将矩阵A强制转化为稀疏矩阵
节省存储空间,对于严重稀疏矩阵可以加快运算速度
6.逻辑变量
logical(2) = 1
==|~=|<|<=|>|>=
isnan( ) 是否非数
isint( ) 是否为无穷大
isempty( ) 是否为空
isreal( ) 是否为实数
& 逻辑与
| 逻辑或
&& 逻辑与(标量,只能用与两个数)
-
|| 逻辑或(标量,只能用与两个数)
- 逻辑非
xor 逻辑异或
all 向量全部元素非0为真 all([1,1,1,1])
any 向量存在元素非0为真
for循环
for ii = 1 : 10
for jj = 1: 10
矩阵尽量提前估计好大小(能提高效率,如果越界赋值,比较耗时间)
计算时间
tic
#代码
toc
-
多线程
parfor可以用来加速,不能存在耳机循环结构
是并行体系,其不同循环中数据不能冲突
parfor中不能使用break/continue
第一次启动会比较慢,一旦启动会比较快
五、函数
function [输出形参表:output1,output2,...]=函数名[输入形参表:input1,input2...,]
#函数题代码部分
end
函数的名字和.m文件名字相同,不要随意改动文件名字,可能会产生调用问题
nargin:输入参量的个数
function c = addme(a,b)
if nargin==1
b=1;
end
c=a+b;
end
忽略不想要的输出 用 ~表达式
function [c1,c2] = opme(a,b)
if nargin<2
b=1;
end
c1=a+b;
c2=a-b;
end
[~,c]=opme(a,b)
[c,~]=opme(a,b)
-
特殊形式
函数句柄(类似于c指针)
fun1=@opme;
[a,b]=fun1(1,1)
用@来创建匿名函数,可以减少m文件的创建
fun2=@(x,y)(x+y);
fun2(1,1)
eval表达式,把字符串组成的代码编程代码
eval(['I',num2str(ii)])
-
符号运算式
syms构建函数