Matlab 统计工具箱

67
1 Matlab 计计计计 : 计计计计计计 计 : 计计计计 计 : 计计计计 计 : 计计计 计 : 计计计计 计: 计计计

description

Matlab 统计工具箱. 一:统计工具箱简介 二:概率分布 三:参数估计 四:描述性统计 五:假设检验 六:统计绘图. 一 . matlab 统计工具箱( statistics toolbox) 简介. 统计学是处理数据的艺术和科学,通过收集,分析,解释和表达数据来探索事物中蕴含的规律.随着科技水平的迅猛发展,知识经济的时代来临,海量的数据需要人们处理. matlab 统计工具箱为人们提供了一个强有力的统计分析工具. - PowerPoint PPT Presentation

Transcript of Matlab 统计工具箱

Page 1: Matlab 统计工具箱

1

Matlab 统计工具箱

一 : 统计工具箱简介二 : 概率分布三 : 参数估计四 : 描述性统计五 : 假设检验六 : 统计绘图

Page 2: Matlab 统计工具箱

2

一 .matlab 统计工具箱 (statistics toolbox) 简介

统计学是处理数据的艺术和科学 , 通过收集 , 分析 ,解释和表达数据来探索事物中蕴含的规律 . 随着科技水平的迅猛发展 , 知识经济的时代来临 , 海量的数据需要人们处理 .matlab 统计工具箱为人们提供了一个强有力的统计分析工具 .

统计工具箱基于 matlab 数值计算环境 , 支持范围广泛的统计计算任务 . 它包括 200 多个处理函数 (m 文件 ) 主要应用于以下几方面 :

Page 3: Matlab 统计工具箱

3

1.1 统计工具箱的几大功能

* 概率分布 * 参数估计 * 描述性统计 * 假设检验 * 统计绘图

Page 4: Matlab 统计工具箱

4

统计工具箱提供了 20 种概率分布类型 , 其中包括

离散型分布 :

( 如 binomial 二项分布 ,

即 n 次贝努里试验中出现 k 次成功的概率 .poisson

分布 , 和 分布等 ).

knk ppk

