注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

姜允志博客

Matlab VC++ 流形学习 进化算法 图像分割 目标提取 张量分解

 
 
 

日志

 
 

Matlab手册5  

2012-01-12 14:24:53|  分类: Matlab |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 
Matlab生成随机数

第一种方法是用 random 语句,其一般形式为
                     y = random('分布的英文名',A1,A2,A3,m,n),
表示生成 m 行 n 列的 m × n 个参数为 ( A1 , A2 , A3 ) 的该分布的随机数。例如:
(1) R = random('Normal',0,1,2,4): 生成期望为 0,标准差为 1 的(2 行 4 列)2× 4 个正态随机数
(2) R = random('Poisson',1:6,1,6):  依次生成参数为 1 到 6 的(1 行 6 列)6 个 Poisson 随机数


第二种方法是针对特殊的分布的语句:
一. 几何分布随机数  (下面的 P,m 都可以是矩阵)
   R = geornd(P)   (生成参数为 P 的几何随机数)
   R = geornd(P,m)  (生成参数为 P 的 × m 个几何随机数)
                                     1
   R = geornd(P,m,n)  (生成参数为 P 的 m 行 n 列的 m × n 个几何随机数)
    例如
(1)  R = geornd(1./ 2.^(1:6)) ( 生成参数依次为 1/2,1/2^2,到 1/2^6 的 6 个几何随机数)
(2)  R = geornd(0.01,[1 5]) (生成参数为 0.01 的(1行5列)5 个几何随机数).


二.Beta 分布随机数
R = betarnd(A,B)  (生成参数为 A,B 的 Beta 随机数)
R = betarnd(A,B,m)  (生成 × m 个数为 A,B 的 Beta 随机数)
                           1
R = betarnd(A,B,m,n)  (生成 m 行 n 列的 m × n 个数为 A,B 的 Beta 随机数).


三.正态随机数
R = normrnd(MU,SIGMA)  (生成均值为 MU,标准差为 SIGMA 的正态随机数)
R = normrnd(MU,SIGMA,m)  (生成 1× m 个正态随机数)
                                      
R = normrnd(MU,SIGMA,m,n) (生成 m 行 n 列的 m × n 个正态随机数)
   例如
(1) R = normrnd(0,1,[1 5])   生成 5 个正态(0,1) 随机数
                                 
(2) R = normrnd([1 2 3;4 5 6],0.1,2,3)  生成期望依次为[1,2,3;4,5,6], 方差为 0.1 的 2× 3 个正态随机数.


四.二项随机数:类似地有
R = binornd(N,P)  R = binornd(N,P,m)   R = binornd(N,p,m,n)
   例如
   n = 10:10:60;   r1 = binornd(n,1./n)  或 r2 = binornd(n,1./n,[1 6]) (都生成参数分别为
   1          1   ), L, ( 60, ) 的6个二项随机数.
(10,
    10          60


五.自由度为 V 的 χ 2 随机数:
R = chi2rnd(V)    R = chi2rnd(V    R = chi2rnd(V
                                     ,m)             ,m,n)

  随机数):
                                       1
                                       MU
R = exprnd(MU)   R = exprnd(MU,m)  R = exprnd(MU,m,n)


七.自由度为 V1, V2 的 F 分布随机数:
   R = frnd(V1,V2)   R = frnd(V1, V2,m)  R = frnd(V1,V2,m,n)


八. Γ ( A, λ ) 随机数:
   R = gamrnd(A,lambda)  R = gamrnd(A,lambda,m)  R = gamrnd(A,lambda,m,n)

九.超几何分布随机数:
   R = hygernd(N,K,M)   R = hygernd(N,K,M,m)  R = hygernd(N,K,M,m,n)


十.对数正态分布随机数
   R = lognrnd(MU,SIGMA)  R = lognrnd(MU,SIGMA,m)  R = lognrnd(MU,SIGMA,m,n)


十一.负二项随机数:
   R = nbinrnd(r,p)   R = nbinrnd(r,p,m)   R = nbinrnd(r,p,m,n)


十二.Poisson 随机数:
   R = poissrnd(lambda)   R = poissrnd(lambda,m)  R = poissrnd(lambda,m,n)
    例如,以下 3 种表达有相同的含义:lambda = 2;  R = poissrnd(lambda,1,10)
