matlab编程

1.For 循环

    For循环允许一条语句或一组语句被重复执行预先指定的次数。For循环的一般形式是:

              for x =array

                  语句

              end

在for和end语句之间的语句按数组中的每一列执行一次。在每一次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:, n)。例如,

    for n=1:10

       x(n)=sin(n*pi/10);

    end

       x

    x =

    0.3090    0.5878    0.8090    0.9511    1.0000    0.9511    0.8090    0.5878    0.3090    0.0000

    换句话,第一语句是说:对n等于1到10,执行所有语句,直至下一个end语句。第一次通过For循环n=1,第二次,n=2,如此继续,直至n=10。在n=10以后,For循环结束,然后执行end语句后面的任何命令.注意,该循环结束后,n=10.

   For循环的其它重要方面是

    (1)For循环不能用For循环内重新赋值循环变量n来终止。

    For n=1:10

       x(n)=sin(n*pi/10);

       n=9;

    end

    x

    x =

    0.3090    0.5878    0.8090    0.9511    1.0000   0.9511  0.8090    0.5878    0.3090    0.0000

        n

        n=

           9

执行过程是这样的:

n=1,

x(1)=sin(pi/10),

n=9,

n=2,

x(2)=sin(2*pi/10),

n=9,

n=3,

...,

n=10,

x(10)=sin(10*pi/10),

n=9.

循环结束后,n=9.

   (2)在For循环内接受任何有效的MATLAB数组。

           data=[3 9 45 6; 7 16 -1 5]

           data =

           3    9   45    6

           7   16   -1    5

           for n=data

           x=n(1)-n(2)

           end

           x =

           -4

           x =

           -7

           x =

           46

           x =

           1

   (3)For循环可按需要嵌套。

           For n=1:5

            for m=1:5

             A(n,m)=n^2+m^2;

            end

            disp(n)

           end

           1

           2

           3

           4

           5

           A

           A =

           2    5   10   17   26

           5    8   13   20   29

           10   13   18   25   34

           17   20   25   32   41

           26   29   34   41   50

    (4)当有一个等效的数组方法来解给定的问题时,应避免用For循环。例如,上面的第一个例子可被重写为

    n=1:10;

    x=sin(n*pi/10)

    x =

    0.3090    0.5878    0.8090    0.9511    1.0000    0.9511    0.8090    0.5878    0.3090    0.0000

两种方法得出同样的结果,而后者执行更快,更直观,要求较少的输入。

    (5)为了得到最大的速度,在For循环(While循环)被执行之前,应预先分配数组。例如,前面所考虑的第一种情况,在For循环内每执行一次命令,变量x的大小增加1。迫使MATLAB每通过一次循环要花费时间对x分配更多的内存。为了消去这个步骤,For循环的例子应重写为

           x=zeros(1,10);

           for n=1:10

           x(n)=sin(n*pi/10);

           end

现在,只有x(n)的值需要改变。

    例1 相传古代印度国王要褒奖他的聪明能干的宰相达依尔(国际象棋发明者),问他要什么?达依尔回答:“陛下只要在国际象棋棋盘的第一个格子上放一粒麦子,第二个格子上放二粒麦子,以后每个格子的麦子数都按前一格的两倍计算。如果陛下按此法给我64格的麦子,就感激不尽,其他什么也不要了。”国王想:“这还不容易!”让人扛了一袋麦子,但很快用光了,再扛出一袋还不够,请你为国王算一下共要给达依尔多少小麦?(1 小麦约 颗)

    解: 麦粒总数为

       

    程序如下:

a=1;

s=0

for i=1:64

    s=s+a;

    a=2*a;

end

s=s/1.4/10^8

运行后得:

s=

   1.3176e+011

    例2 公元前五世纪我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?

           解 设 x:鸡翁数,则x的范围:0~19

           y:鸡母数,则y的范围:0~33

           z:鸡雏数,则z的范围:0~100

则:

     x+y+z=100

     5x+3y+z/3=100

这是一个不定方程。

for x=0:19

    for y=0:33

        for z=0:100

            if (x+y+z==100)&(5*x+3*y+z/3==100)

                d=[x,y,z]

            end

        end

    end

end

运行后得结果:

d =

     0    25    75

d =

     4    18    78

d =

     8    11    81

