数据分析与多项式计算

数据统计分析

max():求向量或矩阵元素的最大值。

min():求向量或矩阵元素的最小值。

当参数为向量时:

y = max(X):返回向量 X 的最大值存入 y,如果 X 中包含复数元素,则按模取最大值。

[y, k] = max(X):返回向量 X 的最大值存入 y,最大值元素的序号存入 k,如果 X 中包含复数元素,则按模取最大值。

当参数为矩阵时:

max(A):返回一个行向量,向量的第 i 个元素是矩阵 A 的第 i 列上的最大值。

[Y, U] = max(A):返回行向量 Y 和 U,Y 向量记录 A 的每列的最大值,U 向量记录每列最大值的行号。

max(A, [], dim):dim 取 1 或 2。dim 取 1 时,该函数的功能与 max(A) 完全相同;dim 取 2 时,该函数返回一个列向量,其第 i 个元素是 A 矩阵的第 i 行上的最大值。

求矩阵的最大值:

1
>> max(max(A))
1
>> max(A(:))

mean():求算术平均值。

median():求中值。

sum():求和函数。

prod():求积函数。

cumsum():累加和函数。

cumprod():累乘积函数。

标准差:

std():计算标准差函数。

调用格式:

std(X):计算向量 X 的标准差。

std(A):计算矩阵 A 是各列的标准差。

std(A, flag, dim):flag 取 0 或 1,当 flag = 0 时,按 S1 公式计算样本标准差;当 flag = 1 时,按 S2 公式计算总体标准差。默认情况下,flag = 0,dim = 1。

生成满足正态分布的 50000 * 4 随机矩阵,用不同的形式求其各列之间的标准差。

1
2
3
4
5
6
7
8
x = randn(50000, 4);
y1 = std(x, 0, 1);
y2 = std(x, 1, 1);
x1 = x';
y3 = std(x1, 0, 2);
y3 = y3';
y4 = std(x1, 1, 2);
y4 = y4';

相关系数:

corrcoef()

调用格式:

corrcoef(A):返回的相关系数矩阵的第 i 行第 j 列元素表示矩阵 A 中第 i 列和第 j 列的相关系数。

corrcoef(X, Y):这里 X,Y是向量。

排序:

sort()

调用格式:

sort(X):对向量 X 按升序排序。

[Y, I] = sort(A, dim, mode):其中 dim 指明对 A 的列还是行进行排序,mode 指明升序还是降序排序,若取 “ascend”,则按升序;若取 “descend”,则按降序。默认为升序。输出参数中,Y 是排序后的矩阵,I 记录 Y 中元素在 A 中的位置。

多项式计算

多项式乘法

conv(P1, P2):P1,P2是多项式系数向量。

多项式除法

[Q, r] = deconv(P1, P2):Q 返回多项式 P1 除以 P2 的商式,r 返回 P1 除以 P2 的余式。

多项式的求导

polyder()

p = polyder(P):求多项式 P 的导函数。

p = polyder(P, Q):求 P*Q 的导函数。

[p, q] = polyder(P, Q):求 P/Q 的导函数。导函数的分子存入 p,分母存入 q。

多项式的求值

polyval(p, x):代数多项式求值。p 为多项式系数向量,x 可以是标量、向量或矩阵。

polyvalm(p, x):矩阵多项式求值。x 为方阵。

多项式求根

roots(p):p 为多项式系数向量。

若已知多项式的全部根,则可以用 poly 函数建立起该多项式:p = poly(x)。

求多项式 - 38.89 t^2 + 126.11 t - 3.42 的极大值:

1
2
3
4
5
6
p = [-38.89, 126.11, -3.42];
q = polyder(p);
a = roots(q);
b = polyval(p, a);
x = 0:0.1:2;
plot(x, polyval(p, x), a, b, 'rp')

数据插值

数据插值可以根据有限个点的取值状况,合理估算出附近其他点的取值,从而节约大量的实验和测试资源。数据插值是一种函数逼近的方法。

interp1():一维插值函数。

Y1 = interp1(X, Y, X1, method)

根据 X,Y 的值,计算函数在 X1 处的值。其中,X,Y是两个等长的已知向量,分别表示采样点和采样值。X1 是一个向量或标量,表示要插值的点。

1
2
3
4
5
x = [0,3,5,7,9,11,12,13,14,15];
y = [0,1,2,1.7,2.0,2.1,2.0,1.8,1.2,1.0,1.6];
x1 = 0:0.1:15;
y1 = interp1(x, y, x1, 'spline');
plot(x1, y1)

method 用于指定插值方法,常用的取值有以下四种:

linear:线性插值,默认方法。将插值点与靠近的两个数据点用直线连接,然后在直线上选取对应插值点的数据。

nearest:最近插值点。选择最近样本点的值作为插值数据。(如果是中间点,则取后一个数据点的值)

pchip:分段 3 次埃尔米特插值。采用分段三次多项式,除满足插值条件,还需满足在若干节点处相邻段插值函数的一阶导数相等,使得曲线光滑的同时,还具有保形性。

spline:3 次样条插值。每个分段内构造一个三次多项式,使其插值函数除满足插值条件外,还要求在各节点处具有连续的一阶和二阶导数。

为什么这两种插值方法都用 3 次多项式而不用更高次的?

多项式次数并非越高越好。次数越高,越容易产生震荡而偏离原函数,这种现象称为龙格(Runge)现象。

interp2():二维插值函数

Z1 = interp2(X, Y, Z, X1, Y1, method)

其中,X,Y 是两个向量,表示两个参数的采样点,Z 是采样点对应的函数值。X1,Y1 是两个标量或向量,表示要插值的点。

曲线拟合

1
2
3
4
5
6
x = 1790:10:2020;
y = [...]; # 此处数据省略。。。
plot(x, y, '*')
p = polyfit(x, y, 3);
polyval(p, 2020)
plot(x, y, '*', polyval(p, x))

与数据插值类似,曲线拟合也是一种函数逼近的方法,但是拟合出的曲线不一定经过所有样本点。

曲线拟合的原理:最小二乘法

polyfit():多项式拟合函数。可求得最小二乘拟合多项式系数。

调用格式:

P = polyfit(X, Y, m)

[P, S] = polyfit(X, Y, m)

[P, S, mu] = polyfit(X, Y, m)

根据样本数据 X 和 Y,产生一个 m 次多项式 P 及其在采样点误差数据 S,mu 是一个二元向量,mu(1) 是 mean(X),而 mu(2) 是 std(X)。

Author

preccrep

Posted on

2020-07-26

Updated on

2020-07-26

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.
You need to set client_id and slot_id to show this AD unit. Please set it in _config.yml.