Matlab:数据分析与多项式计算

STM32CubeMX

Matlab

2021数模国赛

数据分析

在实际应用中,经常需要对各种数据进行统计处理,以达到科学决策提供依据的目的。而这些统计处理包括求数据序列的最大值和最小值、平均值和中值、和与积、累加和与累乘积、标准差、方差、相关系数与协方差、排序等,Matlab提供了相关的函数来实现。

监控

求最大值与最小值

max函数用于对数据序列求最大值;min函数用于求一个数据序列的最小值,其用法与max函数相同。

jdk动态代理使用

调用格式
Number_max = max(x),其中,若x是向量,则返回向量X的最大值;若x是矩阵,则返回一个包含每一列最大值的行向量。
[Number_max,U] = max(x,[],dim),dim表示维数,沿维度dim返回最大值。即如果x是一个矩阵的话,dim取1表示找这个矩阵中各列的最大值,dim取2表示找这个矩阵中各行的最大值。

airtest

%示例:

>> x = [15 18 98;102 913 202;25 68 75];
>> Number_max = max(x); %求矩阵x中各列元素的最大值
>> Number_min = min(x); %求矩阵x中各列元素的最小值
>> Number_max2 = max(x,[],2); %求矩阵x中各行元素的最大值
>> disp(Number_max)
   102   913   202

>> disp(Number_min)
    15    18    75
    
>> disp(Number_max2)
    98
   913
    75   

同时,函数max与min还能对两个同型的向量或矩阵进行比较,其用法相同。
调用格式
max(x,y):返回值是与x、y同型的向量或矩阵,其中的每个元素为x、y对应元素的较大者。
max(x,n):n是一个标量,返回值是与x同型的向量或矩阵,其中的每个元素为x对应元素或n的较大者。

基础入门教程

%示例:
>> x = [15 18 98;102 913 202;25 68 75];
>> y = [98 23 19;23 88 80;12 88 99];
>> max(x,y)

ans =

    98    23    98
   102   913   202
    25    88    99

>> n = 68; %标量
>> min(x,n)

ans =

    15    18    68
    68    68    68
    25    68    68

求平均值与中值

mean函数用于对数据序列求平均值;median函数用于对数据序列求中值,其用法与mean函数相同。
调用格式
m = mean(x),其中,如果x是一个向量,则返回向量的算术平均值;如果x是一个矩阵,则返回一个行向量,其第i个元素是x的第i列的算术平均值。
m = mean(x,dim),其中,当dim为1(默认值)时,该函数等同于mean(x);当dim为2时,返回一个列向量,其第i个元素是x的第i行的算术平均值。

ceil向上取整

%示例:
>> x = 0:1:8;
>> m = [mean(x),median(x)]

m =

     4     4

求和与积

sum函数用于对数据序列求和;prod函数用于对数据序列求积,其用法与sum函数相同。
调用格式
s = sum(x),其中,如果x是一个向量,则返回向量各元素的和;如果x是一个矩阵,则返回一个行向量,其第i个元素是x的第i列的元素和。
s = sum(x,dim),其中,当dim为1(默认值)时,该函数等同于sum(x);当dim为2时,返回一个列向量,其第i个元素是x的第i行的各元素之和。

文件读写

%示例:
>> x = [1 2 3;4 5 6;7 8 9];
>> s1 = sum(x)

s1 =

    12    15    18

>> s2 = sum(x,2)

s2 =

     6
    15
    24

>> p1 = prod(x)

p1 =

    28    80   162

>> p2 = prod(x,2)

p2 =

     6
   120
   504

求累加和与累乘积

cumsum函数用于求累加和;cumprod函数用于求累乘积,其用法与cumsum函数相同。
调用格式
s = cumsum(x):如果x是一个向量,则返回累加和向量;如果x是一个矩阵,返回的矩阵的第i列是x的第i列的累加和向量。
x = cumsum(x,dim):返回多维数组的累加和。若x是矩阵,当dim为1(默认值)时,返回的矩阵的第i列是x的第i列的累加和向量;当dim为2时,返回的矩阵的第i行是x的第i行的累加和向量。