d =

    12     4    84

 

2.While 循环

    与For循环以固定次数求一组命令的值相反,While 循环以不定的次数重复执行一组语句。While循环的一般形式是:

    while 表达式1

       语句1

    end

只要表达式1里的所有元素为真,就执行while和end之间的语句1,否则,就结束循环。通常,表达式的值给出一个标量值,但数组值也同样有效。在数组情况下,当数组的所有元素为真(值不等零)时,就执行语句1,数组中有一个元素为假(值为零),就结束循环。

           例3按下面的公式计算:

          

使误差小于给定的 .

   解: 把 作为误差,程序如下:

error=input('请输入误差:');

x=1;

y=0;

n=1;

while x>error

    y=y+1;

    x=x/n;

    n=n+1;

end

e=y

运行如下:

请输入误差:0.001

e =

    2.7181

3.IF-ELSE-END 结构

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

    if 表达式1

    语句1

    end

    如果在表达式1中的所有元素为真(非零),那么就执行if和end语言之间的语句1。

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

    if 表达式1

        语句1

     else

        语句2

     end

在这里,如果表达式1为真,则执行语句1;如果表达式是假,则执行语句2。

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

     if 表达式1

        语句1

     elseif 表达式2

        语句2

     elseif 表达式3

        语句3

     elseif 表达式4

        语句4

     elseif ……

           

           

           

     else

         语句

     end

    如果表达式1为真,则执行语句1,结束循环;如果表达式1为假,则检验表达式2,如果表达式2为真,则执行语句2,结束循环;如果表达式2为假,则检验表达式3,如此下去,如果所有表达式都为假时,则执行最后的语句。即只执行第一个真值表达式相关的语句;接下来的表达式不检验,跳过其余的If-Else-End结构。而且,最后的else命令可有可无。

4.switch-case-end结构

    如果在一个程序中,必须针对某个变量不同取值情况进行相应操作,switch语句比if else语句更方便。switch语句的一般形式为:

    switch 分支条件(数值或字符串)

    case 数值(或字符串)条件1

          语句1

    case 数值(或字符串)条件2

          语句2

    case 数值(或字符串)条件3

          语句3

    case ...

          ...

    otherwise

          语句

    end

其中分支条件可以是一个函数、变量或者表达式.如果条件1与分支条件匹配就执行语句1,退出循环;否则,检验条件2,如果条件2与分支条件匹配执行语句2,退出循环;否则,检验条件3,...,当所有条件都不与分支条件匹配时就执行最后的语句。注意otherwise是可以省略的。

    例4 在图形界面上放置一个弹出式菜,点击弹出式菜单可以设置曲线颜色。

    解:程序如下:

x=linspace(-6,6,50);

y=sin(x);

h=plot(x,y,'linewidth',4);

h0=uicontrol('position',[600,500,100,30],...

    'style','popupmenu',...

    'string','红色|蓝色|黄色|黑色|青色',...

    'callback',...

    ['v=get(h0,''value'');',...

        'switch v;',...

        'case 1;',...

        'set(h,''color'',''r'');',...

        'case 2;',...

        'set(h,''color'',''b'');',...

        'case 3;',...

        'set(h,''color'',''y'');',...

        'case 4;',...

        'set(h,''color'',''k'');',...

        'case 5;',...

        'set(h,''color'',''c'');',...

        'end;']);


3.变量及其命名规则

        变量

1.        MATLAB对变量名的大小写是敏感的。

2.        变量的第一个字符必须为英文字母,而且不能超过31个字符。

3.        变量名可以包含下划线、数字,但不能为空格符、标点。

预定义的变量

ans

预设的计算结果的变量名

eps

MATLAB定义的正的极小值=2.2204e-16

pi

内建的π值

inf

值,无限大 ( 1/0)

NaN

无法定义一个数目 ( 0/0 )

i 或 j

虚数单位i=j=(-1)^(1/2)

而键入clear则是清除所有定义过的变量名称。

4.MATLAB赋值语句

        表达式

MATLAB书写表达式的规则与“手写算式”差不多相同。

如果一个指令过长可以在结尾加上...(代表此行指 令与下一行连续),例如

?3*...

6

ans =

18

比如将23赋值给变量a

a=23

 

5.MATLAB常用数学函数

