QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1640|回复: 1
打印 上一主题 下一主题

matlab在数学建模中的运用3

[复制链接]
字体大小: 正常 放大

2620

主题

162

听众

1万

积分

升级  0%

  • TA的每日心情
    开心
    2015-3-12 15:35
  • 签到天数: 207 天

    [LV.7]常住居民III

    社区QQ达人 发帖功臣 新人进步奖 优秀斑竹奖 金点子奖 原创写作奖 最具活力勋章 助人为乐奖 风雨历程奖

    群组第六届国赛赛前冲刺培

    群组国赛讨论

    群组2014美赛讨论

    群组2014研究生数学建模竞

    群组数学中国试看培训视频

    跳转到指定楼层
    1#
    发表于 2014-9-26 10:14 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    matlab在数学建模中的运用3
    41.
    Matlab 解惑之——多项式运算 (2011-07-21 16:31:54)转载▼
    标签: matlab 杂谈        分类: 算法

    % matlab语言把多项式表达成一个行向量,该向量中的元素是按多项式 %降幂排列的。
    % f(x)=an^n+an-1^n-1+……+a0
    % 可用行向量 p=[an an-1 …… a1 a0]表示
    clear all ;
    clc;
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 1. poly —— 产生特征多项式系数向量poly(A)
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 特征多项式一定是n+1维的
    % 特征多项式第一个元素一定是1
    a=[1 2 3;4 5 6;7 8 0];
    p=poly(a)
    % p =1.00 -6.00 -72.00 -27.00
    % p是多项式p(x)=x^3-6x^2-72x-27的matlab描述方法,我们可用:
    p1=poly2str(p,'x') %— 函数文件,显示
    % 数学多项式的形式
    % p1 =x^3 - 6 x^2 - 72 x - 27
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 2.roots —— 求多项式的根
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    r=roots(p) %P为多项式系剩,按降幂排列
    % r = 12.12
    % -5.73 ——显然 r是矩阵a的特征值
    % -0.39
    % 当然我们可用poly令其返回多项式形式
    p2 = poly(r) %poly(r) 通过根得出多项式系数
    % p2 =
    % 1.00 -6.00 -72.00 -27.00
    % matlab规定多项式系数向量用行向量表示,一组根用列向量表示
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 3.conv,convs多项式乘运算
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 例:a(x)=x^2+2x+3; b(x)=4x^2+5x+6;
    % c = (x^2+2x+3)(4x^2+5x+6)
    a=[1 2 3];b=[4 5 6];
    c=conv(a,b) %=conv([1 2 3],[4 5 6])
    % c = 4.00 13.00 28.00 27.00 18.00
    p=poly2str(c,'x')
    % p = 4 x^4 + 13 x^3 + 28 x^2 + 27 x + 18
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 4.deconv多项式除运算
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    a=[1 2 3];
    c = [4.00 13.00 28.00 27.00 18.00]
    d=deconv(c,a)
    % d =4.00 5.00 6.00
    % [d,r]=deconv(c,a)
    % r为余数
    % d为c除a后的整数
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 5.多项式求导
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % matlab提供了polyder函数多项式的求导。
    % 命令格式:
    % polyder(p): 求p的求导
    % polyder(a,b): 求多项式a,b乘积求导
    % 例:
    a=[1 2 3 4 5];
    poly2str(a,'x')
    % ans = x^4 + 2 x^3 + 3 x^2 + 4 x + 5
    b=polyder(a)
    % b = 4 6 6 4
    poly2str(b,'x')
    % ans =4 x^3 + 6 x^2 + 6 x + 4
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %6.多项式拟合
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % P = POLYFIT(X,Y,N) finds the coefficients of a polynomial P(X) of
    % degree N that fits the data Y best in a least-squares sense. P is a
    % row vector of length N+1 containing the polynomial coefficients in
    % descending powers, P(1)*X^N + P(2)*X^(N-1) +...+ P(N)*X + P(N+1).
    x0=0:0.1:1;
    y0=[-.447 1.978 3.11 5.25 5.02 4.66 4.01 4.58 3.45 5.35 9.22];
    p=polyfit(x0,y0,3)
    % p = 56.6915 -87.1174 40.0070 -0.9043
    % Y = POLYVAL(P,X) returns the value of a polynomial P evaluated at X. P
    % is a vector of length N+1 whose elements are the coefficients of the
    % polynomial in descending powers.
    % Y = P(1)*X^N + P(2)*X^(N-1) + ... + P(N)*X + P(N+1)
    xx=0:0.01:1;yy=polyval(p,xx);
    plot(xx,yy,'-b',x0,y0,'or')


    1. 多项式的算术运算
    参加加减运算的多项式应该具有相同的阶次。
    多项式乘法采用conv函数,除法由deconv函数完成。
    2. 求根
    求多项式的根采用roots函数。
    3. 求值
    函数polyval可以将某个特定数值代入多项式
    函数polyvalm可以求出当多项式中的未知数为方阵时的值。
    4. 求导
    使用polyder函数对多项式求导

    例: 将表达式(x-4)(x+5)(x2-6x+9)展开为多项式形式,并求其对应的一元n次方程的根。

    >>p=conv([1 -4],conv([1 5],[1 -6 9]))
    >>px=poly2str(p,’x’)
    >>x=roots(p)

    例: 已知向量A=[1 –34 –80 0 0],用此向量构造一多项式并显示结果。
                       (x-1)(x+34)(x+80)(x-0)(x-0)

    >>PA=poly(A)
    >>PAX=poly2str(PA,'X')
    X^5 + 113 X^4 + 2606 X^3 - 2720 X^2



    42.matlab中line()的用法 (2012-12-15 18:08:01)转载▼
    标签: matlab 杂谈        
    line([起点横坐标,终点横坐标],[起点纵坐标,终点纵坐标]),
    例line([1,2],[3,4])将画出(1,3)到(2,4)的一条直线,而不是(1,2)到(3,4)。
    当line(a,b)中,a b是相同大小的矩阵时,将会在对应的每一列做一条直线。
    当line(a,b,c)时,相应地会在三维图中画一条线。
    a b c 均为2XN矩阵。

    43.
    plot(x,y,'.','markersize',8)%默认为6   %改变点的大小

    44.
    rand,randi和randn区别:
    1,rand 生成均匀分布的伪随机数。分布在(0~1)之间
       主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数
                 rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是'single'
                 rand(RandStream,m,n)利用指定的RandStream(我理解为随机种子)生成伪随机数
    2,randn 生成标准正态分布的伪随机数(均值为0,方差为1)
       主要语法:和上面一样
    3, randi 生成均匀分布的伪随机整数
       主要语法:randi(iMax)在开区间(0,iMax)生成均匀分布的伪随机整数
                 randi(iMax,m,n)在开区间(0,iMax)生成mXn型随机矩阵
                 r = randi([iMin,iMax],m,n)在开区间(iMin,iMax)生成mXn型随机矩阵

    43.
    scatter可用于描绘散点图。
    1.scatter(X,Y)
    X和Y是数据向量,以X中数据为横坐标,以Y中数据位纵坐标描绘散点图,点的形状默认使用圈。
    2.scatter(...,'filled')
    3.scatter3(x,y,z)
    描绘三维图像。



    44.
    unifrnd(1,10,2,3)%产生2行3列的1-10之间服从平均分布的随机数

    45.
    matlab factoran 因子分析函数 (2013-08-17 17:02:42)转载▼
    标签: matlab 概率 矩阵 载荷 方差 it        分类: matlab基础
        因子分析是指从观测变量中提取共性因子的多元统计分析技术,目前因子分析已经在很多领域得到了广泛的应用。
        在MATLAB中用于因子分析的函数为factoran(),其调用格式为:

    lambda = factoran(X,m)

    输入参数X为n×d的数据矩阵,行数据对应观测,列数据对应变量,m为公因子数,返回参数lambda为因子模型的载荷矩阵。

    [lambda,psi] = factoran(X,m)

    参数psi返回特殊方差的最大似然估计值。

    [lambda,psi,T] = factoran(X,m)

    参数T为旋转矩阵。

    [lambda,psi,T,stats] = factoran(X,m)

    返回的结构体变量stats包含模型检验的信息,loglike(对数似然函数的最大值),dfe(误差自由度),chisq(卡方统计量),p(检验的概率值)。


    45.
    函数名称: isnumeric
    函数功能: 判断输入参数是否是数字类型(包括浮点型和整型)
    语法格式:
    tf = isnumeric(A)
    返回1(true)如果A是数字类型的, 返回0(false)如果A不是数字类型的.类型的。

    46.
    [data,textdata]=xlsread(filename, sheet, 'range')
    其中data是数据
    textdata是文本
    注意两者的对应与一致性



    47.
    matlab计算加权欧氏距离的函数dist,加权函数将权值应用到输入得到加权输入。

    用法:
    1. dist (W,P)  
    输入SXR的W权值矩阵、RXQ的矩阵P的Q输入向量,返回SXQ的向量距离矩阵。也就是计算矩阵S行的W向量和Q行的P向量之间的距离矩阵。计算公式为:d = sum((x-y).^2).^0.5。例如:

    >> a = [1 2 3; 4 5 6]
    a =
         1     2     3
         4     5     6
    >> b = [2 3 4; 5 6 7]
    b =
         2     3     4
         5     6     7
    >> b'
    ans =
         2     5
         3     6
         4     7
    >> dist(a, b')
    ans =
        1.7321    6.9282
        3.4641    1.7321

    2. dist(pos)
    输入一个参数pos -- N x S矩阵,返回一个S x S的距离矩阵。例如:

    >> a = [1 2 3; 4 5 6]
    a =
         1     2     3
         4     5     6
    >> dist(a)
    ans =
             0    1.4142    2.8284
        1.4142         0    1.4142
        2.8284    1.4142         0
    >> dist(a')
    ans =
             0    5.1962
        5.1962         0



    48.
    Matlab中的randperm和randsample函数用法对比


    构建替代数据的时候,一种常见的思路是打乱原数据的排列次序,通过随机置换原数据的排列次序从而产生和原数据系列统计特征(如均值、方差、分布)一致的随机数据。具体到Matlab中,此思路的实现会涉及到两个命令:randperm和randsample

    p.s. 相关的重新排序命令还包括:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Reordering Algorithms
    amd           Approximate minimum degree permutation
    colamd        Column approximate minimum degree permutation
    colperm       Sparse column permutation based on nonzero count
    dmperm        Dulmage-Mendelsohn decomposition
    ldl           Block LDL' factorization for Hermitian indefinite matrices
    randperm      Random permutation
    symamd        Symmetric approximate minimum degree permutation
    symrcm        Sparse reverse Cuthill-McKee ordering

    1、RANDPERM

    根据Matlab文档,randperm最常用的用法是是返回一个从1-n的包含n个数的随机排列(每个数字只出现一次)——以行向量的形式
    1
    p = randperm(n) returns a row vector containing a random permutation of the integers from 1 to n inclusive
    如果希望从1-n的数字序列里面随机返回k个数,则可以使用
    1
    p = randperm(n,k)
    其中,这k个数之间彼此也是不相同的。可见,randperm能够产生不重复的随机排列,结合原数据,可写成类似下面的形式:
    1
    new = old( randperm(  size(old,1)  ) , : );
    这样新数组中的各行就被重排了。如果各列也需要重排,则可以嵌套使用。
    Matlab文档中还说,randperm完成的是不重复的重排采样(k-permutations),如果结果中的数需要重复多次出现的情况,则可以用:
    1
    randi(n,1,k)
    randperm和rand、randi、randn一样,其随机数的生成是收到rng命令控制的,因此,可通过该命令影响随机数据流rand stream的情况。

    2、RANDSAMPLE

    randsample的命令组合比randperm要复杂,事实上这个命令内部也有对randperm的调用。因此,在适当的情况下,使用randperm的速度理论上比randsample快。(事实上也快很多)
    randsample的命令格式:
    游客,如果您要查看本帖隐藏内容请回复
    游客,如果您要查看本帖隐藏内容请回复
    第一种情形,randsample(n,k)和randperm(n,k)的功能一样,都是产生k个不相同的数(1-n)。
    第二种情形,randsample(ARRAY,k),事实上就是randperm和原数组结合使用的形式,从ARRAY数组里面随机取出k个不相同的数。
    第三种情形,replacement是一个bool变量,为1的时候,取出的数可能是重复的,为0的时候,可能不重复。

    很显然,看到这里,会发现randsample和randperm很相似,譬如,之前旧数组随机排序的需求可写成下面的样式:
    1
    2
    3
    new = old( randsample( 1:length(matrix) , length(matrix) ,0),: );
    or
    new = randsample( old, length(old), 0 );   <-- I preferred this.
    事实上更有用的是第四种情形,多出来一个w,是权重系数,能够根据此权重系数在原数组(或1-n数组)里面选出可能重复的k个数。典型用法譬如:
    1
    R = randsample('ACGT',48,true,[0.15 0.35 0.35 0.15])
    上面的语句能够产生48个内容为ATCG的随机字串,且A出现的权重为0.15,其余类推。这个显然在生物信息学中很有用。ATCG也就是DNA的碱基序列。
    第五种情形,可以用自己提供的随机数stream替换系统默认的随机数,s必须派生自Matlab的RandStream类。

    小结

    通过对比,我们很容易的发现randperm比randsample更直接更底层,而randsample则是对各种使用的情形进行了封装。randsample最有用的优势是可以很方便的实现随机数的权重分布。


    49.
    生成绘制3-D图形所需的网格数据。在计算机中进行绘图操作时, 往往需要一些采样点,然后根据这些采样点来绘制出整个图形。在进行3-D绘图操作时,涉及到x、y、z三组数据,而x、y这两组数据可以看做是在Oxy平面内对坐标进行采样得到的坐标对(x, y)。
      例如, 要在“3<=x<=5,6<=y<=9,z不限制区间” 这个区域内绘制一个3-D图形,如果只需要整数坐标为采样点的话。我们可能需要下面这样一个坐标构成的矩阵:
      (3,9),(4,9),(5,9);
      (3,8),(4,8),(5,8);
      (3,7),(4,7),(5,7);
      (3,6),(4,6),(5,6);
      在matlab中我们可以这样描述这个坐标矩阵:
      把各个点的x坐标独立出来,得:
      3,4,5;
      3,4,5;
      3,4,5;
      3,4,5;
      再把各个点的y坐标也独立出来:
      9,9,9;
      8,8,8;
      7,7,7;
      6,6,6;
      这样对应的x、y结合,便表示了上面的坐标矩阵。meshgrid就是产生这样两个矩阵,来简化我们的操作。然后根据(x, y)计算获得z,并绘制出三维图形。
      在Matlab命令窗口中键入type meshgrid可以查看该函数的源代码(由此可以理解meshgrid的算法思想), 键入doc meshgrid或者help meshgrid可以获得帮助文档。语法  [X,Y] = meshgrid(x,y)
      上面的描述,我们可以知道,meshgrid返回的两个矩阵X、Y必定是行数、列数相等的,且X、Y的行数都等
      于输入参数y中元素的总个数,X、Y的列数都等于输入参数x中元素总个数(这个结论可以通过查看meshgrid的源代码得到,可以通过示例程序得到验证)。
      [X,Y]=meshgrid(x)与[X,Y]=meshgrid(x,x)是等同的
      [X,Y,Z]=meshgrid(x,y,z)生成三维数组,可用来计算三


    50.
    echo on%逐行显示m文件的内容
    echo off%结束上述操作


    51.
    X=round(normrnd(mu,sigma,[n,1]));%产生以mu,sigma
    %为均值和标准差的正态分布的随机数n行1列,然后在四舍五入取整

    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    23

    主题

    14

    听众

    1561

    积分

    升级  56.1%

  • TA的每日心情
    无聊
    2015-1-25 15:40
  • 签到天数: 34 天

    [LV.5]常住居民I

    社区QQ达人

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-5-22 19:42 , Processed in 0.437647 second(s), 55 queries .

    回顶部