CSDN开发云

%示例:
>> %求S=1+1+3+(1+3+5)++(1+3++11)的值。
>> x = 1:2:11;
>> y = cumsum(x)

y =

     1     4     9    16    25    36

>> s = sum(y)

s =

    91

统计描述函数

标准差(Standard Deviation) ,数学术语,是离均差平方的算术平均数(即:方差)的算术平方根,用σ表示。标准差也被称为标准偏差,或者实验标准差,在概率统计中最常使用作为统计分布程度上的测量依据。标准差能反映一个数据集的离散程度。
方差,是衡量源数据和期望值相差的度量值。概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。
相关系数,是研究变量之间线性相关程度的量,一般用字母 r 表示。
协方差(Covariance),在概率论和统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。

LSTNet

标准差

std函数用来计算标准差。对于向量x,std(x)返回一个标量。对于矩阵x,std(x)返回一个行向量,它的各个元素便是矩阵x各列或各行的标准差。
调用格式
s = std(x , w, dim),其中,选项w用于指定标准差的计算方法,当w为0(默认值,一般都为0)时,表示求标准差时除n-1;当w为1时,表示求标准差时除n。选项dim为1(默认值)时,求各列元素的标准差;dim为2时,求各行元素的标准差。

拖拽

%示例:
>> x = [7,4,9,8,10,7,8,7,8,7;7,6,10,5,9,8,10,9,5,6];
>> std(x,0,2) %求各行元素的标准差时除以n-1。

ans =

    1.5811
    1.9579

方差

var函数用来计算方差。对于向量x,var(x)返回一个标量。对于矩阵x,var(x)返回一个行向量,各个元素是矩阵x各列或各行的方差。
调用格式
v = var(x, w, dim),其中,选项w用于指定权重方案。若w为0(默认值),则按观测值数量-1(即k=n-1)实现归一化;若w为1,则按观测值数量(即k=n)实现归一化。选项dim指定沿维度dim计算方差。对于矩阵,当dim 为1(默认值)时,求各列元素的方差;当dim为2时,求各行元素的方差。

下载

%示例:
>> x = [7,4,9,8,10,7,8,7,8,7;7,6,10,5,9,8,10,9,5,6];
>> v = var(x,0,2)

v =

    2.5000
    3.8333

相关系数

corrcoef函数计算数据的相关系数。
调用格式
[R,P] = corrcoef(X,Y),其中,返回相关系数矩阵和p值矩阵。如果得到的p值矩阵的非对角线元素小于显著性水平(即90%置信区间,默认为 0.05),则R中的相应相关性被视为显著。
[R,P] = corrcoef(X),其中,返回矩阵X各列的相关系数,计算时把矩阵X的每列作为一个观测变量,然后求各列的相关系数。

数据处理

协方差

cov函数用于计算数据序列的协方差。
调用格式
c = cov(x),其中,若x是向量,则返回x的方差;若x是矩阵,则x的每一行代表一个样本,每一列代表一个观测变量。
c = cov(x,y),其中,返回变量x与y的协方差,x与y同样大小。如果x与y是矩阵,则cov(x,y) 将x与y视为列向量,等价于 cov(x( : ), y( : ))。
如果两个变量的协方差是正值,说明两者是正相关的,即两个变量的变化趋势一致;如果协方差为负值,则说明两者是负相关的,即两个变量的变化趋势相反;如果协方差为0,说明两者之间没有关系。

虚拟相机

%示例:随机抽取15名健康成人,测定血液的凝血酶浓度及凝血时间,分析凝血酶浓度与凝血时间之间的相关性。
>> x = [1.1,1.2,1.0,0.9,1.2,1.1,0.9,0.6,1.0,0.9,1.1,0.9,1.1,1,0.7];
>> y = [14,13,15,15,13,14,16,17,14,16,15,16,14,15,17];
>> r = corrcoef(x,y)

r =

    1.0000   -0.9265
   -0.9265    1.0000

>> c = cov(x,y)

