标准方差与相关系数
Download
1 / 40

标准方差与相关系数 1 .求标准方差 - PowerPoint PPT Presentation


  • 228 Views
  • Uploaded on

标准方差与相关系数 1 .求标准方差 在 MATLAB 中,提供了计算数据序列的标准方差的函数 std 。对于向量 X , std(X) 返回一个标准方差。对于矩阵 A , std(A) 返回一个行向量,它的各个元素便是矩阵 A 各列或各行的标准方差。 std 函数的一般调用格式为: Y=std(A,flag,dim)

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 标准方差与相关系数 1 .求标准方差' - gerard


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

标准方差与相关系数

1.求标准方差

在MATLAB中,提供了计算数据序列的标准方差的函数std。对于向量X,std(X)返回一个标准方差。对于矩阵A,std(A)返回一个行向量,它的各个元素便是矩阵A各列或各行的标准方差。std函数的一般调用格式为:

Y=std(A,flag,dim)

其中dim取1或2。当dim=1时,求各列元素的标准方差;当dim=2时,则求各行元素的标准方差。flag取0或1,当flag=0时,按σ1所列公式计算标准方差,当flag=1时,按σ2所列公式计算标准方差。缺省flag=0,dim=1。

例6-7 对二维矩阵x,从不同维方向求出其标准方差。


2.相关系数

MATLAB提供了corrcoef函数,可以求出数据的相关系数矩阵。corrcoef函数的调用格式为:

corrcoef(X):返回从矩阵X形成的一个相关系数矩阵。此相关系数矩阵的大小与矩阵X一样。它把矩阵X的每列作为一个变量,然后求它们的相关系数。

corrcoef(X,Y):在这里,X,Y是向量,它们与corrcoef([X,Y])的作用一样。


例 生成满足正态分布的10000×5随机矩阵,然后求各列元素的均值和标准方差,再求这5列随机数据的相关系数矩阵。

命令如下:

X=randn(10000,5);

M=mean(X)

D=std(X)

R=corrcoef(X)


排序

MATLAB中对向量X是排序函数是sort(X),函数返回一个对X中的元素按升序排列的新向量。

sort函数也可以对矩阵A的各列或各行重新排序,其调用格式为:

[Y,I]=sort(A,dim)

其中dim指明对A的列还是行进行排序。若dim=1,则按列排;若dim=2,则按行排。Y是排序后的矩阵,而I记录Y中的元素在A中位置。


线性优化

x=lp(C,A,b,vlb,vub)


%First, enter the coefficients:

f = [-5; -4; -6] ;

A = [1 -1 1

3 2 4

3 2 0];

b = [20; 42; 30];

lb = [0,0,0]; % x的最小值 [0,0,0]

ub = [inf,inf,inf];

%Next, call a linear programming routine:

x= lp(f,A,b,lb,ub)

%Entering x

x =

0.0000

15.0000

3.0000

[例]最小值线性优化

f(x)=-5x1-4x2-6x3

x1-x2+x3≦20

3x1+2x2+4x3≦42

3x1+2x2≦30

(0≦x1, 0≦x2,0≦x3)


[例]线性优化

Min -400x1-1000x2-300x3+200x4

-2x2 + x3 + x4=0

2x1 +3x2 <=16

3x1 +4x2 <=24

x1, x2, x3, x4>=0; x3<=5

c=[-400,-1000,-300,200]; %目标函数系数

A=[0 -2 1 1; 2 3 0 0; 3 4 0 0]; %约束条件系数

b=[0; 16; 24];

xLB=[0,0,0,0]; % x取值范围的最小值

xUB=[inf,inf,5,inf]; % x取值范围的最大值

x0=[0,0,0,0]; % x取迭代初始值

nEq=1; % 约束条件中只有一个 = 号,其余为<=

x=lp(c,A,b,xLB,xUB,x0,nEq)

disp(['最优值为: ',num2str(c*x)])


非线性优化

x=constr('f ',x0)

fminbnd


计算下面函数在区间(0,1)内的最小值。

[x,fval,exitflag,output]=fminbnd('(x^3+cos(x)+x*log(x))/exp(x)',0,1)