三角函数和双曲函数

名称

含义

名称

含义

名称

含义

sin

正弦

csc

余割

atanh

反双曲正切

cos

余弦

asec

反正割

acoth

反双曲余切

tan

正切

acsc

反余割

sech

双曲正割

cot

余切

sinh

双曲正弦

csch

双曲余割

asin

反正弦

cosh

双曲余弦

asech

反双曲正割

acos

反余弦

tanh

双曲正切

acsch

反双曲余割

atan

反正切

coth

双曲余切

 

 

acot

反余切

asinh

反双曲正弦

 

 

sec

正割

acosh

反双曲余弦

 

 

 

 

 

 

 

 

 

 

 

 

 


矩阵变换函数

名称

含义

名称

含义

fiplr

矩阵左右翻转

diag

产生或提取对角阵

fipud

矩阵上下翻转

tril

产生下三角

fipdim

矩阵特定维翻转

triu

产生上三角

Rot90

矩阵反时针90翻转

 

 

其他函数

名称

含义

名称

含义

min

最小值

max

最大值

mean

平均值

median

中位数

std

标准差

diff

相邻元素的差

sort

排序

length

个数

norm

欧氏(Euclidean)长度

sum

总和

prod

总乘积

dot

内积

cumsum

累计元素总和

cumprod

累计元素总乘积

cross

外积

 

 

可查阅在线帮助helpwinmatlab"elfunhelp elfun

6.MATLAB系统命令

命   令

含    义

help

在线帮助

helpwin

在线帮助窗口

helpdesk

在线帮助工作台

demo

运行演示程序

ver

版本信息

readme

显示Readme文件

who

显示当前变量

whos

显示当前变量的详细信息

clear

清空工作间的变量和函数

pack

整理工作间的内存

load

把文件调入变量到工作间

save

把变量存入文件中

quit/exit

退出MATLAB

what

显示指定的matlab文件

lookfor

在HELP里搜索关键字

which

定位函数或文件

path

获取或设置搜索路径

echo

命令回显

cd

改变当前的工作目录

pwd

显示当前的工作目录

dir

显示目录内容

unix

执行unix命令

dos

执行dos命令

!

执行操作系统命令

computer

显示计算机类型

可查阅在线帮助helpwinmatlab"generalhelp general

 

 

7.MATLAB语言中的关系与逻辑运算

在执行关系及逻辑运算时,MATLAB 将输入的不为零的数值都视为真 (True)而为零的数值则视为假 (False)。 运算的输出值将判断为真者以 1 表示而判断为假者以 0 表示。各个运算符须用在二个大小相同的阵列或是矩阵中的比较。

       关系运算

指令

含义

<

小于

<=

小于等于

>

大于

>=

大于等于

==

等于

~=

不等于

?a=1:2:11;

?b=2:1:7;

?a>b

ans =

0     0     1     1     1     1

?a==b

ans =

 0     1     0     0     0     0

?a>=b

ans =

     0     1     1     1     1     1

?a-(b>4)

ans =

     1     3     5     6     8    10

逻辑运算

指令

含义

&

逻辑 and

|

逻辑 or

~

逻辑 not

(a<2)|(b>6)

ans =

1     0     0     0     0     1

c=a+(a>3)|(b<6)

c =

 1     1     1     1     1     1

逻辑关系函数

指令

含义

xor

不相同就取1,否则取0

any

只要有非0就取1,否则取0

all

全为1取1,否则为0

isnan

为数NaN取1,否则为0

isinf

为数inf取1,否则为0

isfinite

有限大小元素取1,否则为0

ischar

是字符串取1,否则为0

isequal

相等取1,否则取0

ismember

两个矩阵是属于关系取1,否则取0

isempty

矩阵为空取1,否则取0

isletter

是字母取1,否则取0(可以是字符串)

isstudent

学生版取1

isprime

质数取1,否则取0

isreal

实数取1,否则取0

isspace

空格位置取1,否则取0

isequal(a,b)

ans =

0

 isreal(a)

ans =

1

isstudent

 

ans =

 

     0

 

8.矩阵及运算

1.  数组

   MATLAB的运算事实上是以数组 (array) 及矩阵 (matrix) 方式在做运算。