npnkb

)1(),;(

2 ek

kpk

!);(

1.1.1 概率分布 --- 离散型

Page 5: Matlab 统计工具箱

5

1.1.2 概率分布—连续型连续型分布如正态分布 F(x)=

beta 分布 ,uniform 平均分布等 .

每种分布提供 5 类函数 : 1 概率密度 2 ( 累积 ) 分布函数 3 逆累积分布函数 4 随机数产生器 5 均值和方差函数 .

dye

yx

2

)( 2

2

1

Page 6: Matlab 统计工具箱

6

1.1.3 另外 4 大功能* 参数估计 --- 依据原始数据计算参数估计值置信区域 .

* 描述性统计 --- 方差 , 期望等数字特征 .

* 假设检验 --- 提供最通用的假设检验函数 t- 检验 ,z- 检验 .

* 统计绘图 --- box 图函数 , 正态概率图函数等 .

注意 : 统计工具箱中的说有函数都可用 type function_name 语句查看其代码 , 也可进行修改 , 从而变为己用 , 加入到工具箱中 .

Page 7: Matlab 统计工具箱

7

二 概率分布随机变量的统计行为取决于其概率分布,而分布函数常用连续和离散型分布。统计工具箱提供 20 种分布。每种分布有五类函数。

1: 概率密度 (pdf) ; 2: 累积分布函数 (cdf); 3: 逆累积分布函数(icdf);4: 随机数产生器 5: 均值和方差函数;

一:离散型概率密度函数 : 为观察到的特定值的概率。

连续型概率密度函数定义为:如存在非负函数 p(x) ≥0, 使对任意 b≥a ,

X 在 (a,b) 上取值概率为 p{a<X<b}= ; 则称 p(x) 为随机变量 X 的概率密度函数。

二:累积分布 (cdf): 它取决于 pdf. 表达式为 F(x)= .

逆累积分布 (icdf): 实际上是 cdf 的逆,它返回给定显著概率条件下假设检验的 临界值。

b

adxxp )(

xdp )(

Page 8: Matlab 统计工具箱

8

三:随机数产生器

所有随机数产生方法都派生于均匀分布随机数。产生方法有:直接法、反演法、拒绝法。

四:均值和方差

均值和方差是分布函数的简单函数。在 Matlab 里用“ stat” 结尾的函数可计算得到给定参数的分布的均值和方差。

以下以正态分布为例说明在 Matlab 里的实现。

一:概率密度函数

X=[-3:0.5:3];

f=normpdf(x,0,1);

(其中 normpdf 为正态分布的 Matlab 分布实现函数,可由以下介绍的函数代替。)

Page 9: Matlab 统计工具箱

9

功能:可选分布的概率密度函数。

格式: Y=pdf(‘name’,X,A1,A2,A3)

说明:‘ name’ 为特定分布的名称,如‘ Normal’,’Gamma’ 等。 X 为分布函数的自变量 X的取值矩阵,而 A1,A2,A3 分别为相应的分布参数值。Y 给出结果,为概率密度值矩阵。

举例: p=pdf(‘Normal’,-2:2,0,1)

给出标准正态分布在 -2 到 2 的分布函数值。 而 p=pdf(‘Poisson’,0:4,1:5) 给出 Poisson 分布函数。

2.2

Page 10: Matlab 统计工具箱

10

累积分布函数与逆累积分布函数

同样地,累积分布和逆累积分布对每个分布都有特定地 Matlab 实现函数,这里只介绍通用的 cdf,icdf.

--- cdf, icdf

功能:计算可选分布的累积分布函数和逆累积分布函数。

格式: P=cdf(‘name’,X,A1,A2,A3)

X=icdf(‘name’,X,A1,A2,A3)

说明: cdf 和 icdf 中的参数使用和 pdf 中的相同。只是计算结果不同。

举例: p=cdf(‘Normal’,0:5,1:6)

X=icdf(‘Normal’,0.1:0.2:0.9,0,1)

2.3

Page 11: Matlab 统计工具箱

11

随机数产生器

在 Matlab 里和 pdf,cdf 与 icdf 一样,随机数的产生也有通用函数 random.

--- random

功能:产生可选分布的随机数。

格式: y=random(‘name’,A1,A2,A3,m,n)

说明: random 函数产生统计工具箱中任一分布的随机数。‘ name’ 为相应分布的名称。 A1,A2,A3 为分布参数,意义同 pdf 参数。 m,n 确定了结果 y 的数量,如果分布参数A1,A2,A3 为矢量,则 m,n 是可选的,但应注意,它们给出的长度或矩阵行列数必须与分布参数的长度相匹配。

举例: rn=random(‘Normal’,0,1,2,4)

2.4

Page 12: Matlab 统计工具箱

12

均值和方差

和以上其他函数不同的是均值和方差的运算没有通用的函数,只能用各个分布的函数计算。对应于正态分布的计算函数为 normstat();

它返回两个参数的向量,分别为均值和方差。

举例: [m,n]=normstat(mu,sigma)

Page 13: Matlab 统计工具箱

13

三 . 参数估计

参数估计 :

某分布的数学形式已知 , 应用子样信息来估计其有限个参数的值本节主要介绍 3.1 最大似然估计 (Maximum likelihood estimation)

3.2 对数似然函数

Page 14: Matlab 统计工具箱

14

3.1 最大似然估计

基本思想 :

已知一组观测值 , 给定这组值出自的某类分布中 ,求 得最有可能出现这组值的一个分布 .

调用方法 :

[phat,pci]=mls[‘dist’,data,alpha]

phat 为参数估计结果 ,pci 为置信区间计算结果 dist 为用户给定的分布名称 ,data 为数据列表 ,(1-alpha)置信区域 .

Page 15: Matlab 统计工具箱

15

3.1.1 最大似然估计 (mls) 举例例 : rv=binornd(20,0.75)

rv= 17

[p,pci]=mle(‘binomial’,rv,0.05,20)

p=

    0.8000

pci=

0.5634

0.9427

Page 16: Matlab 统计工具箱

16

3.2 对数似然函数 统计工具箱提供了 β 分布 ,γ 分布 , 正态分布和威布尔分布的负对数似然函数值的求取函数 .

正态分布的负对数似然函数调用方法 L=normlike(params,data)

Params 为正态分布参数 :params(1) 为 μ,params(2) 为 σ

Page 17: Matlab 统计工具箱

17

3.2.1 其他负对数似然函数

β 分布的负对数似然函数 logL=betalike(params,data)

γ 分布的负对数似然函数 logL=gamlike(params,data)

威布尔分布的负对数似然函数 logL=weiblike(params,data)

参数设置与正态分布的负对数似然函数类似 , 不加冗述 .

Page 18: Matlab 统计工具箱

18

四 描述性统计概述:人们希望用少数样本来体现样本总体的规律。描述性统计就是收集、整理、加工和分析统

计数据,使之系统化、条理化,以显示出数据资料的趋势、特征和数量关系。

根据统计量特征性质的不同,工具箱提供了位置度量、散布度量、自助法以及在缺失数据情况下处理方法等方面的描述性统计工具函数。

Page 19: Matlab 统计工具箱

19

4.1 中心趋势(位置)度量

数据样本中心度量的目的在于对数据样本的数据分布线上分布的中心予以定位,即中心位置的度量。

均值是对位置的简单和通常的估计量。但野值的存在往往影响位置的确定。而中位数和修正的均值则受野值的干扰很小。中位数是样本的 50% 分位点。而修正的均值所蕴涵的思想则是剔除样本中最高值和最低值来确定样本的中心位置。

几何均值和调和均值对野值都较敏感。当样本服从对数正态分布或偏斜程度很大时,它们也都是有效的方法。

以下介绍位置度量有关函数。

Page 20: Matlab 统计工具箱

20

4.2.1: 几何平均数( geomean )

功能:样本的几何均值。 格式: m=geomean(X) 说明:几何均值的定义为 m= (1.4.1)

geomean 函数计算样本的几何均值 。 X若为矢量,它返回 X 中元素的几何均值; X若为矩阵,它的结果为一个行矢量,每个元素为 X 对应列元素的几何均值。

举例: x=exprnd(1,10,6); geometric=geomean(X); average=mean(X);

nn

iix

1

1

Page 21: Matlab 统计工具箱

21

4.2.2: (调和均值) harmmean

功能:样本数据的调和均值。格式: m=harmmean(X)

说明:调和均值定义为

举例:样本均值大于或等于调和均值。 X=exprnd(1,10,6); harmonic=harmmean(X) average=mean(X)

n

i ix

n

1

1

Page 22: Matlab 统计工具箱

22

4.2.3 (平均值) mean

功能:样本数据的平均值。说明:平均值定义为

举例: x=normrnd(0,1,100,5);

xbar=mean(X)

n

iijj x

nx

1

1

Page 23: Matlab 统计工具箱

23

4.2.4:median

功能:样本数据的中值。说明:中值即数据样本的 50% 中位数。

中位数对野值出现的影响较小。举例: xodd=1:5;

modd=median(xodd)

meven=median(xeven)

Page 24: Matlab 统计工具箱

24

4.2.5:trimmean

功能:剔除极端数据的样本均值。 格式: m=trimmean(X,percent) 说明:函数计算剔除观测量中最高百分比和最低百分比数据后

的均值。 函数中 percent 代表百分比。 举例: X=normrnd(0,1,100,100);

m=mean(X)

trim=trimmean(X,10)

sm=std(m)

strim=std(trim)

efficiency=(sm/strim).^2

Page 25: Matlab 统计工具箱

25

4.3 散布度量

散布度量可以理解为样本中的数据偏离其数值中心的程度,也称离差。

极差,定义为样本最大观测值与最小观测值之差。 标准差和方差为常用的散布度量,对正态分布的样本描述是最优的。但抗野值干扰能力较小。

平均绝对值偏差对野值也敏感。 四分位数间距为随机变量的上四分位数 和下四分位之

差。

Page 26: Matlab 统计工具箱

26

在 Matlab 里,有关散布度量计算的函数为:

1: 计算样本的内四分位数间距的 iqr(X).

2:求样本数据的平均绝对偏差的 mad(X).

3: 计算样本极差的 range(X).

4: 计算样本方差的 var(X,w).

5: 求样本的标准差的 std(X).

6: 求协方差矩阵的 cov(X).

这些函数的详细说明可以参见Matlab 的帮助文档。

4.4 Matlab 里有关散布度量计算的函数

Page 27: Matlab 统计工具箱

27

4.5 处理缺失数据的函数

在对大量的数据样本进行处理分析时,常会遇到一些数据无法找到或不能确定的情况。这时可用 NaN 标注这个数据。而工具箱中有一些函数自动处理它们。

如 :忽视 NaN, 求其他数据的最大值的 nanmax. 格式: m=nanmax(X) 举例: m=magic(3);

m([1 6 8])=[NaN NaN NaN]

[nmax,maxidx]=nanmax(m)

Page 28: Matlab 统计工具箱

28

4.6 中心矩

中心矩是关于数学期望的矩。对于任意的 r 0, 称 为随机变量 X 的 r阶中心矩。一阶中心矩为 0 ,二阶

中心矩为方差:

函数 moment 计算任意阶中心矩。 格式: m=moment(X,order) 说明: order 确定阶。

DX2

rxE )(

Page 29: Matlab 统计工具箱

29

4.7 相关系数

相关系数是两个随机变量间线性相依程度的度量。

可用函数 corrcoef 计算它。格式: R=corrcoef(X)说明:输入矩阵 X 的行元素为观测值,列元素为变量, R=corrcoef(X) 返回相关系数矩阵R.

Page 30: Matlab 统计工具箱

30

五 . 假设检验

假设检验 是统计的基本问题 .旨在应用得到的少量信息 ,判断整体是否满足给定条件或达到给定的标准 .

回顾一下我们以前在统计学中所学的假设检验 .

其步骤为 :

Page 31: Matlab 统计工具箱

31

5.1 假设检验步骤

1. 设 : 零假设 .( 成立则 h=0,否则 h=1).

2. 取得一组观测值 (子样 ).

3. 给定显著型水平 α( 一般取 0.05).

4. 应用子样的某些统计量特征 .

5. 在 成立前提下 ,若出现已知观测值的概率小于 5%, 则拒绝 ,否则认为观测值与假设无显著差别 .

0H

0H

Page 32: Matlab 统计工具箱

32

5.2 ranksum 函数

调用方法 :

[p,h]=ranksum(x,y,alpha)

p 返回 x,y 的母体一致的显著性水平 ,h 为假设检验的返回值 .x,y 为两组观测值 ,alpha 为显著性水平 .

请参考下面例子

Page 33: Matlab 统计工具箱

33

5.2.1 Ranksum 函数举例

例 : 检验两组服从 poisson 分布的随机数样本的均值是否相同 .

x=poissrnd(5,10,1);

y=poissrnd(2,10,1);

[p,h]=ranksum(x,y,0.05)

p=

0.0028

h=

1

Page 34: Matlab 统计工具箱

34

5.3 signrank 函数

调用方法 : [p,h]=signrank(x,y,alpha)

参数与 ranksum 函数类似 .

例 : 检验两个正态分布的样本子样均值是否相等 .

x=normrnd(0,1,20,1);

y=normrnd(0,2,20,1);

[p,h]=signrank(x,y,0.05)

p=

     0.2568

h=

0

Page 35: Matlab 统计工具箱

35

5.4 ttest---t 检验

调用方法 :

[h,sig,ci]=ttest(x,m,alpha)

h 为假设检验的返回值 .sig 与 T 统计量有关 ,T= . ci 为均值的 (1-alpha)置信区

域 .m 为假设的样本均值 .

sx

Page 36: Matlab 统计工具箱

36

5.4.1 ttest 函数举例

例 : 给出理论均值为 0 、标准差为 1 的 100 个正态随机数样本。当然,观测样本的均值和标准差与理论值不同的,但假设检验的结果却还原其本质规律。

x=normrnd(0,1,1,100); [h,sig,ci]=ttest(x,0); h= 0 sig= 0.4474 ci= -0.1165 0.2620

结果 h=0, 意味着我们不能拒绝零假设。

Page 37: Matlab 统计工具箱

37

5.5 ztest 函数

已知方差的单样本均值的检验假设 .调用方法 :

[h,sig,ci]=ztest(x,m,sigma,alpha,tail)

ztest(x,m,sigma) 是在 0.05 显著性水平下检验正态分布的样本是否具有均值 m 和标准差 sigma.

h=ztest(x,m,sigma,alpha) 则可由您确定显著性水平alpha 值 ,并返回检验结果 h 。

Sig 、 ci 与 ttest 函数中相应的意义相同。

Page 38: Matlab 统计工具箱

38

5.5.1 函数 ztest 举例

例: x=normrnd(0,1,100,1); m=mean(x); m=0.0727 [h,sig,ci]=ztest(x,0,1); h=

0 sig=

0.4669 ci=

-0.1232 0.2687

Page 39: Matlab 统计工具箱

39

六 统计绘图

概述统计工具箱在 Matlab丰富的绘图功能上又添

加了图形表现函数, box图用于展现样本及其统计量的内在规律,也用于通过图形来比较多个样本的均值。正态概率图是确定样本是否为正态分布的图形。分位数 - 分位数图用于比较两个样本的分布。

Page 40: Matlab 统计工具箱

40

6.1 Box图

--boxplot 功能:数据样本的 box图。 格式: boxplot(X)

boxplot(X,notch,’sym’,vert,whis)

举例: x1=normrnd(5,1,100,1);

x2=normrnd(6,1,100,1);

x=[x1 x2];

boxplot(x,1)

Page 41: Matlab 统计工具箱

41

6.2误差条图

---errorbar 功能:误差条图。 格式: errorbar(X,Y,L,U,symbol) 举例: lambda=(0.1:0.2:0.5);

r=poissrnd(lambda(ones(50,1),: ) );

[p,pci]=poissfit(r,0.001);

L=p-pci(1,: )

U=pci(2,: )-p

errorbar(1:3,p,L,U,’+’)

Page 42: Matlab 统计工具箱

42

还有其他函数:

1: fsurfht 画交互轮廓图

2: gline 绘制交互

3:gname 用实例名称或实例号来标记图中的点

4: lsline 绘制数据的最小二乘拟合线

5: normplot 图形化正态检验的正态概率图

6: pareto 帕累托图

7: qqplot 两个样本的分位数 - 分位数图

8 :rcoplot 回归残差图

9: refcurve 在当前图形中给出多项式拟合曲线

6.3

Page 43: Matlab 统计工具箱

43

几个统计绘图的例子

画正态概率图Normplot(x)画数据的正态概率图X=normrnd(0,1,50,1)H=normplot(x);

Page 44: Matlab 统计工具箱

44

pareto 图

Pareto(y,’names’)defects=['pits ';'cracks';'holes ';'dents '];quantify[5,3,19,25];quantity=[5,3,19,25];

Page 45: Matlab 统计工具箱

45

用实例名来标记图中的点

Gname(‘case’)功能:用实例名来标记图中的点Load citiesEduation=rating(:,6);arts=ratings(:,7);Plot(eduation,artsk,’+’)Gname(names)

Page 46: Matlab 统计工具箱

46

第四章 最优工具箱( Optimization Toolbox Ver 5.0 )

优化工具箱简介 Matlab 的优化工具箱提供了对各种优化问题的一个完整

的解决方案,其内容涵盖线性规划,二次规划,非线性规划,最小二成问题,非线性方程求解,多目标决策,最小最大问题,以及半无限问题等的优化问题。

一个简单的例子 :

例一 ,考虑如下优化问题

目标函数 :

minf(x)x=℮x1(4x1

2+2x22+4x1x2+2x2+1)

约束方程 :

x1x2 - x1 - x2+1.5≤0

x1x2≥ - 10

Page 47: Matlab 统计工具箱

47

为了求解该优化问题,必须先编写一个能够返回函数值的 M 文件,将函数表达式写入,然后调用有约束非线性优化函数 constr ,由于优化函数要求约束方程具有 G(x)≤0 的形式,因此必须将约束方程规范化,进行与处理。

规范化后约束方程变为x1x2 - x1 - x2+1.5≤0

- x1x2 - 10≤0 求解过程

第一步:为目标函数及约束方程编写M 文件——— fun.m

function [f,g] = fun(x) f =exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1) ;