[0,5]上求下函数的最小值

解:先自定义函数:在MATLAB编辑器中建立M文件为:

function f = myfun(x)

f = (x-3).^2 - 1;

保存为myfun.m,然后在命令窗口键入命令:

x=fminbnd(@myfun,0,5)


[例]最小值非线性优化

Min f(x)=-x1x2x3,

-x1-2x2-2x3≤0,

x1+2x2+2x3≤72,

初值: x = [10; 10; 10]

x = [10; 10; 10]

%第一步:编写M文件 myfun.m

function [f,g]=myfun(x)

f=-x(1)*x(2)*x(3);

g(1)=-x(1)-2*x(2)-2*x(3);

g(2)=x(1)+2*x(2)+2*x(3)-72;

%第二步:求解

%在MATLAB工作窗中键入

x0=[10,10,10];

x=constr('myfun',x0) %即可


] 非线性优化

Min f(x)=-x1x2

(x1+ x2)x3<=0;

x1, x2>=0; x3>=2;

[第一步:编写M文件 fxxgh.m

function [F,G]=fxxgh(x)

F=-x(1)*x(2);

G(1)=(x(1)+x(2))*x(3)-120;

第二步:求解

在MATLAB工作窗中键入

x=[1,1,1]; % x取迭代初始值

options(13)=0; % 约束条件中有0个 = 号,其余为<=

XL=[0,0,2]; % x取值范围的最小值

XU=[inf;inf;inf]; % x取值范围的最大值

[x,options]=constr('fxxgh',x,options,XL,XU);

options(8) %输出最小值

x


无约束多元函数最小值

多元函数最小值的标准形式为

其中:x为向量,如

使用fmins求其最小值


的最小值点

X=fminsearch('2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2', [0,0])

或在MATLAB编辑器中建立函数文件

function f=myfun(x)

f=2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2;

保存为myfun.m,在命令窗口键入

X=fminsearch ('myfun', [0,0]) 或 >> X=fminsearch(@myfun, [0,0])


利用函数fminunc求多变量无约束函数最小值

当函数的阶数大于2时,使用fminunc比fminsearch更有效,

但当所选函数高度不连续时,使用fminsearch效果较好

的最小值

fun='3*x(1)^2+2*x(1)*x(2)+x(2)^2';

x0=[1 1];

[x,fval,exitflag,output,grad,hessian]=fminunc(fun,x0)

或用下面方法:

fun=inline('3*x(1)^2+2*x(1)*x(2)+x(2)^2')

x0=[1 1]

x=fminunc(fun,x0)


有约束的多元函数最小值

非线性有约束的多元函数的标准形式为:

sub.to

fmincon

其中:x、b、beq、lb、ub是向量,A、Aeq为矩阵,

C(x)、Ceq(x)是返回向量的函数,

f(x)为目标函数,

f(x)、C(x)、Ceq(x)可以是非线性函数


求下面问题在初始点(0,1)处的最优解

min

s.t

解:约束条件的标准形式为

min

s.t


先在MATLAB编辑器中建立非线性约束函数文件:

function [c, ceq]=mycon (x)

c=(x(1)-1)^2-x(2);

ceq=[ ]; %无等式约束

然后,在命令窗口键入如下命令或建立M文件:

fun='x(1)^2+x(2)^2-x(1)*x(2)-2*x(1)-5*x(2)'; %目标函数

x0=[0 1];

A=[-2 3]; %线性不等式约束

b=6;

Aeq=[ ]; %无线性等式约束

beq=[ ];

lb=[ ]; %x没有下、上界

ub=[ ];

[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,@mycon)


二次规划问题

二次规划问题(quadratic programming)的标准形式为:

sub.to

quadprog

其中,H、A、Aeq为矩阵,f、b、beq、lb、ub、x为向量


求解下面二次规划问题

sub.to

解:


MATLAB中实现如下:

H = [1 -1;-1 2] ;

f = [-2; -6] ;

A = [1 1;-1 2; 2 1] ;

b = [2; 2;3] ;

lb = zeros(2,1) ;

[x,fval,exitflag,output,lambda] = quadprog(H,f,A,b, [ ] ,[ ] ,lb)


半无限”有约束的多元函数最优解

fseminf

x、b、beq、lb、ub都是向量;A、Aeq是矩阵;C(x)、Ceq(x)、是返回向量的函数,f(x)为目标函数;f(x)、C(x)、Ceq(x)是非线性函数;为半无限约束,通常是长度为2的向量


先建立非线性约束和半无限约束函数文件,并保存为先建立非线性约束和半无限约束函数文件,并保存为mycon.m:

function [C,Ceq,K1,K2,S] = mycon(X,S)

% 初始化样本间距:

if isnan(S(1,1)),

S = [0.2 0; 0.2 0];

end

% 产生样本集:

w1 = 1:S(1,1):100;

w2 = 1:S(2,1):100;

% 计算半无限约束:

K1 = sin(w1*X(1)).*cos(w1*X(2)) - 1/1000*(w1-50).^2 -sin(w1*X(3))-X(3)-1;

K2 = sin(w2*X(2)).*cos(w2*X(1)) - 1/1000*(w2-50).^2 -sin(w2*X(3))-X(3)-1;

% 无非线性约束:

C = [ ]; Ceq=[ ];

% 绘制半无限约束图形

plot(w1,K1,'-',w2,K2,':'),title('Semi-infinite constraints')

然后在MATLAB命令窗口或编辑器中建立M文件:

fun = 'sum((x-0.5).^2)';

x0 = [0.5; 0.2; 0.3]; % Starting guess

[x,fval] = fseminf(fun,x0,2,@mycon)


求下列函数最大值的最小化问题先建立非线性约束和半无限约束函数文件,并保存为

其中:


先建立目标函数文件,并保存为先建立非线性约束和半无限约束函数文件,并保存为myfun.m:function f = myfun(x)

f(1)= 2*x(1)^2+x(2)^2-48*x(1)-40*x(2)+304;

f(2)= -x(1)^2 - 3*x(2)^2;

f(3)= x(1) + 3*x(2) -18;

f(4)= -x(1)- x(2);

f(5)= x(1) + x(2) - 8;

然后,在命令窗口键入命令:

x0 = [0.1; 0.1]; % 初始值

[x,fval] = fminimax(@myfun,x0)


求上述问题的绝对值的最大值最小化问题。先建立非线性约束和半无限约束函数文件,并保存为

目标函数为:

解:先建立目标函数文件(与上例相同)

然后,在命令窗口或编辑器中建立M文件:

x0 = [0.1; 0.1]; % 初始点

options = optimset('MinAbsMax',5); % 指定绝对值的最小化

[x,fval] = fminimax(@myfun,x0,[ ],[ ],[ ],[ ],[ ],[ ],[ ],options)


多目标规划问题 先建立非线性约束和半无限约束函数文件,并保存为

fgoalattain


曲 线 拟 合 先建立非线性约束和半无限约束函数文件,并保存为

在大量的应用领域中,人们经常面临用一个解析函数描述数据(通常是测量值)的任务。对这个问题有两种方法。在插值法里,数据假定是正确的,要求以某种方法描述数据点之间所发生的情况。曲线拟合或回归是人们设法找出某条光滑曲线,它最佳地拟合数据,但不必要经过任何数据点。图1说明了这两种方法。连接数据点的实线描绘了线性内插,虚线是数据的最佳拟合。


x=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1];先建立非线性约束和半无限约束函数文件,并保存为

