QQ登录

只需要一步,快速开始

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

matlab在数学建模中会用到的函数

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

2620

主题

162

听众

1万

积分

升级  0%

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

    [LV.7]常住居民III

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

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

    群组国赛讨论

    群组2014美赛讨论

    群组2014研究生数学建模竞

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

    跳转到指定楼层
    1#
    发表于 2014-9-26 10:23 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    matlab在数学建模中会用到的函数
    1.R=factor(x);//将x分解为低阶多项式的乘积形式
    2.find(A>m,n);//返回A>m(A中前n个)的元素在矩阵A中的位置
    3.stairs(y);//绘制阶梯状图,用于直方图的均衡化技术
    4.rref(A);//将矩阵A化为阶梯形
    5.协方差:在概率论和统计学中,协方差用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,
      即当两个变量是相同的情况。
     期望值分别为E(X) = μ 与 E(Y) = ν 的两个实数随机变量X与Y之间的协方差定义为:
     COV(X,Y)=E[(X-E(X))(Y-E(Y))]
     其中,E是期望值。协方差表示的是两个变量总体误差的方差
      协方差矩阵中的每一个元素是表示的随机向量X的不同分量之间的协方差,A(i,j)表示第i个元素与第j个
      元素之间的协方差。
      而不是不同样本之间的协方差

    6.randperm(n)%产生1-n的n个随机排列的向量
    7.std(A);%求矩阵的标准偏方差
    8.cumsum(A);%将矩阵A按列求和,
    9.cumsum(A,2);%将矩阵A按行求和
    10.find(A);%找出A中所有大于0的元素,按列排列,如果A是行向量,则按行排列
    11.find(,k)=find(A,'first');%返回A中第一个非零元的下标
    12.find(A,k,'last');%返回A中最后一个非零元的下标
    13.find(M > 3, 4)返回前四个M>3的索引值
    14.[r,c,v]= find(A>10);
    15.text(x,y,z,'.....',...)%用来在图形中指定坐标出标记注释
    16.gtext({'string....'})%动态的在图形中添加注释,通过鼠标选择想要标注的位置
    17.Dijkstra算法:求一个节点到其他所有节点的最短路径
    18.std(x) 算出x的标准偏差。 x可以是一行的matrix或者一个多行matrix矩阵
    如果只有一行,那么就是算一行的标准偏差,如果有多行,就是算每一列的标准偏差。
    std(x,a)也是x的标准偏差但是a可以=0或者1.如果是0和前面没有区别,如果是1就是最后除以n,而不是n-1. (你参考计算标准偏差的公式,一般都用除以n-1的公式。)
    std (x, a,b)这里a表示是要用n还是n-1,如果是a是0就是除以n-1,如果是1就是除以n。
    b这里是维数,比如说
    1 2 3 4  
    4 5 6 1
    如果b 是1,就是按照行分,如果b是2就是按照列分
    如果是三维的矩阵,b=3就按照第三维来分数据
    19.mesh(X,Y,C)
    功能 生成由X,Y和Z指定的网线面,由C指定的颜色的三维网格图。网格图是作为视点由view(3)设定的surface图形对象。曲面的颜色与背景颜色相同(当要动画显示不透明曲面时,这时可用命令hidden控制),或者当画一个标准的可透视的网线图时,曲面的颜色就没有(命令shading控制渲染模式)。当前的色图决定线的颜色。

    用法 mesh(X,Y,Z) 画出颜色由c指定的三维网格图,所以和曲面的高度相匹配,

    1.若X与Y均为向量,length(X)=n,length(Y)=m,而[m,n]=size(Z),空间中的点 (X(j),Y(I),Z(I,j)) 为所画曲面网线的交点,分别地,X对应于z的列,Y对应于z的行。

    2.若X与Y均为矩阵,则空间中的点 (X(I,j),Y(I,j),Z(I,j))为所画曲面的网线的交点。

    mesh(Z) 由[n,m] = size(Z)得,X =1:n与Y=1:m,其中z为定义在矩形划分区域上的单值函数。

    mesh(…,C) 用由矩阵c指定的颜色画网线网格图。Matlab对矩阵c中的数据进行线性处理,以便从当前色图中获得有用的颜色。

    mesh(…,PropertyName’,PropertyValue, …) 对指定的属性PropertyName设置属性值PropertyValue,可以在同一语句中对多个属性进行设置。

    h = mesh(…) 返回surface图形对象句柄。

    20.ZI=interp2(X,Y,Z,XI,YI,method),其中X和Y为由自变量组成的数组,X与Y尺寸相同,Z为2维函数数组。XI和YI为插值点的自变量数组,method为插值方法选项,提供了4种方法;‘nearest’、‘linear’、‘spline’、‘cubic’等。
    二维插值主要应用于图形图像处理和三维曲线拟合等领域。

    21.[X,Y]=meshgrid(xi,yi)的用法
    x=-3:1:3;y=-2:1:2;
      [X,Y]= meshgrid(x,y);
      这里meshigrid(x,y)的作用是产生一个以向量x为行,向量y为列的矩阵,而x是从-3开始到3,每间隔1记下一个数据,并把这些数据集成矩阵X;同理y则是从-2到2,每间隔1记下一个数据,并集成矩阵Y。即
    游客,如果您要查看本帖隐藏内容请回复

    例1
    1. >>[X,Y] = meshgrid(-3:.25:3);
    2. >>Z = peaks(X,Y);
    3. >>[XI,YI] = meshgrid(-3:.125:3);
    4. >>ZZ = interp2(X,Y,Z,XI,YI);
    5. >>surfl(X,Y,Z);hold on;
    6. >>surfl(XI,YI,ZZ+15)
    7. >>axis([-3 3 -3 3 -5 20]);shading flat《Simulink与信号处理》
    8. >>hold off
    复制代码
    例2
    1. >>years = 1950:10:1990;
    2. >>service = 10:10:30;
    3. >>wage = [150.697 199.592 187.625
    4. 179.323 195.072 250.287
    5. 203.212 179.092 322.767
    6. 226.505 153.706 426.730www.iLoveMatlab.cn
    7. 249.633 120.281 598.243];
    8. >>w = interp2(service,years,wage,15,1975)
    复制代码
    插值结果为:
    1. w =
    2. 190.6288

    23.cumsum(A,dim)的用法举例
    x2 =

         1     2     3
         4     5     6
         7     8     9

    cumsum(x2,1)%对列累加
    ans =

         1     2     3
         5     7     9
        12    15    18
    cumsum(x2,2)%对行累加

    ans =

         1     3     6
         4     9    15
         7    15    24
    cumsum(x2,3)%对三位矩阵的累加,A为二维矩阵,所以为自身

    ans =

         1     2     3
         4     5     6
         7     8     9

    24.polyfit(x,y,n)%多项式的拟合
    a=polyfit(xdata,ydata,n)

    其中n表示多项式的最高阶数,xdata ,ydata
    为将要拟合的数据,它是用数组的方式输入.输出参数a为拟合多项式 的系数

    多项式在x处的值y可用下面程序计算.  
    y=polyval(a,x)   

    25.zscore(A,0)等价于zscore(A):对数据A进行标准化出理:用A中的数据减去A中数据的均值
    然后除以标准差(n-1)类型的;
    zscore(A,1):同上,但是除以的是n类型的标准差

    26.size(A,1)%返回矩阵的行数;size(A,2)%返回矩阵的列数

    27.mean(A,1)%返回矩阵每一列的均值,
       mean(A,2)%返回矩阵A的每一行的均值

    28.min(A)%返回A的每一列的最小值

    29.matlab中的分段函数:f=(x>=20 & x<50).*(x-20)/40+(x>50 & x<80).*(80-x)/20;
       表示x>=20 & x<50时,f=(x-20)/40;x>50 & x<80时,f=(80-x)/20

    30.quad(fun,a,b,tol)%Simpsion求积分,适用于低精度和不光滑函数
    (其中fun函数为内联函数),tol为绝对误差
    quadl(fun,a,b,tol)%适用于高精度的光滑函数求积

    31.读取文本为字符串的函数:text = fileread('filename');

    32.fid='英文.txt';
    a=textread(fid,'%s');
    char(a(1)) %读取单独的字符串,a(a为一个完整的单词或一行完整的汉字)

    33.C = textscan(fid, 'format')

    C = textscan(fid, 'format', N)  

    C = textscan(fid, 'format', 'param', value)  

    C = textscan(fid, 'format', N, 'param', value)  

    C = textscan(str, ...)  

    [C, position] = textscan(...)
    输入参数
    fid:为fopen命令返回的文件标识符,这也是和textread的最大不同之处
                需要注意的一点是,fid类似一个指针,其指向的位置会随着textscan的操作而改变,参见例9
    format :是一个字符串变量,表示读取数据及数据转换的规则,具体见format.txt
    N   : 读取N次,一般为行数
    输出参数
    输出一个细胞数组C
    基本与textread语法相同
    ......................................
    34.Matlab笔记之九---- 数组运算对字符串ASCII码数组的操作
    upper(a)       % 使字符串中字母全部大写
    w=find(a >= 'a' & a<= 'z') % 找出串数组a中,小写字母的元素位置
    char(ascii_a)    % 把ASCII码转换为字符
    A='这是一个算例。' % 创建中文字符串,注意“单引号对”的输入
    A_s=size(A) % 串数组的大小
    A56=A([5 6]) % 取串的子数组
    ASCII_A=double(A) % 获取ASCII码
    与英文字符情况一样,每个中文字符也占一个元素位置。但应注意,中文的ASCII码大于256 。
    在直接创建多行串数组时,关键是要保证同一串数组的各行字符要相等
    转换函数产生数码字符串
    int2str把整数数组转换成串数组(非整数将被四舍五入后再转换)
    num2str把非整数数组转换成串数组(常用于图形中,数据点的标识)
    mat2str把数值数组转换成输入形态的串数组(常与eval指令配用)
    abs 把串翻译成ASCII码
    hex2dec   16-进制串转换为十进制整数
    base2dec   X-进制串转换为十进制整数
    hex2num   16-进制串转换为浮点数
    bin2dec   二进制串转换为十进制整数
    int2str   把整数转换为串
    char      把ASCII码及其他非数值类型数据转换成字符串
    mat2str   把数值矩阵转换为
    eval      可调用的格式
    dec2base 十进制整数转换为X进制串
    num2str   把数值转换为串
    dec2bin 十进制整数转换为二进制串
    setstr   把ASCII码翻译成串
    dec2hex 十进制整数转换为16进制串
    sprintf 以控制格式把数值转换为串
    double   把任何类型数据转换成双精度数值
    sscanf   在格式控制下把串转换为数
    fprintf 把格式化数据写到文件或屏幕
    str2num 把串转换为数值
    blank(n)   创建n个空格串
    lower(s)   使s里的英文字母全部小写
    char(s1,s2,…) 把串s1,s2等逐个写成行,形成多行数组 str2mat(s1,s2,…) 把串s1,s2等逐个写成行,形成多行数组,并删除全空行
    deblank(s)      删除串尾部的空格符
    strcat(s1,s2,…) 把串s1,s2等连接成长串
    eval_r(s)       把串s当作MATLAB指令运行
    strcmp(s1,s2) 若串s1,s2相等,则判”真”给出逻辑1 eval_r(s1,sc)   
    把串s1当作MATLAB指令运行。若s1运行发生错误,则运行sc
    strjust(s)    字符串的对齐方式:或右对齐,或左对齐,或对中 feval_r(f,x,y,…) 对输入的宗量x,y等计算函数f
    strmatch(s1,s2) 逐行搜索串s2,给出以s1开头的那些行的行号 findstr(s1,s2) 在较长串中,找出短串的起始字符的下标
    strncmp(s1,s2,n) 若串s1,s2的前n个字符相同,则判”真”给出逻辑1
    Ischar(s)        s是字符串,则判”真”给出逻辑1
    strrep(s1,s2,s3) 串s1中的所有出现s2的地方替换为s3 isletter(s)      以逻辑1指示s里文字符的位置
    strtok(s)     找出第一个间隔符(空格、制表位、回车符)前的内容
    isspace(s)     以逻辑1指示s里空格符的位置
    strvcat(s1,s2,…)   把串s1,s2等逐个写成行,形成多行数组
    Laster     MATLAB发出的最新错误信息
    upper(s)   使s里的英文字母全部大写
    利用cell指令创建细胞数组
    C=cell(2)    % 预设(2×2)空细胞数组
    C(:,1)={char('Another','text string');10:-1:1} % 对第一列细胞赋值
    用图形形象化地表示细胞数组的内容
    cellplot(A_C,’legend’)中的第二个输入宗量是用于显示色彩图例的。该指令用大白方格表示细胞,用小方格表示所存数组的元素,色彩表示数据属性。
    构造函数创建构架数组
    利用struct函数也可以方便地建立架构数组,其调用格式为 架构数组名=struc(‘域名1’,‘值1’,‘域名2’,‘值2’,…)
    a1={'六号房'};a2={'3200立方米'};
    green_house_4(2,3)=struct('name',a1,'volumn',a2,'parameter',[]); % <6>
    T6={31.2,30.4,31.6,28.7;29.7,31.1,30.9,29.6}; % <7>
    green_house_4(2,3).parameter.temperature=T6; % <8> green_house_4

    35.[a,b]=strtok(s,ch)%在s中查找字符ch,找到后将ch之前的字符提取到a中

    36.如何得到带有单引号的字符串:====正确的解决方式是:
    >> str = '''string'''
    str =
    'string'
    输入三个单引号就可以实现了

    37.s(find(isspace(s)))=[]%删除s中的空格

    38.fix(x)%截尾取整:fix(3.12)=3;
    floor(x)%向下取整,即不超过x的最大整数:floor(3.15)=3
    ceil(x)%向上取整,即大于x的最小整数:ceil(3.13)=4;
    matlab中的rem()和mod()函数
    rem(x,y):求整除x/y的余数
    mod(x,y):求模



    39.图像处理
    MATLAB中图像处理的一些简单函数

    A、 imread
    imread函数用于读入各种图像文件,其一般的用法为
    [X,MAP]=imread(‘filename’,‘fmt’)
    其中,X,MAP分别为读出的图像数据和颜色表数据,fmt为图像的格式,filename为读取的图像文件(可以加上文件的路径)。
    例:[X,MAP]=imread(’flowers.tif’,’tif’);
    比较读取二值图像,灰度图像,索引图像,彩色图像的X和MAP的特点,可以利用size函数用来显示数组的维数,了解数据的特点。
    B=size(a) 返回数组a 的维数。

    B、 imwrite
    imwrite函数用于输出图像,其语法格式为:
    imwrite(X,map,filename,fmt)
    imwrite(X,map,filename,fmt)按照fmt指定的格式将图像数据矩阵X和调色板map写入文件filename。

    C、 imfinfo
    imfinfo函数用于读取图像文件的有关信息,其语法格式为
    imfinfo(filename,fmt)
    imfinfo函数返回一个结构info,它反映了该图像的各方面信息,其主要数据包括:文件名(路径)、文件格式、文件格式版本号、文件的修改时间、文件的大小、文件的长度、文件的宽度、每个像素的位数、图像的类型等。

    2.MATLAB中图像文件的显示
    imshow
    imshow函数是最常用的显示各种图像的函数,其语法如下:
    imshow(X,map)
    其中X是图像数据矩阵,map是其对应的颜色矩阵,若进行图像处理后不知道图像数据的值域可以用[]代替map。
    (1) 二进制(二值)图像显示方法,在MATLAB中一幅二值图像是uint8或双精度的,该矩阵仅包含0和1。如果希望工具箱中的函数能将图像理解为二进制的,那么所有数据都要是逻辑数据,必须对其进行设置(将所有数据标志均设置on).可以对数据利用“~”取反操作实现图像逆转即黑白反色。
    (2) 灰度图像的显示方法,正常情况下无需指定灰度图像的调色板格式。可以是使用imshow函数指定要显示灰度级数目,格式 imshow(I,n),n为指定的灰度级数目。用户也可以指定数据的范围,格式imshow(I,[low high])其中low 和high参数分别为数据数组的最小值和最大值。如果为空矩阵([]),那么imshow函数将自动进行数据标度。
    (3) 索引图像,imshow(x,map)对于x的每个个像素,imshow显示存储map中相应行的颜色。
    (4)  RGB图像的显示,它直接对颜色进行描述而不使用调色板,格式imshow(RGB)。 RGB(:,:,1) RGB(:,:,2)   RGB(:,:,3)
    (5) 特殊显示,如多幅图像的显示,需要显示多幅图像时。可以使用figure语句,它的功能就是重新打开一个图像显示窗口。例:
    I=imread(‘rice.tif’);
    Imshow(I);
    J=imread(‘flowers.tif’);
    figure,imshow(J);


    也可以将多幅图像显示在同一个单独的图像窗口中,有两种方法:一种是联合imshow和subplot函数;另一种是联合使用subimage函数和subplot函数,subplot(m,n,p)这种格式将图形窗口划分为m*n个矩形显示区域并激活第p个显示区域。
    A
    [x1,map1]=imread('trees.tif');
    [x2,map2]=imread('forest.tif');
    subplot(1,2,1),imshow(x1,map1)
    subplot(1,2,2),imshow(x2,map2)
    B
    [x1,map1]=imread('trees.tif');
    [x2,map2]=imread('forest.tif');
    subplot(1,2,1),subimage(x1,map1)
    subplot(1,2,2),subimage(x2,map2)
    3.MATLAB中灰度直方图的显示

    MATLAB图像处理工具箱提供了imhist函数来计算和显示图像的直方图,imhist函数的语法格式为:
    imhist(I,n)
    imhist(X,map)
    其中imhist(I,n)计算和显示灰度图像I的直方图,n为指定的灰度级数目,默认值为256。imhist(X,map)计算和显示索引色图像X的直方图,map为调色板。
    例:
    I = imread('rice.tif');
    imshow(I)
    figure, imhist(I)
    4.对比度增强
    如果原图像f(x,y)的灰度范围是[m,M],我们希望调整后的图像g(x,y)的灰度范围是[n,N],那么下述变换, ,就可以实现这一要求。
    MATLAB图像处理工具箱中提供的imadjust函数,可以实现上述的线性变换对比度增强。Imadjust函数的语法格式为:
    J = imadjust(I,[low_in high_in],[low_out high_out])
    J = imadjust(I,[low_in high_in],[low_out high_out])返回图像I经过直方图调整后的图像J,[low_in high_in]为原图像中要变换的灰度范围,[low_out high_out]指定了变换后的灰度范围。其详细的用法可参见《计算机图像处理与识别技术》。
    例:
    I = imread('pout.tif');
    J = imadjust(I,[0.3 0.7],[]);
    imshow(I), figure, imshow(J)

    5.图像类型转换:
    图像类型之间的转换有时非常有用。MATLAB提供的图像类型转换函数
    函数
    功能
    dither
    使用抖动方法,根据灰度图像船舰二进制图像和根据RGB图像创建索引图像
     gray2ind
    根据一幅灰度图像创建索引图像
     grayslice
    使用阈值截取方法,根据一幅灰度图像创建索引图像
     im2bw
    使用阈值截取方法,根据一幅灰度图像,索引图像或RGB图像创建二进制图像
     ind2gray
    根据一幅索引图像创建一幅灰度图像
     ind2rgb
    根据一幅索引图像创建一幅RGB图像
     mat2gray
    通过数据缩放,在根据矩阵数据创建一幅灰度图像
     rgb2gray
    根据一幅RGB图像创建一幅灰度图像
     rgb2ind
    根据一幅RGB图像创建一幅索引图像

    上表中函数有类似的调用格式:函数的输入参数是图像数据矩阵(如果是索引图像,那么输入参数还包括调色板),返回值是转换后的函数(包括索引函数的调色板),只有函数im2bw的调用格式不同,其输入参数中还包括一个截取阈值,超过此阈值的像素被截取为1否则为0。示例:
    A、load trees
    BW = im2bw(X,map,0.4);
    imview(X,map),imview(BW)
    B、
    I = imread('snowflakes.png');
    X = grayslice(I,16);
    imview(I)
    imview(X,jet(16))
    6.MATLAB还提供了图像存储类型之间的转换函数
    这些函数包含im2doble、im2uint8和 im2uint16,这些函数可以自动的进行原始数据的重新标度和偏移.调用格式简单,输入为图像矩阵,输出为转换后的图像:如:以下命令将一个描述双精度RGB1图像的矩阵(数据范围为[0,1]转换为uint8的图像矩阵([0,255]范围内)RGB2=im2uint8(rgb1);也可以使用MATLAB函数对图像存储类型进行转换。例如,double函数可以将uint8或 uint16的数据转化为双精度数据。存储类型之间的转变将改变matlab及其工具箱理解图像数据的方式,如果用户希望转换后得到的数组能够被正确的理解为图像数据,那么转换时需要重新标度或偏移数据。当使用较少的类型来描述数字图像时,通常可能丢失用户图像的一些信息。
    7.图像格式之间的转换
    可以间接利用图像读写函数来完成;首先使用imread函数按照原有的图像格式进行图像读取,然后调用imwrite函数对图像进行保存,并指定图像的保存格式。如将BMP格式转换为PNG格式,
      bitmap=imread(‘mybitmap,bmp’,’bmp’)
      imwrite(‘mybitmap,png’,’png’)

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

    2802

    主题

    160

    听众

    8882

    积分

  • TA的每日心情
    开心
    2017-4-26 10:25
  • 签到天数: 491 天

    [LV.9]以坛为家II

    自我介绍
    即使不开心也不要皱眉,因为你永远不知道有谁会爱上你的微笑!

    社区QQ达人 发帖功臣 新人进步奖 最具活力勋章

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

    群组2017美赛两天强训

    群组2015司守奎matlab培训

    群组2016国赛优秀论文解析

    群组国赛护航思路养成班

    回复

    使用道具 举报

    2

    主题

    16

    听众

    1039

    积分

    升级  3.9%

  • TA的每日心情
    开心
    2016-11-7 18:00
  • 签到天数: 47 天

    [LV.5]常住居民I

    社区QQ达人

    群组2016美赛冲刺培训

    群组数学建模

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

    群组国赛讨论

    群组2013年国赛B题讨论组

    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2025-5-22 16:55 , Processed in 1.096523 second(s), 62 queries .

    回顶部