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(運算表達式):對其中的每一個運算都控制精度,并非只控制結果