y=[-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];

n=2; % polynomial order

p=polyfit(x, y, n)

polyfit的输出是一个多项式系数的行向量。

其解是

y = -9.8108x2 +20.1293x-0.0317。

为了将曲线拟合解与数据点比较,让我们把二者都绘成图。

ezplot('-9.8108*x*x+20.1293*x-0.0317')

xi=linspace(0, 1, 100); % x-axis data for plotting

z=polyval(p, xi);

为了计算在xi数据点的多项式值,调用MATLAB的函数polyval。

plot(x, y, ' o ' , x, y, xi, z, ' : ' )

画出了原始数据x和y,用'o'标出该数据点,在数据点之间,再用直线重画原始数据,并用点' : '线,画出多项式数据xi和z。

xlabel(' x '), ylabel(' y=f(x) '), title(' Second Order Curve Fitting ')


x1=linspace(0, 2*pi, 60);先建立非线性约束和半无限约束函数文件,并保存为

x2=linspace(0, 2*pi, 6);

plot(x1, sin(x1), x2, sin(x2), ' - ')

xlabel(' x '), ylabel(' sin(x) ')

title(' Linear Interpolation ' )


若不采用直线连接数据点,我们可采用某些更光滑的曲线来拟合数据点。最常用的方法是用一个若不采用直线连接数据点,我们可采用某些更光滑的曲线来拟合数据点。最常用的方法是用一个3阶多项式,即3次多项式,来对相继数据点之间的各段建模,每个3次多项式的头两个导数与该数据点相一致。这种类型的插值被称为3次样条或简称为样条。函数interp1也能执行3次样条插值。