g(1,1) = 1.5+x(1)*x(2) –x(1) –x(2) ; % 约束

g(2,1) = - (1)*x(2) –10 ;

第二步:在命令窗口调用有约束非线性优化函数 constr

x0 = [-1,1] ; % 设置初始解向量

x = constr (‘fun’, x0)

经过29次函数调用后,得出如下结果:

x = 9.5474 1.0474

极值点处的函数值和约束条件的值为:

[f,g] = fun(x)

Page 48: Matlab 统计工具箱

48

f =0.0236g = 0e –15* .8882 可见,使用 Matlab 的优化工具箱解决优化问题简洁,明了。用户应该将精力集中于需要解决的问题,而不需要考虑各种算法的具体实现。

4.2.2 约束方程的规范化 由于 Matlab 的优化工具箱仅支持形如 G(x)≤0 的约束方程以及变量的

上下界约束。因此,对于非规范型的约束方程,必须进行变换。将其变 换为形如 – g(x)≤0 对于等式约束, Matlab 要求必须将等式约束方程置于约束变量 g

的前几个元素中,并在优化参数设置选项 options 相两种设置 options(13) 为等式约束方程的个数。

以例一的优化问题为例,加入一个等式约束 :

x1+x2 = 1 将其改为规范等式约束 :

x1+x2 – 1= 0 并在第二步中加入 : options(13) = 1 ; % 有一个等式约束 对于上下界约, Matlab 通过优化函数的有界语法调用来实现。例如,