c =

    0.0289   -0.2014
   -0.2014    1.6381

排序

sort函数用于对数组元素进行排序。
调用格式
[y,i] = sort(x, dim, mode),其中,y是排序后的矩阵,而i记录y中的元素在x中的位置。
选项dim指定排序的维度,若dim为1(默认值),则按列排序;若dim=2,则按行排序。
选项mode指明排序的方法,‘ascend’(默认值)为升序,'descend’为降序。

高等数学

%示例:
>> A = [2 3 1;6 5 4;7 9 8];
>> y = sort(A,2)

y =

     1     2     3
     4     5     6
     7     8     9

多项式计算

在数学中,由若干个单项式相加(或相减)组成的代数式叫做多项式(减法:减一个数等于加上它的相反数)。多项式中的每个单项式叫做多项式的项,这些单项式中的最高项次数,就是这个多项式的次数。其中多项式中不含字母的项叫做常数项。

游戏

多项式的加减运算

在Matlab中,多项式的加减运算是其所对应的系数向量的加减运算。对于次数相同的两个多项式,可直接对多项式系数向量进行加减运算。如果多项式的次数不同,则应该把低次多项式系数不足的高次项用0补足,使参与运算的各多项式具有相同的次数。

数据结构

%示例:
>> %(2.*x.^3+8.*x.^2-5.*x+8)+(6.*x.^2+5.*x+10)
>> a = [2 8 -5 8]; %对应系数 
>> b = [0 6 5 10];
>> c = a + b

c =

     2    14    0    18

%即为2.*x.^3+14.*x.^2+18

多项式的乘除运算

conv函数用于计算多项式的乘积运算;deconv函数用于计算多项式的除法运算。
调用格式
w = conv(p1,p2)
[Q,r] = deconv(p1,p2)
其中,p1、p2是两个多项式的系数向量;w是两个多项式相乘所得多项式的系数向量;Q是商式的系数向量;r是余式的系数向量。

交易机器人

%示例:
>> %(2.*x.^4+8.*x.^3-8)x(2.*x.^2-3.*x) 与 x.^3-x.^2/x.^2-x
>> p1 = [2 8 0 0 -8];
>> p2 = [2 -3 0];
>> c = conv(p1,p2)

c =

     4    10   -24     0   -16    24     0

>> p3 = [1 -1 0 0];
>> p4 = [1 -1 0];
>> [P,r] = deconv(p3,p4)

P =

     1     0


r =

     0     0     0     0

多项式的求导

k = polyder( P ):求多项式P的导数;
k = polyder(P,Q):求P·Q的导数;
[q,d] = polyder(P,Q):求P/Q的导数。

rapidio

%示例:
%f(x) = (x-1)(x-2)...(x-n),g(x)=(x+1)(x+2)...(x+n)%则f'(x) = (x-1)'(x-2)(x-3)...(x-n)+(x-1)(x-2)'(x-3)...(x-n)+...+(x-1)(x-2)...(x-n)';
%f(x) = h(x)/g(x)%f'(x) = (g(x)*h'(x)-h(x)*g'(x))/(g(x))^2.
>> %求多项式2.*x.^3 + 4.*x.^2 + 6.*x + 8的导数
>> p = [2 4 6 8];
>> k = polyder(p)

k =

     6     8     6

>> %求多项式1/(x.^2+8)的导数
>> P = [1];
>> Q = [1 0 8];
>> [p,q]=polyder(P,Q)

p =

    -2     0


q =

     1     0    16     0    64

多项式的求值

polyval函数用来求代数多项式的值。
调用格式
y = polyval(p,x),其中,p是多项式系数向量。若x为标量,得到多项式在该点的值;若x为向量或矩阵,则对向量或矩阵中的每个元素求多项式的值。

系统架构

%示例:
>> %已知多项式8.*x.6 + 6.*x.^4 - 7.*x.^2 + 10,当x=8时,该多项式的值
>> A = [8 0 6 0 -7 0 10];
>> x = 8;
>> y = polyval(A,x)

y =

     2121290

多项式的求根