为了说明一维插值,考虑下列问题,若不采用直线连接数据点,我们可采用某些更光滑的曲线来拟合数据点。最常用的方法是用一个12小时内,一小时测量一次室外温度。数据存储在两个MATLAB变量中。

hours=1:12; % index for hour data was recorded

temps=[5 8 9 15 25 29 31 30 22 25 27 24]; % recorded temperatures

plot(hours, temps, hours, temps,' + ') % view temperatures

title(' Temperature ')

xlabel(' Hour '), ylabel(' Degrees Celsius ')

t=interp1(hours, temps, 9.3, ' spline ') % estimate temperature at hour=9.3

t=interp1(hours, temps, 4.7, ' spline ') % estimate temperature at hour=4.7

t=interp1(hours, temps, [3.2 6.5 7.1 11.7], ' spline ')


意,样条插值得到的结果,与上面所示的线性插值的结果不同。因为插值是一个估计或猜测的过程,其意义在于,应用不同的估计规则导致不同的结果。意,样条插值得到的结果,与上面所示的线性插值的结果不同。因为插值是一个估计或猜测的过程,其意义在于,应用不同的估计规则导致不同的结果。


样条插值是对数据进行平滑意,样条插值得到的结果,与上面所示的线性插值的结果不同。因为插值是一个估计或猜测的过程,其意义在于,应用不同的估计规则导致不同的结果。,也就是,给定一组数据,使用样条插值在更细的间隔求值。例如,

hours=1:12; % index for hour data was recorded

h=1:0.1:12; % estimate temperature every 1/10 hour

temps=[5 8 9 15 25 29 31 30 22 25 27 24];

t=interp1(hours, temps, h) ;

plot(hours, temps, ' - ' , hours, temps, ' + ' , h, t) % plot comparative results

title(' Springfield Temperature ')

xlabel(' Hour '), ylabel(' Degrees Celsius ')


2 意,样条插值得到的结果,与上面所示的线性插值的结果不同。因为插值是一个估计或猜测的过程,其意义在于,应用不同的估计规则导致不同的结果。二维数据插值

在MATLAB中,提供了解决二维插值问题的函数interp2,其调用格式为:

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

其中X,Y是两个向量,分别描述两个参数的采样点,Z是与参数采样点对应的函数值,X1,Y1是两个向量或标量,描述欲插值的点。Z1是根据相应的插值方法得到的插值结果。 method的取值与一维插值函数相同。X,Y,Z也可以是矩阵形式。

同样,X1,Y1的取值范围不能超出X,Y的给定范围,否则,会给出“NaN”错误。


例 某实验对一根长意,样条插值得到的结果,与上面所示的线性插值的结果不同。因为插值是一个估计或猜测的过程,其意义在于,应用不同的估计规则导致不同的结果。10米的钢轨进行热源的温度传播测试。用x表示测量点0:2.5:10(米),用h表示测量时间0:30:60(秒),用T表示测试所得各点的温度(℃)。试用线性插值求出在一分钟内每隔20秒、钢轨每隔1米处的温度TI。

命令如下:

x=0:2.5:10;

h=[0:30:60]';

T=[95,14,0,0,0;88,48,32,12,6;67,64,54,48,41];

xi=[0:10];

hi=[0:20:60]';

TI=interp2(x,h,T,xi,hi)


ad