建立一个数组时,如果是要个别键入元素,须用中括号[ ]将元素置于其中。数组为一维元素所构成,而矩阵为多维元素所组成,例如

» x=[1 2 3 4 5 6 7 8] ;%一维 1x8 阵列

» x = [1 2 3 4 5 6 7 8; 4 5 6 7 8 9 10 11] ; %二维 2x8 矩阵,以;区隔各列的元素

» x = [1 2 3 4 5 6 7 8 % 二维 2x8 矩阵,各列的元素分二行键入

4 5 6 7 8 9 10 11] ;

» x(3)% x的第三个元素

ans =

     2

» x([1 2 5])% x的第一、二、五个元素

ans =

     1     4     3

x(1:5)% x的第前五个元素

ans =

     1     4     2     5     3

» x(10:end)% x的第十个元素后的元素

ans =

     8     6     9     7    10     8    11

» x(10:-1:2)% x的第十个元素和第二个元素的倒排

ans =

     8     5     7     4     6     3     5     2     4

» x(find(x>5))% x中大于5的元素

ans =

     6

     7

     8

     6

     9

    7

    10

     8

    11

» x(4)=100%给x的第四个元素重新给值

x =

     1     2     3     4     5     6     7     8

     4   100     6     7    8     9    10    11

» x(3)=[]% 删除第三个元素

x =

 Columns 1 through 12

     1     4   100     3     6     4     7     5     8     6     9     7

 Columns 13 through 15

    10     8    11

» x(16)=1% 加入第十六个元素

x =

 Columns 1 through 12

     1     4   100     3     6     4     7     5     8     6     9     7

 Columns 13 through 16

    10     8    11     1

2  建立数组

上面的方法只适用于元素不多的情况,但是当元素很多的时候,则须采用以下的方式:

» x=(0:0.02:1);% 以:起始值=0、增量值=0.0.2、终止值=1的矩阵

» x=linspace(0,1,100);% 利用linspace,以区隔起始值=0终止值=1之间的元素数目=100

»a=[]%空矩阵

a =

     []

» zeros(2,2)%全为0的矩阵

ans =

     0     0

0                 0

    » ones(3,3) %全为1的矩阵

ans =

     1     1     1

     1     1     1

1     1     1

» rand(2,4);随机矩阵

»a=1:7, b=1:0.2:5;%更直接的方式

»c=[b a];%可利用先前建立的阵列 a 及阵列 b ,组成新阵列

» a=1:1:10;

» b=0.1:0.1:1;

» a+b*I%复数阵列

ans =

 Columns 1 through 4

   1.0000 + 0.1000i   2.0000 + 0.2000i   3.0000 + 0.3000i   4.0000 + 0.4000i

 Columns 5 through 8

   5.0000 + 0.5000i   6.0000 + 0.6000i   7.0000 + 0.7000i   8.0000 + 0.8000i

 Columns 9 through 10

   9.0000 + 0.9000i 10.0000 + 1.0000i

在MATLAB的内部资料结构中,每一个矩阵都是一个以行为主(Column-oriented)的阵列(Array)因此对於矩阵元素的存取,我们可用一维或二维的索引(Index)来定址

   3   子矩阵

通过一个矩阵产生另一个矩阵的方法(上面已经有例子)

假如一个矩阵A

    则 A(m1:m2 ,n1:n2)为由A的第m1到m2行,第n1列到n2列组成的子矩阵。

 

 

9.矩阵的运算

        经典的算术运算符见下表:

经 典 的 算 术 运 算 符

 

 

运 算 符

MATLAB表达式

+

a+b

-

a-b

*

a*b

 

/ 或 "

a/b或a"b

 

^

a^b

 

 

 

 

 






前面我们已经把经典的算术运算符告诉大家了,在这里同样也可以使用。

» a=1:1:10;

» b=0:10:90;

» a+b

ans =

1    12    23    34    45    56    67    78    89   100

» a-b

ans =

1    -8   -17   -26   -35   -44   -53   -62   -71   -80

    » a.*b%注意这里a后加了个“.”

ans =

     0    20    60   120   200   300   420   560   720   900

» a/b

ans =

0.      1158

   » a"b