(或 R = poissrnd(lambda,[1 10])  或 R = poissrnd(lambda(ones(1,10)))


十三.Rayleigh 随机数:
   R = raylrnd(B)    R = raylrnd(B,m)   R = raylrnd(B,m,n)


十四.V 个自由度的 t 分布的随机数:
   R = trnd(V)    R = trnd(V,m)   R = trnd(V,m,n)


                                              42
十五.离散的均匀随机数:
R = unidrnd(N)   R = unidrnd(N,m)  R = unidrnd(N,m,n)


十六.[A,B] 上均匀随机数
R = unifrnd(A,B)   R = unifrnd(A,B,m)  R = unifrnd(A,B,m,n)
例如 unifrnd(0,1:6)与 unifrnd(0,1:6,[1 6]) 都依次生成[0,1] 到[0,6]的6个均匀随机数.:


十七.Weibull 随机数
R = weibrnd(A,B)   R = weibrnd(A,B,m)  R = weibrnd(A,B,m,n)

matlab中产生两个整数间的随机数

若是两个数(L, H)之间均匀分布的随机数,可用:
X=random('unif',L, H,n,m),X是 n 行 m 列的矩阵。

Sort排序后返回原来的索引index

A=[1 3 2 8 5]

>> [B,IND]=sort(A)

B =

     1     2     3     5     8

IND =

     1     3     2     5     4

>> [B,IND]=sort(A,'descend')

B =

     8     5     3     2     1

IND =

     4     5     2     3     1

[B,index]=sort(A) 计算后, B是A排序后的向量,A保持不变,index是B中每一项对应于A中项的索引。

Sort(A,’descend’)是降序

 

很多情况下,命令的序列必须根据关系的检验有条件地执行。在编程语言里,这种逻辑由某种If-Else-End结构来提供。最简单的If-Else-End结构是:

                          if  expression

                               {commands}

                          end

    如果在表达式中的所有元素为真(非零),那么就执行if和end语言之间的{commands}。在表达式包含有几个逻辑子表达式时,即使前一个子表达式决定了表达式的最后逻辑状态,仍要计算所有的子表达式。例如,

          ? apples=10;         %  number of apples

          ? cost=apples*25     %  cost of apples

          cost =

             250

          ? if apples>5         %  give 20% discount for larger purchases

              cost=(1-20/100)*cost;

           end

          ? cost

          cost =

             200

    假如有两个选择,If-Else-End结构是:

            if  expression

                commands evaluated if True

            else

                commands evaluated if False

            end

在这里,如果表达式为真,则执行第一组命令;如果表达式是假,则执行第二组命令。

    当有三个或更多的选择时,If-Else-End结构采用形式

         if expression1

            commands evaluated if expression1 is True

         elseif expression2

            commands evaluated if expression2 is True

         elseif expression3

            commands evaluated if expression3 is True

         elseif expression4

            commands evaluated if expression4 is True

         elseif ……

            .

            .

            .

         else

            commands evaluated if no other expression  is True

         end

    最后的这种形式,只和所碰到的、与第一个真值表达式相关的命令被执行;接下来的关系表达式不检验,跳过其余的If-Else-End结构。而且,最后的else命令可有可无。

    现在我们知道了如何用If-Else-End结构来决策,就有可能提出一种合理的方法来跳出或中断For循环和While循环。

                             ? EPS=1;

                             ? for num=1:1000

                                EPS=EPS/2;

                                if (1+EPS)<=1

                                 EPS=EPS*2

                                  break

                                 end

                               end

                             EPS =

                               2.2204e-016

                             ? num

                             num =

                                 53

    这个例子演示了估算EPS的另一种方法。在这种情况下,For循环构造成要执行足够多的次数。If-Else-End结构检验要看EPS是否变得足够小。如果是,EPS乘2,break命令强迫For循环提早结束,num=53。

    在这个例子里,当执行break 语句时,MATLAB跳到循环外下一个语句。在现在情况下,它返回到MATLAB的提示符并显示EPS。如果一个break语句出现在一个嵌套的For循环或While循环结构里,那么MATLAB只跳出break所在的那个循环,不跳出整个嵌套结构。

  小结

    MATLAB控制流功能可以概括如下:

控   制   流   结   构

 

for x = array

    commands

end

For循环,每一次迭代将x赋以数组的

第i列,执行命令

 

while expression

     commands

end

While循环,只要表达式的所有元素

为真或非零,执行命令。

 

if expression

    commands

end

简单的If-Else-End结构,若在表达式

中的所有元素是真值或非零,执行

命令。

 

if expression

    commands evaluated if True

else expression

    commands evaluated if False

end

具有两条路径的If-Else-End结构,

若表达式为真或非零,则执行一组

命令。若表达式为假或零,

则执行另一组命令。

 

if expression1

   commands evaluated if expression1 is True

elseif expression2

   commands evaluated if expression2 is True

if expression3

   commands evaluated if expression3 is True

elseif ……

·

·

·

else

       commands evaluated if no other

       expression is True

end

最一般的If-Else-End结构。

只执行与第一个真值表达式相关

的命令。

 

 

break

 

 

 

 

 


MATLAB  彩色图像转化为灰度图像

 

clear all

I=imread('testImages\24901.jpg'); %读取RGB格式的图像

MyGray =rgb2gray(I);   %用已有的函数进行RGB到灰度图像的转换

figure, imshow(I), figure, imshow(MyGray);

imwrite(MyGray,'testImages\24902.jpg');

 

 

 

RGB2GRAY Convert RGB image or colormap to grayscale.

    RGB2GRAY converts RGB images to grayscale by eliminating the

    hue and saturation information while retaining the

    luminance.

 

    I = RGB2GRAY(RGB) converts the truecolor image RGB to the

    grayscale intensity image I.

 

    NEWMAP = RGB2GRAY(MAP) returns a grayscale colormap

    equivalent to MAP.

 

    Class Support

    ------------- 

    If the input is an RGB image, it can be uint8, uint16, double, or single. The output image I has the same class as the input image. If the input is a colormap, the input and output colormaps are both of class double.

 

    Example

    -------

    I = imread('board.tif');

    J = rgb2gray(I);

    figure, imshow(I), figure, imshow(J);

 

    [X,map] = imread('trees.tif');

    gmap = rgb2gray(map);

    figure, imshow(X,map), figure, imshow(X,gmap);

 

See also ind2gray, ntsc2rgb, rgb2ind, rgb2ntsc.

 

MATLAB图像类型转换
图像类型转换函数
---------------------------------------------------------------------------
函数名 函数功能
---------------------------------------------------------------------------
dither 图像抖动,将灰度图变成二值图,或将真彩色图像抖动成索引色图像
gray2ind 将灰度图像转换成索引图像
grayslice 通过设定阈值将灰度图像转换成索引色图像
im2bw 通过设定亮度阈值将真彩色、索引色、灰度图转换成二值图
ind2gray 将索引色图像转换成灰度图像
ind2rgb 将索引色图像转换成真彩色图像
mat2gray 将一个数据矩阵转换成一副灰度图
rgb2gray 将一副真彩色图像转换成灰度图像
rgb2ind 将真彩色图像转换成索引色图像
----------------------------------------------------------------------------

matlab 全局变量命令global定义
文章来源:不详 作者:佚名
本文来自: 高校自动化网

在MATLAB中,全局变量用命令global定义。函数文件内部的变量事实局部变量,它们与其他函数文件及MATLAB工作空间相互隔离。但是,如果在若干函数中都把某一变量定义为全局变量,那么这些函数将公用这一个变量。全局变量的作用域是整个MATLAB工作空间,即全程有效。所有的函数都可以对它进行存取和修改。因此,定义全局变量是函数见传递信息的一种手段。
    需要指出,在程序设计中,全局变量固然可以带来某些方便,但却破坏了函数对变量的封装,降低了程序的可读性。因而,在结构化程序设计中,全局变量是不受欢迎的。尤其当程序较大,子程序较多时,全局变量将给程序调试和维护带来不便,故不提倡使用全局变量。如果一定要用全局变量,最好给它起一个能反应变量具本含义的名字,并且一般用大写字母表示,以免和其他变量混淆。
[例3.16]全局变量应用示例。
先建立函数文件wadd.m,该函数将输入的参数加权相加:
       function  f  =wadd(x,y)
                ?d  two variable with different  weight.
                global  ALPHA BETA
                f  =  ALPHA *x+BETA *y;
在命令窗口中输入:
       global  ALPHA BETA
               ALPHA=1;
               BETA=2;
               s=wadd(1,2)
输入为:
       s=
                       5
         由于在函数wadd和基本工作空间中都把ALPHA和BETA两个变量定义为全局变量,所以只要在命令窗口中改变ALPHA和BETA的值,就可改变加权值,而无需修改wadd.m文件。
    上例只在函数wadd和命令窗口中把ALPHA和BETA变量定义为全局变量,在实际编程时,可在所有需要调用全局变量的函数里定义全局变量,这样就可实现数据共享。为了在基本工作空间中使用全局变量,也要定义全局变量。
    在函数文件里,全局变量的定义语句应放在变量使用以前,为了便于了解所有的全局变量,一般把全局变量的定义语句放在文件的前部。

注意:全局变量在使用时都需要用global来定义。也就是,在所有需要用到此全局变量的函数中都要先用global来定义了,然后再使用。

http://www.zdh1909.com/html/matlab/17668.html

  评论这张
 
阅读(270)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017