对于 constr 函数,其有界语法调用格式为 : x = constr ( ‘fun’, x0 , options , vlb , vub ) ; 该调用将 x 限制在 vlb≤x≤vub

Page 49: Matlab 统计工具箱

49

4.2.3 参数设置与附加参数传递优化问题求解时常常要对相对误差,使用算法等进行设置, Matlab 提供了 options 向量来对优化函数进行参数设置。如果没有使用 options 向量或者 options 向量唯为空向量, 则回自动生成一个 options 向量并使用一组缺省值。如果要对 options 向量中的某些元素重新赋值,则可首先通过 foptions 函数来产生一个 options 向量,然后对有需要的元素赋值,其他仍然为空缺值。

foptions 功能:设置优化参数, 显示参数值 格式: help foptions

options = foptions

需要注意的是,附加参数不能超过 10 个。

4.2.4 表达式优化

直接对由表达式描述的简单函数进行优化

注意,当书写这种表达式时,自变量必须以小写字母 x 表示。

例 3 表达式优化的例子 :

x = fminu (‘sin(x)’ , 1) % 求 sin(x) 的最小值,初始值为 1

x = fxolve (‘x*x*x –[1,2;3,4]’ , ones(2,2)) % 矩阵方程求解

x = leastsq ( ‘x*x –[3 5; 9 10]’ , eye(2,2)) % 最小方差问题