ans =

     0     0     0     0     0     0     0     0     0     0

     0     0     0     0     0     0     0     0     0     0

     0     0     0     0     0     0     0     0     0     0

     0     0     0     0     0     0     0     0     0     0

     0     0     0     0    0     0     0     0     0     0

     0     0     0     0     0     0     0     0     0     0

     0     0     0     0     0     0     0     0     0     0

     0     0     0     0     0     0     0     0     0     0

     0     0     0     0     0     0     0     0     0     0

0     1     2     3     4     5     6     7     8     9

   » b./a

ans =

 Columns 1 through 7

         0    5.0000    6.6667    7.5000    8.0000    8.3333    8.5714

 Columns 8 through 10

8.7500    8.8889    9.0000

» a."b

ans =

 Columns 1 through 7

         0    5.0000    6.6667    7.5000    8.0000    8.3333    8.5714

 Columns 8 through 10

    8.7500    8.8889    9.0000

» a.^2

ans =

     1     4     9    16    25    36    49    64    81   100

说明:在这里特别要注意一下有没有加点“.”之间的区别,这些算术运算符所运算的两个阵列是否需要长度一致。

       矩阵转置运算

通过在矩阵变量后加的方法来表示转置运算

?a=1:1:10;

?b=0:10:90;

?a'

ans =

     1

     2

     3

     4

     5

     6

     7

     8

     9

10

?c=a+b*i;

?c'

ans =

   1.0000         

   2.0000 -10.0000i

   3.0000 -20.0000i

   4.0000 -30.0000i

  5.0000 -40.0000i

   6.0000 -50.0000i

   7.0000 -60.0000i

   8.0000 -70.0000i

   9.0000 -80.0000i

 10.0000 -90.0000i

MATLAB函数参考

附录一:命令

附录1.1 管理用命令

函数名    功能描述    函数名    功能描述
addpath    增加一条搜索路径    rmpath    删除一条搜索路径
demo    运行Matlab演示程序    type    列出.M文件
doc    装入超文本文档    version    显示Matlab的版本号
help    启动联机帮助    what    列出当前目录下的有关文件
lasterr    显示最后一条信息    whatsnew    显示Matlab的新特性
lookfor    搜索关键词的帮助    which    造出函数与文件所在的目录
path    设置或查询Matlab路径          

附录1.2管理变量与工作空间用命令 

函数名    功能描述    函数名    功能描述
clear    删除内存中的变量与函数    pack    整理工作空间内存
disp    显示矩阵与文本    save    将工作空间中的变量存盘
length    查询向量的维数    size    查询矩阵的维数
load    从文件中装入数据    who,whos    列出工作空间中的变量名

附录1.3文件与操作系统处理命令 

函数名    功能描述    函数名    功能描述
cd    改变当前工作目录    edit    编辑.M文件
delete    删除文件    matlabroot    获得Matlab的安装根目录
diary    将Matlab运行命令存盘    tempdir    获得系统的缓存目录
dir    列出当前目录的内容    tempname    获得一个缓存(temp)文件
!    执行操作系统命令          

附录1.4窗口控制命令 

函数名    功能描述    函数名    功能描述
echo    显示文件中的Matlab中的命令    more    控制命令窗口的输出页面
format    设置输出格式          

附录1.5启动与退出命令 

函数名    功能描述    函数名    功能描述
matlabrc    启动主程序    quit    退出Matlab环境
startup    Matlab自启动程序          

附录2 运算符号与特殊字符附录

2.1运算符号与特殊字符