roots函数用于求多项式的全部根。
调用格式
x = roots( p ),其中,p为多项式的系数向量,求得的根赋给向量x,即x(1),x(2),…,x(n)分别代表多项式的n个根。

emmc

%示例:
>> %已知f(x) = x.^2 + 2.*x + 1,求f(x)=0的全部根。
>> p = [1 2 1];
>> x = roots(p)

x =

    -1
    -1

数据插值

数据插值是在离散数据的基础上补插连续函数,使得这条连续曲线通过全部给定的离散数据点。插值是离散函数逼近的重要方法,利用它可通过函数在有限个点处的取值状况,估算出函数在其他点处的近似值。

unity

一维数据插值

interp1函数用于实现一维插值的。
调用格式
vq = interp1(x,v,xq,method,extrapolation)
其中,x、v是两个等长的已知向量,分别存储采样点和采样值。若同一个采样点有多种采样值,则v可以为矩阵,v的每一列对应一种采样值。
xq被插值点,vq是在被插值点xi处的插值结果,是一个列的长度与xq相同、宽度与v相同的矩阵。
选项method用于指定插值方法,可取值如下:
'nearest’是最邻近插值; 'linear’线性插值(默认值); 'spline’三次样条插值; 'cubic’立方插值。

多表查询

%示例:
>> %3次样条插值分别求得婴儿出生后半个月到5个半月每隔1个月的身长、体重参考值。
>> %0~6个月婴儿的体重、身长参考标准:
>> %时间:0 1 2 3 4 5 6
>> %体重:3.27 4.97 5.95 6.73 7.32 7.7 8.22
>> %身长:50.6 56.5 59.6 62.3 64.6 65.9 68.1
>> x = 0:1:6;
>> v = [50.6,3.27; 56.5,4.97; 59.6,5.95; 62.3,6.73; ...
64.6,7.32; 65.9,7.70; 68.1,8.22];
>> xq = 0.5:1:5.5;
>> vq = interp1(x,v,xq,'spline')

vq =

   54.0847    4.2505
   58.2153    5.5095
   60.9541    6.3565
   63.5682    7.0558
   65.2981    7.5201
   66.7269    7.9149

>> %并绘制图形:
>> plot(x,v,'.',xq,vq)

在这里插入图片描述

NeRF

多维数据插值

interp2函数用于实现二维插值的。
调用格式
zq = interp2(x, y, v, xq, yq, method, extrapval)
其中,x、y分别存储采样点的平面坐标,v存储采样点采样值。
xq、yq存储插值点的平面坐标,zq是根据相应的插值方法得到的插值点的值。
选项method的取值与一维插值函数相同,extrapval指定域外点的返回值。

openmv

而3维、N维插值函数分别为interp3、interpn,用法与interp2 一致。
vq = interp3(x, y, z, v, xq, yq, zq, method)
vq = interpn(x1, x2,…,xn, v, xq1, xq2,…,xqn, method)
其中,interp3函数的输入参数x、y、z以及interpn函数的输入参数 x1、x2、x3、…、xn必须是网格格式。

示例:
企业从1968 ~ 2008年,工龄为10年、20年和30年的职工的月均工资数据。
试用线性插值求出1973 ~ 1993年每隔5年、工龄为15年和25年的职工月平均工资。
在这里插入图片描述

%题解:
x = [10 20 30];
y = [1968:10:2008]'; %转置
v = [57 69 87;
     79 95 123;
     172 239 328;
     950 1537 2267;
     2496 3703 4982];
xq = [15 25];
yq = [1973:5:2003]'; %转置
zq = interp2(x, y, w, xq, yq, 'linear')

zq =

   1.0e+03 *

    0.0750    0.0935
    0.0870    0.1090
    0.1462    0.1963
    0.2055    0.2835
    0.7245    1.0928
    1.2435    1.9020
    2.1715    3.1223

%答案为(1.0e+03 *)十的三次方乘以每位小数,即75 935 ......

散乱数据插值

