MATLAB在数学建模中的应用(二)

size():获取矩阵的行数和列数
(1)s=size(A),
当只有一个输出参数时,返回一个行向量,该行向量的第一个元素为矩阵的行数,第二个元素是矩阵的列数。

(2)[r,c]=size(A),

(3)size(A,n)如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则 size将返回矩阵的行数或列数。其中r=size(A,1)该语句返回的是矩阵A的行数, c=size(A,2) 该语句返回的是矩阵A的列数。另外length()=max(size())。

subplot():
作用:在一个绘图窗口中显示多个图形。

基本调用格式为:subplot(m, n, k) 或 subplot(m n k),其中m, n, k取值为1~9。
该函数表示将绘图窗口划分为m×n个子窗口(子图),并在第k个子窗口中绘图
MATLAB软件提供了基本的曲线拟合函数的命令:
多项式函数拟合:a=polyfit(xdata,ydata,n)
其中n表示多项式的最高阶数,xdata,ydata为将要拟合的数据,它是用数组的方式输入.输出参数a为拟合多项式 y=a1xn+…+anx+a n+1的系数 。
多项式在x处的值y可用下面程序计算:
y=polyval(a,x,m)
线性:m=1, 二次:m=2, …
polyfit的输出是一个多项式系数的行向量。为了计算在xi数据点的多项式值,调用MATLAB的函数polyval。

 1 clf       %清空图形窗口
 2 x=[0 2 5 6 6.75 8.5 10.25 13.5];
 3 y=[5.25 6.2 7.2 7.5 8 8.7 10.1 13.5];
 4 [p,S]=polyfit(x,y,2); %z=polyfit(x,y,2)
 5 y2=polyval(p,x);
 6 subplot(1 2 1);  %subplot(1,2,1),先绘制第一个图形
 7 plot(x,y,'r+','LineWidth',1.5)
 8 title('plot1'),xlabel('p'),ylabel('S')
 9 
10 subplot(1 2 2);%绘制第二个图形
11 plot(x,y2,'-.b*','LineWidth',1.0)
12 title('plot2'),xlabel('x'),ylabel('y2')

这里写图片描述

num2str():
在matlab中,无论是内建函数还是工具箱函数, 2很常见, 这可能是因为2英文two和to发音相同。而2写起来也比较简单。 所以很多转换类函数都用2来命名而非to。比如number to string, 不是命名为numTostr而num2str。

函数功能: 把数值转换成字符串

randn(n):
返回n*n随机项的矩阵,randn(1)为产生一个随机数。

Logistic模型
自然界中存在着一种事物的发展规律�在其发展初期�数量或规模增加得越来越快,到了一定时期�其增长速度逐步慢下来,最终数量或规模不再增长,从而稳定在数量或规模的极限值处。

回归分析(regression analysis)
确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。运用十分广泛,回归分析按照涉及的自变量的多少,分为回归和多重回归分析;按照自变量的多少,可分为一元回归分析和多元回归分析;按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。如果在回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多重线性回归分析。

xlsread():
从指定文件名夹读取,比如说num=xlsread(‘data.xls’),即从当前程序所在文件夹里,从A1单元格开始读取,读取data.xls文件,把数据返回给num。

regress():
作用:一般多元回归分析
调用格式:
[b, bint, r, rint, stats] = regress(y,X,alpha) 或者
[b, bint, r, rint, stats] = regress(y,X) 此时,默认置信度alpha = 0.05。
这里,y是一个列向量,X是一个矩阵,其中第一列是全1向量(这一点对于回归来说很重要,这一个全1列向量对应回归方程的常数项),一般情况下,需要人工造一个全1列向量。

b是回归系数,bint是回归系数的区间估计,r是残差,rint是置信区间,stats是用于检验回归模型的统计量,有三个数值:相关系数r^2,F值,与F对应的概率P,alpha是显著性水平(缺省的时候为0.05)。相关系数r^2越大,说明回归方程越显著。

Matlab中polyfit和regress
表中是道琼斯工业指数(DJIA)和标准普尔500种股票指数(S&P500)1988年至1997年对应股票的收益率资料:

这里写图片描述

1)ployfit

 1 x  = [16.0 31.7 -0.4 23.9 7.4 16.8 4.9 36.4 28.6 24.9];
 2 y = [16.6 31.5 -3.2 30.0 7.6 10.1 1.3 37.6 23.0 33.4];
 3 scatter(x,y,'r*');
 4 
 5 %scatter(x,y)和plot(x,y,'*')的效果一致就是根据x和y坐标绘制出所有点而已,而plot默认是将所有点按一定的顺序连接成一条多段线。
 6 
 7 xlabel('DJIA收益率(%)');
 8 ylabel('S&P500收益率(%)');
 9  p = polyfit(x,y,1);%1表示一次函数
