c语言fmin最小公倍数,matlab小函数

66b52468c121889b900d4956032f1009.png

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); %全部元素排序

矩阵幂运算与矩阵函数

D:Blogblogsource_posts%E5%9B%BE%E7%89%87%E7%9F%A9%E9%98%B5%E5%B9%82%E8%BF%90%E7%AE%97%E4%B8%8E%E7%9F%A9%E9%98%B5%E5%87%BD%E6%95%B0.png

胞元数组

内容援引: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

符号绘图

D:Blogblogsource_posts%E5%9B%BE%E7%89%87%E7%AC%A6%E5%8F%B7%E7%BB%98%E5%9B%BE.png各种例子详见第四课课件

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(运算表达式):对其中的每一个运算都控制精度,并非只控制结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值