Page 50: Matlab 统计工具箱

50

4.3 线性规划目标函数 : minc1x1+c2x2+…cnxn

约束 : a11x1+a12x2+…+a1nxn=b1

a21x1+a22x2+…+a2nxn=b2

am1x1+am2x2+…+amnxn=bm

xi≥0, i = 1,2, …n 注意,所有的决策变量 xi 均假定为非负,否则可用 x’i –x’’i 取代它, x’i>0 , x’’i>0, 如果

有不等式约束,则对含≤的约束,在左边加上一个非负变量使其成为等式约束;对含≥的约束,在左边减去一个非负变量使其成为等式约束。

4.3.2 lp 函数

lp 功能 :求解线性规划问题

格式 : x = lp(c,A,b)

x = lp(c,A,b,vlb)

x = lp(c,A,b,vlb,vub) % 设置解向量的上下界

x = lp(c,A,b,vlb,vub,x0) % 设置初始解向量 x0

x = lp(c,A,b,vlb,vub,x0,neqcstr) % 设置在约束中的等式约束的个数

[x,lambda,how] = lp (c,A,b,…) % 同时返回拉格朗日乘子

Page 51: Matlab 统计工具箱

51

例子 求下面线性规划问题:目标函数 : f(x) = –5x1 –4x2 –6x3