10  hold on;
11  xx = -5:1:40;
12 yy = polyval(p,xx);
13 plot(xx,yy,'b-');%画出来的是光滑的曲线
14  grid;
15 title('回归分析表')
16 hold off;
17 [r,p,rlo,rup] = corrcorf(x,y)%相关分析
18 
19 >> [r,p,rlo,rup] = corrcoef(x,y)
20 
21 r =
22 
23     1.0000    0.9481
24     0.9481    1.0000
25 
26 
27 p =
28 
29     1.0000    0.0000
30     0.0000    1.0000
31 
32 
33 rlo =
34 
35     1.0000    0.7903
36     0.7903    1.0000
37 
38 
39 rup =
40 
41     1.0000    0.9880
42     0.9880    1.0000
43 
44 >> [i,j] = find(p<0.05);
45 >> [i,j] = find(p<0.05)
46 
47 i =
48 
49      2
50      1
51 
52 
53 j =
54 
55      1
56      2
57 
58  %r(i,j)表示相关系数
59  %P表示假设检验的P-value值,P-value值越小表示的相关性越显著。
60  %一般以P < 0.05 为显著, P<0.01 为非常显著

这里写图片描述
附录:r(1,2) = r(2,1) = 0.9481便是相关系数,t = r*sqrt(n-2)/sqrt(1-r^2) = 8.4335,tα/2 = 2.31,则结果是显著的。

rlo和rup是r在%95可信度下的置信区间。

2)regress解决上题(easier)

 1 x  = [16.0 31.7 -0.4 23.9 7.4 16.8 4.9 36.4 28.6 24.9];
 2 y = [16.6 31.5 -3.2 30.0 7.6 10.1 1.3 37.6 23.0 33.4];
 3 
 4 scatter(x,y,'r*');
 5 xlabel('DJIA收益率(%)');
 6 ylabel('S&P500收益率(%)');
 7 
 8  Y = y';%把Y转化成列向量
 9  X = [ones(length(y),1),x'];%构建常数项系数
10 [b,bint,r,rint,stats]=regress(Y,X)
11 %下面是返回值
12 b =
13 
14    -2.5086
15     1.1198
16 
17 
18 bint =
19 
20    -9.3225    4.3052
21     0.8137    1.4259
22 
23 
24 r =
25 
26     1.1918
27    -1.4891
28    -0.2435
29     5.7454
30     1.8221
31    -6.2040
32    -1.6784
33    -0.6522
34    -6.5177
35     8.0256
36 
37 
38 rint =
39 
40   -10.0742   12.4578
41   -11.9810    9.0029
42    -9.6540    9.1671
43    -4.3221   15.8128
44    -8.7610   12.4052
45   -16.1645    3.7565
46   -11.9494    8.5926
47   -10.4663    9.1620
48   -15.8388    2.8034
49    -0.7121   16.7633
50 
51 
52 stats =
53 
54     0.8990   71.1816    0.0000   23.5811
55 %ployval函数中第一个多项式系数(行向量)是按高到低,而regress中的b是从低到高,而且是个列向量,不可直
56 
57 %接bb = b',若是这样还需逆置(fliplr(bb)),或者直接顺时针旋转90
58 %B=rot90(A):矩阵B是矩阵A沿逆时针方向旋转90。得到的
59 %B=rot90(A,k):矩阵B是矩阵A沿逆时针方向旋转k*90。得到的(要想顺时针旋转,k取-1)
60 
61 xx = -5:5:40;
62 yy = polyval(rot90(b,-1));
63 hold on;
64 plot(xx,yy,'r')
65 grid

这里的y是个定量的变量,可以用regress()进行回归,但当y是一个定性的变量时需要用到logistic回归,《MATLAB在数学建模应用》p37。

3.3 主成分分析
类型:一种处理高维数据的方法。
降维思想:在实际问题的研究中,往往会涉及众多有关的变量。但是,变量太多不但会增加计算的复杂性,而且也会给合理地分析问题和解释问题带来困难。一般说来,虽然每个变量都提供了一定的信息,但其重要性有所不同,而在很多情况下,变量间有一定的相关性,从而使得这些变量所提供的信息在一定程度上有所重叠。因而人们希望对这些变量加以“改造”,用为数极少的互补相关的新变量来反映原变量所提供的绝大部分信息,通过对新变量的分析达到解决问题的目的。

15家企业+8项指标,为了选择综合实力最强的企业,进行降维处理的主成分分析。

原文地址:https://www.cnblogs.com/twomeng/p/9476357.html