MATLAB在数学建模中的应用
Posted twomeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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项指标,为了选择综合实力最强的企业,进行降维处理的主成分分析。
以上是关于MATLAB在数学建模中的应用的主要内容,如果未能解决你的问题,请参考以下文章
数学建模MATLAB应用实战系列(七十九)-因子分析法(附MATLAB 和Python代码实现)
MATLAB教程案例80matlab在大学数学中的应用——高等数学
MATLAB教程案例82matlab在大学数学中的应用——概率统计