函数名    功能描述    函数名    功能描述
+    加    ...    续行标志
-    减    ,    分行符(该行结果不显示)
*    矩阵乘    ;    分行符(该行结果显示)
.*    向量乘    %    注释标志
^    矩阵乘方    !    操作系统命令提示符
.^    向量乘方         矩阵转置
kron    矩阵kron积    .    向量转置
"    矩阵左除    =    赋值运算
/    矩阵右除    ==    关系运算之相等
."    向量左除    ~=    关系运算之不等
./    向量右除    <    关系运算之小于
:    向量生成或子阵提取    <=    关系运算之小于等于
()    下标运算或参数定义    >    关系运算之大于
[]    矩阵生成    >=    关系运算之大于等于
{}         &    逻辑运算之与
.    结构字段获取符    |    逻辑运算之或
.    点乘运算,常与其他运算符联合使用(如.")    ~    逻辑运算之非
xor    逻辑运算之异成          

附录2.2逻辑函数 

函数名    功能描述    函数名    功能描述
all    测试向量中所用元素是否为真    is*(一类函数)    检测向量状态.其中*表示一个确定的函数(isinf)
any    测试向量中是否有真元素    *isa    检测对象是否为某一个类的对象
exist    检验变量或文件是否定义    logical    将数字量转化为逻辑量
find    查找非零元素的下标          

附录3 语言结构与调试

附录3.1编程语言 

函数名    功能描述    函数名    功能描述
builtin    执行Matlab内建的函数    global    定义全局变量
eval    执行Matlab语句构成的字符串    nargchk    函数输入输出参数个数检验
feval    执行字符串指定的文件    script    Matlab语句及文件信息
function    Matlab函数定义关键词          

附录3.2控制流程 

函数名    功能描述    函数名    功能描述
break    中断循环执行的语句    if    条件转移语句
case    与switch结合实现多路转移    otherwise    多路转移中的缺省执行部分
else    与if一起使用的转移语句    return    返回调用函数
elseif    与if一起使用的转移语句    switch    与case结合实现多路转移
end    结束控制语句块    warning    显示警告信息
error    显示错误信息    while    循环语句
for    循环语句          

附录3.3交互输入 

函数名    功能描述    函数名    功能描述
input    请求输入    menu    菜单生成
keyboard    启动键盘管理    pause    暂停执行

附录3.4面向对象编程 

函数名    功能描述    函数名    功能描述
class    生成对象    isa    判断对象是否属于某一类
double    转换成双精度型    superiorto    建立类的层次关系
inferiorto    建立类的层次关系    unit8    转换成8字节的无符号整数
inline    建立一个内嵌对象          

附录3.5调试 

函数名    功能描述    函数名    功能描述
dbclear    清除调试断点    dbstatus    列出所有断点情况
dbcont    调试继续执行    dbstep    单步执行
dbdown    改变局部工作空间内存    dbstop    设置调试断点
dbmex    启动对Mex文件的调试    sbtype    列出带命令行标号的.M文件
dbquit    退出调试模式    dbup    改变局部工作空间内容
dbstack    列出函数调用关系          

附录4 基本矩阵与矩阵处理

附录4.1基本矩阵 

函数名    功能描述    函数名    功能描述
eye    产生单位阵    rand    产生随机分布矩阵
linspace    构造线性分布的向量    randn    产生正态分布矩阵
logspace    构造等对数分布的向量    zeros    产生零矩阵
ones    产生元素全部为1的矩阵    :    产生向量

附录4.2特殊向量与常量 

函数名    功能描述    函数名    功能描述
ans    缺省的计算结果变量    non    非数值常量常由0/0或Inf/Inf获得
computer    运行Matlab的机器类型    nargin    函数中参数输入个数
eps    精度容许误差(无穷小)    nargout    函数中输出变量个数
flops    浮点运算计数    pi    圆周率
i    复数单元    realmax    最大浮点数值
inf    无穷大    realmin    最小浮点数值
inputname    输入参数名    varargin    函数中输入的可选参数
j    复数单元    varargout    函数中输出的可选参数

附录4.3时间与日期 

函数名    功能描述    函数名    功能描述
calender    日历    eomday    计算月末
clock    时钟    etime    所用时间函数
cputime    所用的CPU时间    now    当前日期与时间
date    日期    tic    启动秒表计时器
datenum    日期(数字串格式)    toc    读取秒表计时器
datestr    日期(字符串格式)    weekday    星期函数
datevoc    日期(年月日分立格式)          

附录4.4矩阵处理 

函数名    功能描述    函数名    功能描述
cat    向量连接    reshape    改变矩阵行列个数
diag    建立对角矩阵或获取对角向量    rot90    将矩阵旋转90度
fliplr    按左右方向翻转矩阵元素    tril    取矩阵的下三角部分
flipud    按上下方向翻转矩阵元素    triu    取矩阵的上三角部分
repmat    复制并排列矩阵函数          

附录5 特殊矩阵 

函数名    功能描述    函数名    功能描述
compan    生成伴随矩阵    invhilb    生成逆hilbert矩阵
gallery    生成一些小的测试矩阵    magic    生成magic矩阵
hadamard    生成hadamard矩阵    pascal    生成pascal矩阵
hankel    生成hankel矩阵    toeplitz    生成toeplitz矩阵
hilb    生成hilbert矩阵    wilkinson    生成wilkinson特征值测试矩阵

例子1

1.有一周期为4p的正弦波上叠加了方差为0.1的正态分布的随机噪声的信号,用循环结构编制一个三点线性滑动平均的程序。(提示:①用0.1*randn(1,n)产生方差为0.1的正态分布的随机噪声;②三点线性滑动平均就是依次取每三个相邻数的平均值作为新的数据,如x1(2)=(x(1)+x(2)+x(3))/3,x1(3)=(x(2)+x(3)+x(4))/3……)

 

程序:

 

   t=0:pi/50:4*pi;

   n=length(t);

  y=sin(t)+0.1*randn(1,n);

   ya(1)=y(1);

   for i=2:n-1

      ya(i)=sum(y(i-1:i+1))/3;

   end

   ya(n)=y(n);

  plot(t,y,'c',t,ya,'r','linewidth',2)

例子2

2.编制一个解数论问题的函数文件:取任意整数,若是偶数,则用2除,否则乘3加1,重复此过程,直到整数变为1。

 

程序:

functionc=collatz(n)

   % collatz

   % Classic “3n+1” Ploblemfrom number theory

   c=n;

   whilen>1

     if rem(n,2)==0

        n=n/2;

     else

        n=3*n+1;

     end

     c=[c n];

   end

 

调用:

collatz(25)

例子3

3.有一组学生的考试成绩(见表),根据规定,成绩在100分时为满分,成绩在90~99之间时为优秀,成绩在80~89分之间时为良好,成绩在60~79分之间为及格,成绩在60分以下时为不及格,编制一个根据成绩划分等级的程序。

学生姓名

成 

72

83

56

94

100

88

96

68

54

65

程序:(可扩展)

Name=['王','张','刘','李','陈','杨','于','黄','郭','赵'];
  Marks=[72,83,56,94,100,88,96,68,54,65];
   %划分区域:满分(100),优秀(90-99),良好(80-89),及格(60-79),不及格(<60)。
   n=length(Marks);
   for i=1:10
     a{i}=89+i;
     b{i}=79+i;
     c{i}=69+i;
     d{i}=59+i;
   end;
   c=[d,c];
   % 根据学生的分数,求出相应的等级。
   for i=1:n
     switch Marks(i)
     case 100     %得分为100时
        Rank(i,:)=' 满分';
     casea              %得分在90~99之间
        Rank(i,:)=' 优秀';
     case b        %得分在80~89之间
        Rank(i,:)=' 良好';
     casec           %得分在60~79之间
        Rank(i,:)=' 及格';
     otherwise        %得分低于60。
        Rank(i,:)='不及格';
     end
   end
   % 将学生姓名,得分,级等信息打印出来。
   disp(' ')
   disp(['学生姓名 ','  得分 ','   等级']);
  disp('--------------------------')
   for i=1:n;
    disp(['  ',Name(i),'   ',num2str(Marks(i)),'  ',Rank(i,:)]);
   end

运行结果:

学生姓名 

  得分    等级
--------------------------
  王   72    及格
  张   83    良好

例子4

4.编写一段程序,能够把输入的摄氏温度转化成华氏温度,也能把华氏温度转换成摄氏温度。

程序:

k=input('选择转换方式(1--摄氏转换为华氏,2--华氏转换为摄氏):');
   if k~=1 &k~=2
     disp('请指定转换方式')
     break
   end
  tin=input('输入待转变的温度(允许输入数组):');
   if k==1
     tout=tin*9/5+32;       % 摄氏转换为华氏
     k1=2;
   elseif k==2
     tout=(tin-32)*5/9;      % 华氏转换为摄氏
     k1=1;
   end
   str=[' degC';' degF'];
   disp(['转换前的温度','    ','转换后的温度'])
  disp(['  ',num2str(tin),str(k,:),'         ', num2str(tout),str(k1,:)])

 

结果:

选择转换方式(1--摄氏转换为华氏,2--华氏转换为摄氏):2
输入待转变的温度(允许输入数组):99
转换前的温度   转换后的温度
   99degF         37.2222 degC


  • 11
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值