8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
(记得按字母序索引)
矩阵向量化操作
A(:)
拉成一个向量 ($a_{11},a_{21},…$),注意先列后行
repmat用途:创建由小型矩阵重复组合成的矩阵,比如各行向量相同的矩阵
例子1A = repmat(1:5, 5, 1)运行结果:
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
find用途:把满足find条件的下标揪出来. 当返回值只有一个时返回全下标,两个时则返回下标对 .
注意这里的全下标是指先数列再数行,如在3*3矩阵中,$a_{13}$的全下标为3,$a_{31}$的全下标为7.
例子1
2
3
4A = [1,-3,-4;4,3,-9];
B = find(A > 0);
C = find(mod(A, 2)==0);%揪出偶数
[r,c] = find(A > 0);
运行结果
A =
1 -3 -4
4 3 -9
B =
1
2
4
C =
2
5
r =
1
2
2
c =
1
1
2
(即(1,1),(2,1),(2,2)元素为所找元素)
reshape用途:把给定矩阵(通常是向量)按自己需要的方式(具体指行列维数)重新塑造成矩阵 .
例子1A = reshape(1:10,2,5);
运行结果:
A = 1 3 5 7 92 4 6 8 10
inv用途:矩阵求逆 .
注意:不可逆矩阵用inv时会显示inf矩阵
randn用途:生成正态分布随机矩阵
例子1A = randn(3,4);
A = 0.5377 0.8622 -0.4336 2.76941.8339 0.3188 0.3426 -1.3499
-2.2588 -1.3077 3.5784 3.0349
rand用途:生成 [0, 1] 均匀分布的矩阵
例子1A = rand(3,4);
A= 0.9572 0.1419 0.7922 0.03570.4854 0.4218 0.9595 0.8491
0.8003 0.9157 0.6557 0.9340
randi用途:rand integer,即生成指定区间的整数的均匀分布的随机矩阵
例子1A = randi([0,3], 3, 3)
A = 2 1 23 2 0
2 0 1
对矩阵元素排序1
2
3
4
5A = [5,1,7;2,8,6;9,3,4];
A1 = sort(A); %列升序
A2 = sort(A,'descend') %列降序
A3 = sort(A,2) %行升序
A4 = reshape(sort(A(:)),3,3); %全部元素排序
矩阵幂运算与矩阵函数
胞元数组
内容援引:a{k}=5, b{k}=’r’
援引:显示胞元类型,a(k)=double, b(k)=string
符号矩阵分析
A.’(转置)与A’(共轭转置)
共轭矩阵
conj(A)
det(A)
求行列式
diag(A)当A为向量,则生成矩阵 $diag(a_1,dots a_n)$;
当A为矩阵,则提取其对角元构成向量。
expm(A)
计算A的指数矩阵(将其对角化后取指数再复原)
A的最大维度大小(若A为向量,则返回长度)
length(A)
ndims(A)
返回A的维数
A所含元素总数
numel(A)
每一维大小(行*列)
size(A)
rank(A)
计算A的秩
化为下三角矩阵
tril(A)
[V, D] = eig(A)
返回特征值,特征向量 (默认显示所有特征值和特征向量,特征值的顺序是乱的)
eigs(A)1
2
3
4
5
6
7
8rng default;
A = rand(4);
[~,D2] = eigs(A,3,'lm'); %绝对值最大的3个特征值
[~,D3] = eigs(A,3,'sm'); %绝对值最小的3个特征值
[~,D4] = eigs(A,3,'lr'); %实部最大的3个特征值
[~,D4] = eigs(A,3,'sr'); %实部最小的3个特征值
[~,D4] = eigs(A,3,'li'); %虚部最大的3个特征值
[~,D4] = eigs(A,3,'si'); %虚部最小的3个特征值
poly(A)
返回方阵 A 的特征多项式!
[V, J] = jordan(A)
返回特征值,jordan标准形(等式左边为一个返回值时,返回前面那一个,即特征值)
满足 $V^{-1}AV=J$
[U, S, V] = svd(A)
奇异值分解,$S=U^*AV$
[L, U] = lu(A)
LU分解
[Q, R] = qr(A)
QR分解
求雅可比矩阵
jacobian(f, v) 求函数(向量) f 关于变量(向量)v 的雅可比矩阵 .
注意!这里的 f, v 一般不是一个变量,而是变量向量,示例如下:1
2syms x y z
jacobian([x*y*z, y^2, x + z], [x, y, z])
稀疏矩阵
生成n阶单位稀疏矩阵
speye(n)
基于三元组表示法将大矩阵转化为稀疏矩阵
B=sparse(A)
翻转矩阵
上下翻转(以中间行为镜子,上下对应的行交换位置)
flipud(A) (即flip up down)
左右翻转(以中间列为镜子,左右对应的列交换位置)
fliplr(A) (即flip left right)
逆时针旋转 $90^o$的整数倍
rot(A, 2) 即旋转两个90°
方程(组)符号解
线性方程组可直接Ab
解线性方程组 AX=b
一般方程组:solve
solve(eqn_1,…eqn_k, x, y)
前面是符号表达式的方程(若为仅为表达式则默认等于解Eqn=0),后面是希望解出来的变量
代码示例:
解方程 $x^2+y^2=1,xy=2$1
2
3
4syms x y;%需要定义符号变量
eqn1 = x^2+y^2==1;
eqn2 = x*y==2;
[x,y] = solve(eqn1,eqn2,x,y);
两种调用方式:solve(f == 1, x)
solve(f - 1, x)
多项式求根
求 $x^3+4x+5=0$ 的根:1
2
3
4
5
6
7
8p = [1,0,4,5];
R = roots(p);
%若需要求实根
syms x real
f = x^3+4*x+5;
R1 = solve(f);
%也可以
R_real = R(imag(R==0))
绘图
逐点绘图
meshgrid用途:生成一组配对的(x, y)点,供绘图采样用. (也可以生成三维点)
相当于x轴方向划几条线,y轴方向画几条线,以交点为采样点
例子:1[X,Y] = meshgrid(1:3,10:15);
X =
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
Y =
10 10 10
11 11 11
12 12 12
13 13 13
14 14 14
15 15 15
plot
符号绘图
各种例子详见第四课课件
ez 系列可以字符串绘图也可以符号表达式绘图;f 系列不支持字符串,只能符号表达式绘图。
二维平面(符号)绘图:ezplot, fplot, ezpolar
三维曲线(符号)绘图:ezplot3
空间曲面(符号)绘图:ezsurf(c), ezmesh(c), fsurf(c)。 加 ‘c’ 表示底面加等位线
fplot VS ezplot : fplot无bug;ezplot 可能有 bug。但是后者有自动title, 坐标范围会自动调整,前者默认[-5,5]。
ezplot(y)
ezplot(f(x,y), [a, b], [c, d]) %隐函数 $f(x,y)=0$
ezplot(x(t), y(t) , [a, b])
ezmesh , ezsurf, fsurf 大致相同,且都画不了隐函数
ezmesh(z(x, y), [a, b, c, d])
ezmesh(z(x, y), [a, b]) 注意是 $x,yin[a,b]$
ezmesh(x(s, t), y(s, t), z(s, t))
plot3(x(t), y(t), z(t), ‘b-‘)
数值微分
diff输入:一个 n 维列向量(即函数值的n个采样点)
输出:一个 n-1 维列向量(由于使用向前差分,所以得到的差值点的列向量中,少了最后那个点的导数)
原理:向前差分。即 diff(y) 等价于 y(2:end) - y(1:end-1)
例子1
2
3
4
5d = pi/100; %选用的步长最好整除区间长度,否则最后那个点有点尴尬
x = 0:d:pi;
y = sin(x);
dx = diff(y);
dydx = dx/d; %得到导数值列向量
gradient输入:与 diff 完全一样
输出:一个 n 维列向量(第一个点用向前差分,最后一个用向后差分,其余点用中心差分)
原理:中心差分。gradient(y) 等价于 $frac{ y(3:end) - y(1:end-2)}{2}$
例子1
2
3
4
5d = pi/100; %选用的步长最好整除区间长度,否则最后那个点有点尴尬
x = 0:d:pi;
y = sin(x);
dx = gradient(y);
dydx = dx/d; %得到导数值列向量
符号微分
diff
diff(f, v, n) 计算 f 关于 v 的n阶导数.
符号极限
limit(符号表达式,极限变量,极限值,’left’) : 左极限
数值求和
sum输入:矩阵或行(列)向量
输出:若输入为行(列)向量,则输出为向量元素之和;若输入为矩阵,则输出为各列求和得到的的行向量(sum(A, 1)),或各行求和得到的的列向量(sum(A, 2))
符号求和
symsumsymsum(符号表达式(求和通项),求和变量,下界,上界)
代码示例:
计算 $Sigma_{k=0}^{n} a^kb^{n-k}$1
2
3
4syms a b n k;
x = a^n;
y = b^n;
s = symsum(subs(x,n,k)*subs(y,n,n-k),k,0,n);%经常要结合subs使用
数值积分
常用方法及适用场景:梯形公式:
辛普森公式:
蒙特卡洛法:高维积分(概率算法,精度较低,但复杂度低)
trapz输入:trapz(y) ,y 是函数值采样点的行(列)向量;trapz(x, y),多加的 x 是对应 y 的自变量采样点的向量
输出:前者输出$Sigma[ f(x_i)+f(x_{i+1}) ]$的结果(第一个和最后一个只加了一次);后者直接输出积分结果
原理:梯形积分
代码示例:1
2
3
4d = pi/1e5;
t = 0:d:pi; %1e5+1个采样点
yt = t./sin(t).^3;
yt_int = trapz(t,y); % 或者trapz(y)*d
integral
integral (fun, xmin, xmax)1
2
3
4
5
6fx=@(x)exp(-abs(x)).*abs(sin(x));
a1=integral(f,-5.*pi,10.*pi,'RelTol',1e-6,'AbsTol',1e-9);%相对误差为默认的10^(-6)
a2=integral(f,-5.*pi,10.*pi,'RelTol',1e-8,'AbsTol',1e-9);%相对误差为10^(-8)
a3=integral(f,-5.*pi,10.*pi,'RelTol',1e-10,'AbsTol',1e-9);%相对误差为10^(-10)输入:匿名函数句柄,积分下限及上限(支持广义积分),(可选)相对误差控制,绝对误差控制
输出:数值积分值
原理:商业机密,不可见
数值微分方程(差分方程)
符号微分方程
dsolve
计算定解问题 $xy^{‘’}-3y’=x^2, y(1)=y(5)=0 .$1
2
3
4syms y(x)
eqn = diff(y,x,2)*x-3*diff(y,x)==x^2;
cond = [y(1)==0,y(5)==0];
solu = dsolve(eqn,cond)
上面的例子中,eqn 也可以是一个方程组 [eq1, eq2, …]
三大变换
傅里叶变换fourier(f(t), t, s)
ifourier(F(s), s, t)
拉普拉斯变换
用法与傅里叶变换一致
Z变换Z变换定义:$F(z)=Sigma_{n=0}^{infin}f(n)z^{-n}$
Z变换的逆变换定义:$f(z)=int_Gamma F(z)z^{n-1}dz$
意义:描述了离散序列 f(n) 的复频率域信息
用途:可以将差分方程转化为代数方程(对应于傅里叶,拉普拉斯变换将微分方程转化为代数方程)
代码示例:(Z变换求离散卷积)1
2
3
4
5
6syms a b n k w z
assume(a~=b);assumeAlso(a~=0);assumeAlso(b~=0);
%a 与 与 b 不为 0 的显示更加简练(其实 a 或 或 b 为 为 0 也应该对的,这是 MATLAB 处理不到位)
X=ztrans(a^k,k,z);
H=ztrans(b^k,k,z);
w=iztrans(H*X,z,k);
Taylor展开
taylor( f ) :返回 f 在 0 点的 5 阶麦克劳林展开。
taylor( f, x, a, ‘Order’, 10):返回 f 在 x = a 的 9 阶 Taylor 展开 。
注意!需要先定义符号变量 syms
函数极值
fminbnd
[x, fval, exitflag] = fminbnd(fun, x1, x2)
功能:求一元函数 fun 在区间[x1, x2] 内的极小值
参数:x 为极小值点;fval为极小值;exitflag>0 为找到极小值标志
fminsearch
[x, fval, exitflag]=fminsearch(fun, x0)
功能:求多元函数从 x0 出发的局部极小值
注意!多元函数的输入要用向量 x(1), x(2) 而不是 x, y,如以下代码:1
2
3
4
5
6ff=@(x)(100*(x(2)-x(1)^2)^2+(1-x(1))^2);
% 函数句柄 ,@(x)的 x 为输入的向量, 利用两个元素分别进行计算
syms x y,ezsurfc(ff([x1,x2]),[-2,2,-2,2]) % 将横纵坐标x1,x2 认定为
ff 二维自定义变量,即可进行surfc
x0=[-5,-2,2,5;-5,-2,2,5]; % 设立 4 种不同的搜索起点 ( 每一种为列向量
[sx,sfval,sexit,soutput]=fminsearch(ff,x0)
结果:1
2
3
4
5
6
7
8
9
10
11% 收敛到了四种不同的解 , 但仅有第一个x=1,y=1是正确的
sx = 0.99998 -0.68971 0.41507 8.0886
0.99997 -1.9168 4.9643 7.8004
%sfval 显示所有极小值中最小的一个
sfval = 2.4112e-10
sexit = 1
soutput =
iterations: 384
funcCount: 615
algorithm: 'Nelder-Mead simplex direct search'
message: '优化已终止:…’
fminunc
功能,用法与fminsearch 相同,效果通常好于后者
最速梯度下降法
【例】用梯度下降法求𝑓 𝑦,𝑧 = 100 𝑧 − 𝑦 2 2 + 1 − 𝑦 2 的极小值点1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20clear,clc
ff=@(x,y) (100*(y-x^2)^2+(1-x)^2);% 函数及其导数
dff =@(x,y) [2*x - 400*x*(- x^2 + y) - 2;- 200*x^2 + 200*y];
x0 = -5; y0 = -2; % 初始条件(可改变)
x_old = x0;y_old = y0;iter=0;
while(1)
iter = iter+1;
Grad = dff(x_old,y_old); % 梯度方向的获得
lsf = @(lambda) ff(x_old-lambda*Grad(1),y_old-...
lambda*Grad(2)); % 生成对应方向关于步长的一元函数
[lambda,~]=fminbnd(lsf,0,10);% 搜索最佳步长
x_new=x_old-lambda*Grad(1);
y_new=y_old-lambda*Grad(2);
if(abs(x_new-x_old)<1e-8 && abs(y_new-y_old)<1e-8)
break; % 当x 与y 均保持稳定时结束迭代
end
x_old = x_new;y_old = y_new;
end
iter,x_new,y_new
err = ff(x_new,y_new)-0
线性方程组
pcg(A,b,tol)
求解 AX=b,tol 是误差 tolerance
(带有简单的病态预处理)
非线性方程(组)
fzero
[x, fval] = fzero(fun, x0)
以 x0 为初值寻找 fun 的一个零点;
注意 fun 必须是匿名函数或函数句柄!
fsolve
[x, fval] = fsolve(fun, x0)
fun 是函数向量,找函数向量 fun 的一个零点
概率统计
rng default
伪随机。将随机流恢复至 matlab 启动时的默认状态,即可以再现的随机
rng shuffle
真随机。将随机流根据时间变量进行设置,任何一次随机均无法再现,但可以确保测试结果可以与之前已有的测试结果进行累加
rand, randn, randi
rand(m, n):生成 m*n 的均匀分布矩阵
randn(m, n):标准正态分布
randi( [min_int, max_int], m, n):[min_int, max_int]之间的整数均匀分布
binopdf, binocdf, binornd
normpdf, normcdf, normrnd
disttool
makedist1
2
3
4
5
6
7
8
9
10
11
12
13
14>> pd=makedist('Poisson',lambda)
>> pd =
PoissonDistribution
Poisson distribution
lambda = 2
>> pdf(pd,0:3)
ans =
0.1353 0.2707 0.2707 0.1804
mean
mean(A) 计算矩阵 A 各列均值与中位值,返回一个向量(若A 为向量则返回各分量平均值)
median
与 mean 用法相同
std, var
样本标准差,样本方差
cov
cov(X) 计算以矩阵各列组成的列向量的协方差矩阵
如:第(i, j) 个元素代表第 i 列 与 第 j 列这两个列向量之间的协方差
corrcoef
corrcoef 计算以矩阵各列组成的列向量对应的相关系数
如:第(i, j) 个元素代表第 i 列 与 第 j 列这两个列向量之间的相关系数
多项式拟合
polyfit
p = ployfit(x, y, n)
x, y 为维数相等的两个向量(对应的一组坐标);n 为设定的拟合阶数
返回多项式系数向量代码示例1
2
3
4
5
6
7x0=0:0.1:1; %11 点均匀采样
y0=[-.447,1.978,3.11,5.25,5.02,4.66,4.01,4.58,3.45,5.35,9.22];
n=3;P=polyfit(x0,y0,n) %3 次采样 , 共4 个系数 , 从高次到低次
P = 56.6915 -87.1174 40.0070 -0.9043
xx=0:0.01:1;yy=polyval(P,xx);
plot(xx,yy,'-b',x0,y0,'.r','MarkerSize',20)
legend(' 拟合曲线',' 原始数据','Location','SouthEast'),xlabel('x')
polyval
y1 = polyval(p, x0)
将向量 x0 代入多项式 p 中得到一组拟合 y 值 (向量)1
2
3
4
5
6
7y1 = polyval(P,x0); % 观察11 个采样点的拟合值
disp([' 平方逼近误差为',num2str(norm(y1-y0,2))])
平方逼近误差为1.8653
disp([' 一致逼近误差为',num2str(norm(y1-y0,inf))])
一致逼近误差为0.95592
T=table(x0',y0',y1',y1'-y0',...
'VariableNames',{'X', 'Y', 'Fit', 'FitError'})%
结果:1
2
3
4
5
6
7
8
9
10
11
12
13
14T =
X Y Fit FitError
___ ______ ________ _________
0 -0.447 -0.90431 -0.45731
0.1 1.978 2.2819 0.3039
0.2 3.11 4.0659 0.95592
0.3 5.25 4.7879 -0.46211
0.4 5.02 4.788 -0.23204
0.5 4.66 4.4063 -0.25372
0.6 4.01 3.983 -0.027002
0.7 4.58 3.8583 -0.72174
0.8 3.45 4.3722 0.92223
0.9 5.35 5.865 0.51503
1 9.22 8.6768 -0.54316
最小二乘法拟合及其变种
岭回归
表达式:2 - 范数 衡量误差,2 - 范数 衡量系数稀疏性
LASSO
表达式:2 - 范数 衡量误差,1 - 范数 衡量系数稀疏性
适用:拟合时考虑系数的稀疏性(即尽量多的绝对值小的系数)
LAR(最小绝对残差)
表达式:1 - 范数衡量误差
适用:对离群值的处理较好(公交车站)
cftool(matlab自带拟合工具箱)的使用
weight
是一个向量,给误差加权
最小化目标变成 min||W(AX - b)||1
2Weight=ones(1,11);
Weight(5)=100;%使样本数据中的第五个点几乎无误差
数字信号处理信号的数字化需要3个步骤:抽样,量化,编码
噪声:信号传输目标认定为无效或干扰的部分
信噪比(SNR):SNR 即 “signal to noise ratio” ,顾名思义,就是信号与噪声的比值: $10cdot log_{10}frac{Sigma f^2(x)}{Sigma[y-f(x)]^2}$。是衡量去噪效果的一种尺度。 matlab 函数为:snr(signal, noise)
去噪方法:(根据什么选择方法?1.噪声类型和强度;2. 目标函数(真实信号值))
smooth
f1 = smooth(y)
对离散信号向量 y 使用均值滤波得到向量 f1 ,默认为五点均值滤波
conv
f1 = conv(y, [权值向量], ‘same’)
权值向量的维度是多少,就是多少点的均值滤波
二维曲线与图
area(Y)1
2
3
4
5
6Y = [1, 5, 3;
3, 2, 7;
1, 5, 3;
2, 6, 1];
figure
area(Y)
把矩阵 Y 的每一列看成一条线,画 3 条折线(横坐标为 1,2 3 4 )
效果:
plot
axis on :使用轴背景
axis off :取消轴背景
axis equal:横纵轴采用等长刻度
axis square:调整 x, y轴刻度使得图示接近正方形
axis image:横纵等长刻度且坐标轴框贴紧画出来的线
axis tight:把 x, y 范围直接设为坐标范围
xlabel(’期末成绩’)
xticks:
xtickslabel(‘Score’)
text(x, y, ‘压力老大爷’)
fontname{Roman}
fontsize{4}
approx
partial
plotyy1
2
3
4
5
6
7
8
9
10
11
12
13x = 0:0.01:20;
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
figure % new figure
[hAx,hLine1,hLine2] = plotyy(x,y1,x,y2);
%图柄,后面设置y坐标名字要用
title('Multiple Decay Rates')
xlabel('Time (musec)')
ylabel(hAx(1),'Slow Decay') % left y-axis
ylabel(hAx(2),'Fast Decay') % right y-axis
傅里叶变换
连续傅里叶变换
离散傅里叶变换
定义:
”低频系数“:Y(1)
”高频系数“:除了Y(1)之外的所有值(Y(2), Y(3),……)
fft(X)
ifft(Y)
去噪方法:保留大于阈值的系数,砍掉小于阈值的系数
效果:傅里叶变换对于三角函数去噪效果极佳,因为三角函数在此
变换系数满足完美稀疏,对于分片光滑函数效果则一般,根据 目标函数特性 选择 合适变换及约束(正则化)方法 很关键
声音信号
audioinfo
[y, Fs] = audioread
y是声音的数字信号,两列分别为左右声道
Fs 是采样率(44100个连在一起的离散信号构成了一秒的声音)
sound(y, Fs)
按采样率 Fs 播放 y
audiowrite(‘Drown.flac’, y, Fs)
将声音写入文件
多项式表示与运算
多项式表示为向量(系数降幂 排列)
conv(a,b)1
2N = conv([3 0 1],[1 0 3 1]);
D = conv([2 3],[2 0 3]);
[Q,r] = deconv(N,D)1[Q, r] = deconv(N,D) %计算 N%D 的带余除法,即N=QD+r
回代验证误差:易错!因为 余式 维数不确定!1
2
3
4
5m = length(r);
N1 = conv(Q, D);
N1(end - m + 1 : end) = N1(end - m + 1 : end) + r;
norm(N1 - N) % 绝对误差
norm(N1 - N)/norm(N) %相对误差
roots(f)
返回多项式 f(x)的零点向量
poly(r)
输入:零点向量[x1, x2, … ,xn]
输出:多项式(x-x1)(x-x2)…(x-xn)
polyval(p, X)
与前面向量类似,将矩阵 X 中的每个值代进去 多项式 p 中,输出相同大小的矩阵(p($x_{ij}$))
polyvalm(p, X)
即polyval matrix
矩阵多项式(如 ODE 基解矩阵)
poly2str(p, ‘x’)1
2q = [2 2 3]
poly2str(q,'s')
胞元矩阵
一言以蔽之,就是元素可以是不同类型的矩阵。如:1
2
3
4
5
6clear
C_str='例 这是胞元数组创建算例 1'; %
R=reshape(1:9,3,3);
Cn=[1+2i];
syms t, S_sym=sin(-3*t)*exp(-t);
B{1,1}=C_str; B{1,2}=R;B{2,1}=Cn;B{2,2}=S_sym;%四个元素类型不同
两种援引元素的方式:B(1, 2)援引元素类型
B{1, 2}援引元素内容(即元素本身)
如:1
2
3
4
5a = B(1,2)
class(a)
输出:a = [3*3 double]
ans = cell1
2
3
4
5
6
7b = B{1,2}
class(b)
输出:b = 1 4 7
2 5 8
3 6 9
ans = double
应用实例:
注意给胞元赋值时是:A(2,1) = {‘David’} 或 A{2,1} = ‘David’1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20clear;
%满分(100) ,优秀(90-99) ,良好(80-89) ,及格(60-79) ,不及格(<60)
for k=1:10
a(k)={89+k};b(k)={79+k};c(k)={69+k};d(k)={59+k};% 每个胞元是数
end;
c=[d,c];%60~69 与70~79 归为同一类
% 输入学生的名字和分数
A=cell(3,5); %A 也定义成胞元数组
A(1,:)={'Jack','Marry','Peter','Rose','Tom'};
A(2,:)={72,83,56,94,100};
% 根据学生的分数 , 求出相应的等级 。
for k=1:5
switch A{2,k} % 对A{2,k} 进行判断
case 100,r=' 满分';
case a,r=' 优秀'; % 若A{2,k} 出现在胞元数组a 中 , 即介于90 和99 之间
case b,r=' 良好';
case c,r=' 及格';
otherwise,r=' 不及格';% 其余情况 , 结果字符串r 为’ 不及格’
end
A(3,k)={r}; % 将胞元数组A
小技巧
如何避免代入pi 时出现莫名其妙的大分数?用 sym(pi) ,且越靠里越好!1
2a = sym(1/pi);
b = 1/sym(pi);
运行结果:
a = 5734161139222659/18014398509481984;
b = 1/pi .
mod与rem
都是返回整除余数,但符号mod看除数rem看被除数1
2mod(-2,3) = 1; rem(-2,3) = -2
mod(3,-2) =
命令窗备忘clf(clear figure):清楚图形窗口
clc(clear command):清楚指令窗中显示内容
clear:清楚 matlab 工作空间中保存的变量
doc:在 matlab浏览器中显示帮助信息
edit:打开 M文件编辑器
help:在指令窗中显示帮助信息
close all :关闭所有弹出窗口
helpwin :在弹出窗口中显示帮助信息
format short:通常保证小数点后4位有效,最多不超过7位。对于大于1000的实数用5位有效数字科学计数法显示
format long:小数点后15位有效数字表示
format short e:5位科学计数法表示
format long e:16为科学计数法表示
format long g:从 format long 和format long e 中自动选择最佳
format rat:近似有理数表示
format hex :十六进制表示
whos:显示所有内存变量类别
isa(a, ‘sym’):判断变量类型
digits:显示当前vpa命令的截断位数(用于规定运算精度)
digits(n):设置vpa 命令的截断位数为n
vpa(运算表达式):对其中的每一个运算都控制精度,并非只控制结果