约束方程 : x1-x2+x3≤20

3x1+2x2+4x3≤42

3x1+2x2≤30

0≤x1, 0≤x2, 0≤x3 第一步:输入系数 c = [ -4,-5,-6 ]

a = [ 1 –1 1

3 2 4

3 2 0 ];

b = [ 20 ; 42 ; 30 ] ;

第二步 :求解[ x, lambda ] = lp ( c, a, b, zeros (3,1))

解为:x = 0 15.0000 3.000

lambda = 0 1.5000 0.5000 1.0000 0 0

A 为约束方程系数矩阵 c 为目标方程系数

b 为约束方程系数向量

Page 52: Matlab 统计工具箱

52

例子: 求无约束非线性问题f(x) = 100 ( x2 –x1

2 )2 + (1 –x1)2

初始解向量: x=[ -1.2 1 ]第一步:编写M文件function f = fun(x)f = 100*(x(2) –x(1)^2)^2+(1 –x(1)^2;第二步:求解x = [ -1.2 , 1 ]x = fminu (‘fun’, x) x = 1.0000 1.0000 fun(x) = 8.8348e-11

4.4 非线性规划4.4.1 无约束规划fminu, fmins 功能 : 求解无约束非线性最优化问题 格式 : x = fminu ( ‘fun’ , x0) % 求函数 fun 的最小值,并设置初始值向量为 x0 x = fminu ( ‘fun’ , x0, options) % 可选参数在 options向量中设置 x = fminu ( ‘fun’ , x0, options, ‘grad’)

x = fminu ( ‘fun’ , x0, options, ‘grad’ , p1, p2, …) [ x, options ] = fminu ( ‘fun’, x0, …) […] = fmins ( ‘fun’, x0, … ) options(2)控制 x 的精度 options(3)控制目标函数 f 的精度

Page 53: Matlab 统计工具箱

53

fmins 线性搜索算法的控制 : 缺省 options(7)=0 ,使用一种二次和三次多项式插值的混合算法 options(7)=1 时,使用三次多项式插值算法。目标函数大于2阶,一般用 fminu 函数;但对于非常不连续的函数则用fmuns 函数

4.4.2 二次规划4.4.3 有约束规划 fmin 函数 — 标量最优求解标量最优问题的一般描述 :

目标函数: mina f(a)

区域约束单变量问题 :

目标函数: minaf(a)

约束条件: a1<a< a2

fminu 函数优化算法的控制:缺省 options(6)=0 时,用拟牛顿方法

options(6) = 1 时,用 DFP公式来逼近 Hessian 矩阵

options(6) = 2 时,用最速下降法

Page 54: Matlab 统计工具箱

54

例子 :求下面标量函数在 (0,5)区间的最小值 目标函数: f = (a-3)2 –1 第一步: 编写M 函数 function f = fun(a) f = (a-3)^2 –1 ; 第二步: 求解 a = fmin (‘fun’, 0,5) a = 3 The value at the minimum is Y= f(a) Y = 1

fmin 功能: 求解区域约束单变量问题。

格式: a = fmin( ‘fun’, a1, a2 )

a = fmin( ‘fun’, a1, a2, options )

a = fmin( ‘fun’, a1, a2, options, p1, p2,….)

[ a, options ] = fmin( ‘function’, a1, a2,…)

说明: options(2) 控制 x 的精度

options(14)控制函数的计算次数

Page 55: Matlab 统计工具箱

55

constr 功能 :多变量非线性约束最优问题求解

格式 : x =constr ( ‘fun’, x0 ) % 求解非线性约束最优化问题,初始向量为x0

x =constr ( ‘fun’, x0, options )

x =constr ( ‘fun’, x0, options, vlb, vub, ‘grad’, ) % 设置解向量上下界

x =constr ( ‘fun’, x0, options, vlb, vub, ‘grad’, p1, p2, …)

[ x, options ] = constr (‘fun’. X0, …)

[ x, options, lambda ] = constr (‘fun’, x0, …)

[ x, options, lambda, hess ] = constr (‘fun’, x0, …)

options(4)控制对约束的越限程度

3 constr 函数多变量非线性约束最优化问题的一般描述目标函数: minx f(x)

约束条件: G(x)≤0

Page 56: Matlab 统计工具箱

56

目标函数: f(x) = -x1*x2*x3

约束条件: -x1 –2x2 –2x3≤0; x1+2x2+2x3≤72

初始解向量: x = [ 10 10 10 ]

第一步:编写M 文件function [ f , g ] = fun(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 ;

第二步:求解x0 = [ 10, 10, 10 ] ;x = constr ( ‘fun’, x0 )经过49次运算后,结果为x = 24.0000 12.0000 12.0000[ f, g ] = fun(x)f = 3.4560e+03g = 72 0

例子

Page 57: Matlab 统计工具箱

57

4.5最小最大( minmax)问题一般描述:目标函数:约束条件: G(x)≤0

minimax 功能:求解最小最大问题 格式: x = minimax( ‘fun’,x0) % 求解最小最大问题,初始解向量为 x0 x = minimax( ‘fun’,x0 , options) x = minimax( ‘fun’,x0 , options, vlb, vub,’grad’) x = minimax( ‘fun’,x0 , options, vlb, vub, ‘grad’, p1, p2,…) [x,options] = minimax( ‘fun’, x0,…)

minimax 功能:求解最小最大问题 格式: x = minimax( ‘fun’,x0) % 求解最小最大问题,初始解向量为 x0

x = minimax( ‘fun’,x0 , options)

x = minimax( ‘fun’,x0 , options, vlb, vub,’grad’)

x = minimax( ‘fun’,x0 , options, vlb, vub, ‘grad’, p1, p2,…)

[x,options] = minimax( ‘fun’, x0,…)

Page 58: Matlab 统计工具箱

58

举例 : (1)求下述最小最大问题: [f1(x),f2(x),f3(x),f4(x),f5(x)]

其中 f1 = 2x1

2 + x22 –48x1 –40x2 + 304

f2 = -x12 –3x2

2

f3 = x1 + 3x2 –18

f4 = -x1 –x2

f5 = x1 + x2 –8

第一步:编写M 文件function [f,g] = fun(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);

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

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

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

g = [ ]; %无约束

第二步:求解x0 = [0.1, 0.1];

x = minimax (‘fun’, x0 )

经过 29 次运算后,结果为:

Page 59: Matlab 统计工具箱

59

x = 4.0000 4.0000fun(x)ans = 0.0000 -16.0000 -2.0000 -8.0000 0.0000

(2) 求上述问题的绝对值最小最大问题:即目标函数为: [ abs(f1(x)), abs(f2(x)), abs(f3(x)), abs(f4(x)), abs(f5(x))]第一步:编写M 文件 ( 与例一相同)第二步:求解x0 = [ 0.1, 0.1];options(15) = 5; %全部为绝对值最小最大分量x = minimax( ‘fun’, x0, options )经过 39 次运算,解为:x =8.7769 0.6613fun(x)ans =10.7609 -7.2391 -9.4382 1.4382

Page 60: Matlab 统计工具箱

60

4.8最小二乘最优nnls 函数――非负线性最小二乘求解非负线性最小二乘问题的一般形式目标函数: minx½‖Ax-b‖2

2

约束条件: x≥0

nnls 功能:求解非负最小二乘问题 格式: nnls (A,b) % 求解上述非负最小二乘问题 nnls (A,b,tol) % 定义 x 的容许误差,缺省: tol = max(size(A))*norm(A,l)*esp [x,w] = nnls(A,b) [x,w] = nnls(A,b,tol)

举例:一个最小二成问题的无约束与非负约束解法的比较

第一步:输入系数

a = 0.0372 0.2869

0.6861 0.7071

0.6233 0.6245

0.6344 0.6170

b = 0.8587

0.1781 0.0747 0.8405

Page 61: Matlab 统计工具箱

61

第二步:求解[a \ b], nnls (a, b)] = -2.5625 0 1.1106       0.6929[norm(a*(a\b) –b), norm(a*nnls(a,b) –b)] = 0.6677 0.9119

4.8.3conls 函数-约束线性最小二乘求解线性约束最小二乘问题的一般描述:目标函数: min½‖Ax-b‖2

2

约束条件: Cx≤d

conls 功能: 线性约束最小二乘问题求解

格式: x = conls(A, b, C, d) % 求解在约束 c*x≤d 下方程 A*x=b 的最小二乘解

x = conls(A, b, C, d, vlb)

x = conls(A, b, C, d, vlb, vub) % 设置上下界

x = conls(A, b, C, d, vlb, vub, x0) % 设置初始解向量 x0

x = conls(A, b, C, d, vlb, vub, x0, neqcstr)

x = conls(A, b, C, d, vlb, vub, x0, neqcstr, display)

[ x, lambda, how ] = conls (A, b, C, d,…) % 同时返回拉格朗日乘子

其中, A,b 为线性系统的系数

C,d 为线性约束的系数

Page 62: Matlab 统计工具箱

62

举例 : 求解如下系统的最小二乘解 系统: Ax = b 约束: Cx≤b; vlb≤x≤vub

第一步:输入系统系数第二步:求解[ x, lambda ] = conls (A, b, C, d, vlb, vub)

4.8.4 leastsq 函数-非线性最小二乘求解非线性最小二成问题的一般描述minx½‖F(x)‖2

2 = ½∑if i (x)2

leastsq 功能:求解非线性最小二乘(非线性数据拟合)问题

格式: x = leastsq (‘fun’, x0) % 求解返回解向量 x,初始解向量为 x0

x = leastsq (‘fun’, x0, options)

x = leastsq (‘fun’, x0, options, ‘grad’)

x = leastsq (‘fun’, x0, options, ‘grad’, p1, p2,…)

[x, options] = leastsq(‘fun’, x0,…)

[x, options, funval] = leastsq(‘fun’, x0, …)

[x, options, funval, Jacob] = leastsq(‘fun’, x0, …)

options(2)控制 x 的精度

options(3)控制目标函数 f 的精度

Page 63: Matlab 统计工具箱

63

举例:求下述非线性最小二乘问题 ∑ ( 2 + 2k –ekx1 –ekx2 ) k=1,2,…,10 初始解向量为 x = [0.3 0.4] 由于 leastsq 函数要求传递的函数为向量形式且不具有平方和形式,因此对函数作以下变换: Fx(x) = 2 + 2k –ekx1 –ekx2 k=1, 2,…,10

第一步:编写M 文件function f =fun(x)k = [1:10;]f = 2+2*k –exp(k*x(1)) –exp(k*x(2));

第二步:求解x0 = [0.3 0.4]x = leastsq( ‘fun’, x0 )经过 42 次运算,得到以下结果x = 0.25783 0.25783sum (fun(x).*fun(x)) % 求目标函数ans = 124.3622

Page 64: Matlab 统计工具箱

64

fzero 功能: 求解单变量函数

格式: z = fzero(‘fun’,x0) % 单变量函数 fun求解 , 并设置初始搜索点为 x0

z = fzero(‘fun’,x0,tol) % 设置解的精度

z = fzero(‘fun’,x0,tol,trace)

z = fzero(‘fun’,x0’tol,trace,p1,p1,…)

tol 为相对容许误差

1.9 方程求解 fzero 采用数值解法求解非线性方程; fsolve 函数则采用非线性最小二乘法求解线性方程组

Page 65: Matlab 统计工具箱

65

举例: 对下述函数求解: f(x) = x3 –2x –5第一步:编写M 文件function y = f(x)y = x.^3 –2*x –5;

第二步:求解z = fzero(‘f’, 2)z = 2,0946

1. fsolve 功能: 非线性方程求解非线性方程的一般描述:F(x) = 0 其中 x 为向量, F(x) 为一个函数向量

格式: x = fsolve(‘fun’, x0) % 非线性方程 fun求根

x = fsolve(‘fun’, x0, opntions)

x = fsolve(‘fun’, x0, opntions, ‘grad’)

x = fsolve(‘fun’, x0, opntions, ‘grad’, p1, p2,…)

[x,options] = fsolve(‘fun’,x0,…)

Page 66: Matlab 统计工具箱

66

举例: (1) 求下述系统的根 2x1 –x2 = e-x1

-x1+2x2 = e—x2

即解下述方程 2x1 –x2 = e-x1

-x1+2x2 = e—x2

并设初始解向量为 x0= [ -5, -5 ]

第一步:编写M 文件function F = fun(x)F = [ 2*x(1) –x(2) –exp( -x(1));x(1) + 2*x(2) –exp(-x(2))]第二步:求解x0 = -5*ones(2,1);options = foptions;options(1) = 1; % 设置显示输出中间结果x = fsolve (‘fun’,x0,options)f = fun(x)经过 25 次迭代后,得到一个零点f-count RESID STEP-SIZE GRAD/SD3 47071.2 1 -9.41e+048 966.828 1 -1.81e+0315 1.99465 3.85 5.620 0.000632051 0.895 -0.086725 1.39647e?5 0.998 0.98e?9解及解处的函数值为:x = 0.5671 0.5671f = 1.0e –7*0.2642 0.2642

Page 67: Matlab 统计工具箱

67

(2) 求矩阵 x 使其满足方程x*x*x = 1 2∣并使初始解向量为: x = [1,1;1,1]

第一步:编写M 文件function F = fun(x)F = x*x*x –[1,2,;3,4];

第二步:求解x0 = ones(2,2);x = fsolve (‘fun’, x0)经过 44 次迭代后,解为:x = 0.1291 0.86021.2903 1.1612F = x*x*x –[1,2,;3,4]F = 0e –05 *0.0350 0.12680.0721 -0.1293sum (sum (F.*F))ans = 3.9218e –12