griddata函数实现散乱数据插值。
调用格式
vq = griddata(x, y, v, xq, yq, method)
vq = griddata(x, y, z, v, xq, yq, zq, method)
其中,x、y、z存储采样点的坐标,v是与采样点的采样值。
xq、yq、zq存储插值点的坐标,vq是根据相应的插值方法得到的插值结果。
选项method指定插值方法,可取值如下:
'nearest’是最邻近插值; 'linear’线性插值(默认值); 'natural’自然邻域插值; 'cubic’立方插值;'v4’双调和样条插值。

%示例:
%随机生成包含100个散点的数据集,绘制散点数据图和插值得到的网格数据图,观察插值结果。
xy = rand(100,3)*8-8; %生成一个100x3的随机矩阵(数值范围在0~1之间),然后每个数乘上8后再减8,最后得出结果
x = xy(:,1); %获取xy第一列所有元素
y = xy(:,2); %获取xy第二列所有元素
z = xy(:,3); %获取xy第三列所有元素
a = -8:0.5:8;
[xq,yq] = meshgrid(a); %生成二维网格坐标矩阵
zq = griddata(x,y,z,xq,yq);
mesh(xq,yq,zq) %绘制三维网格图
hold on %叠图
plot3(x,y,z,'rp')

在这里插入图片描述

曲线拟合

polyfit函数用于求最小二乘拟合多项式的系数。
调用格式
p = polyfit(x,y,n)
[p,s] = polyfit(x,y,n)
[p,s,mu] = polyfit(x,y,n)
其中,x、y是两个等长的向量,存储采样点x和采样值y,产生一个n次多项式的系数向量p及其在采样点的误差向量s。p是一个长度为n + 1的向量,p的元素为多项式p1xn+p2xn−1+…+pnx+pn+1的系数。mu是一个二元列向量,mu(1)是mean(x),mu(2)是std(x)。

%示例:
>> %研究水量对白菜生长的影响,做了十次实验。分析其关系
>> %水量:0 50 100 150 200 250 300 350 400 450
>> %相同情况下的白菜生长情况:2 5 8 10 12 15 9 7 5 2
>> data = [0 2; 50 5; 100 8; 150 10; 200 12; 250 15; 300 9; 350 7; 400 5; 450 2];
>> x = data(:,1)
>> x = data(:,1);
>> y = data(:,2);
>> f = polyfit(x,y,2); %返回阶数为2的多项式f(x)的系数
>> yi = polyval(f,x); %求在x处的n阶多项式的值
>> plot(x,y,'.',x,yi)

在这里插入图片描述

非线性方程和非线性方程组的数值求解

fzero函数用来求非线性方程的根。
调用格式
x = fzero(@fun, x0, options)
[x, fval, exitflag, output] = fzero(@fun, x0, options)
其中,第2种格式可以在函数寻根失败时返回寻根过程的错误和信息。fun是待求根的函数名,x0为搜索的起点。一个函数可能有多个根,但fzero函数只给出离x0最近的那个根。options为结构体变量,用于指定求解过程的优化参数;缺省时,使用默认值优化。
返回方程的根,fval返回目标函数在解x处的值,exitflag返回求解过程终止原因,output返回寻根过程最优化的信息。

%示例:
>> %exp(-2.*x)-x = 0在x0 = 0附近的根
>> x1 = fzero(@(x)exp(-2.*x)-x,0)

x1 =

    0.4263

fsolve函数用于求非线性方程组F(x) = 0的数值解。
调用格式
x = fsolve(fun,x0)
其中,fun是待求根的函数文件名,x0为搜索的起点。

%示例:
>> %求非线性方程组在(1,1)附近的数值解。x1.^2 + x1 - x2.^2 = 1 与 x2 - sin(x1.^2) = 0
>> %先建立函数文件

function y = func(f)
x1 = f(1);
x2 = f(2);
y(1) = x1.^2 + x1 - x2.^2 - 1;
y(2) = x2 - sin(x1.^2);

>> %保存并返回命令窗口
>> %再调用fsolve函数求解
>> x0 = [1;1];
>> x = fsolve(@func,x0)

x =

    0.7260
    0.5029

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注