zoukankan      html  css  js  c++  java
  • 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项指标,为了选择综合实力最强的企业,进行降维处理的主成分分析。

  • 相关阅读:
    springboot + swagger的实体类属性注解
    Idea破解办法+idea免费生成注册码+jsp属性选择器+注解什么的都报错
    springboot笔记(一)
    docker-compose 安装
    Spring cloud 分布式锁
    Mybait 快速生成Java POJO文件 及数据库Mapping文件。
    Git 提交所有文件
    Docker dockerfile-maven-plugin 使用
    Docker remote api 开启
    Linux git 关联 github仓库
  • 原文地址:https://www.cnblogs.com/twomeng/p/9476357.html
Copyright © 2011-2022 走看看