您的位置:首页 > 编程语言 > MATLAB

matlab基本语法

2017-11-12 00:14 288 查看

1:matlab变量

变量名最多namelengthmax长度,在matlab2016a里面显示是63个字符,变量声明没有显式的类型声明,和python一样,比如说a=10.0。

Matlab的基本数据结构是矩阵,矩阵中的元素可以是数、字符、逻辑表达式(logic states)、true或false、甚至是Matlab结构体. 基于这个前提,Mathlab能够处理非常多种类的数据。例如一个单独的数即一个标量在Matlab中是一个1×1的矩阵,一个行向量为1×N的矩阵,一个列向量为N×1的矩阵,一个多项式也是用一个向量来表示等等。Matlab也支持二维以上的矩阵,称为多维数组(arrays),例如一个三维数组的元素可以用三维坐标值来定位.

不管用户使用什么类型的数据(数、字符、逻辑true或false),Matlab都会将这些数据以矩阵或数组的形式存放. 例如字符串’Hello World’是一个1×11的矩阵,其矩阵元素是一个个单独的字符.

分号(
;
)表示结束语句。 在表达式后添加分号能抑制和隐藏表达式的MATLAB输出。也就是说一般命令行里面会把上一个指令的值显示出来,比如说a=10.0,就会再显示一遍a=10.0,加上;就不会显示了。

(1)行向量的赋值. 对行向量赋值时,用b=[1,2,3] 或 b=[1 2 3] 这种形式,行向量的每个分量值之间用空格或一个逗号分隔,整体分量值被包含在一个方括号里.



(2) 列向量的赋值. 对列向量赋值时,用 c=[1;2;3] 这种形式,列向量的每个分量值之间用回车键或一个分号分隔.



(3) 二维矩阵的赋值. 对二维矩阵赋值时,一般用 d=[1,2,3;4,5,6;7,8,9] 的形式,其行内元素用逗号或空格隔开,行与行之间用分号或回车键分隔.

另外,还可以用指定矩阵下标的方法给矩阵赋值,下标从1开始,如d(1,1)=1; d(2,2)=2 . 对于没有赋值的数组元素,其默认值为0.(ps: 在命令窗口中,一行可以输入多条语句,语句之间用分号隔开,但如果最后一条语句后面也有分号,则运行或赋值结果不输出)


2 变量赋给变量

在编程过程中,一个非常普遍的操作是将一个变量的值赋给另外一个变量,这在Matlab中也是必须支持的,前提是作为值的变量要是预先定义或者使用过的。例如,我们可以先定义两个行向量,然后把这两个行向量作为分量赋值给另一个变量:


这里用到了一个重要的操作符,即冒号算符(colon operator),格式是first:last,它用于生成一个行向量,这个向量的元素默认是一个增量为1的有序数列,其第一个元素为first,最后一个元素为last. 例如 a=10:15相当于a=[10,11,12,13,14,15]. 另外还有一种带步长的冒号操作符,形如first:step:last,它生成的以first开头以last结尾的行向量,且行向量中元素的增量是step,即后一个元素比前一个元素大step. 例如a=3:0.2:3.8相当于a=[3,3.2,3.4,3.6,3.8]. 如果希望生成一个元素递减的行向量,则只须将步长设置为复数.





因此,前面两个向量赋值给一个矩阵的例子中,f(1,:)表示f 矩阵中第一行的所有元素, f(2,:)表示第二行的所有元素.

赋值时,f(i)代表一维数组的下标为i的元素的值,如果知道f不止一维,那么就要使用f(i,j)来进行赋值,如果先使用了

f(i)=a,那么再次使用f(i+1,j)或者f(i+1,j:k)的时候就有可能出现维度不匹配无法赋值的情况。

3 生成单位阵

Matlab提供了eye(n) 函数用以方便地生成一个n×n的单位阵,




4 生成对角阵

Matlab中可以用diag 函数生成一个对角阵,如


MATLAB预定义变量

Matlab中有一些预定变量,这些预定义变量具有相应的初始值,其中比较常用的包括:
pi:    返回π,即3.141592653589793.

i,j:    定义为,虚数单位. 如果用户给这两个变量赋了其他的值,则它们不再是预定义常数.如果赋值之后希望恢复这其虚数单位值,可以通过clear命令恢复.

inf:   定义为1/0. 当出现被0除时, Matlab就会返回inf,且不中断执行而继续计算.

NaN:       定义为”Not a Number”,表示不是一个合法的数.

eps:  返回机器的精度,定义为与1最接近的可代表的浮点数之间的差. 被用户赋值后不能由clear恢复.

删除自定义变量和恢复预定义变量

在Matlab中,可以通过一些命令进行变量的删除和内存的重组,主要包括以下几个命令:
clear: 删除所有用户自定义变量并恢复除eps外的所有预定义变量.

clear variable1: 仅删除名为变量variable1的变量.

clear variable1 variable2 … : 删除变量variable1 variable2 …

clear a*: 删除所有以a开头的变量.

pack: 重组和压缩已分配的内存碎块. 当Matlab 的内存满后,可以利用这个命令实现在不清除任何变量的情况下得到更多的空间.

pack filename: 用名为filename的文件作为临时文件,重组和压缩已分配的内存.

变量类型(作用域) 

Matlab中的变量类型(Types of Variables)分为局部变量(Local Variable), 全局变量(Global Variable)和局部静态变量(Persistent Variables).
局部变量: 如果一个函数内的变量没有特别声明, 那么这个变量只在函数内部使用, 即为局部变量.

全局变量: 全局变量可以被多个不同的函数和基本工作空间(base workspace)共享. 如果一个函数需要使用全局变量a , 则必须在函数中(一般在函数的开始部分)声明该a为global: global a. 如果这个函数包含若干个子函数, 且子函数也需要访问全局变量a, 那么各个子函数中也都要加上global a. 如果某个函数更改了a的值, 那么之后其他所有声明了a的函数都可以得到这个新值. 如果某个函数需要访问Matlab命令行中的一个变量b, 那么需要在命令行中声明b为global.

局部静态变量: 局部静态变量只能在某个M文件中声明和使用, 且使用它的函数内需要有声明. 只要包含局部静态变量的函数存在于内存中(没有通过clear命令删除, 没有重新编辑), 该局部静态变量就一直存在.

上面内容参考博客https://www.cnblogs.com/zhouqing/p/3277787.html

5

当表达式返回未分配给任何变量的结果时,系统将其分配给名为
ans
的变量,比如>>sqrt(16),执行之后ans=4,如果使用c=sqrt(64)是不会把ans更新为8的,只有未将结果分配给变量的时候才会赋值给ans

使用who可以命令显示使用过的所有变量名,whos显示的内容更加具体



长任务可以通过使用省略号(
...
)扩展到另一行。 例如,

initial_velocity = 0;
acceleration = 9.8;
time = 20;
final_velocity = initial_velocity ...
+ acceleration * time


使用format命令可以更改精度,比如说format long显示10进制后的16位数字,具体查看 http://www.yiibai.com/matlab/matlab_variables.html
使用rand函数可以生成随机数构成的矩阵,如:

a=rand(2,3,4)

a(:,:,1) =

0.6787 0.7431 0.6555
0.7577 0.3922 0.1712
a(:,:,2) =

0.7060 0.2769 0.0971
0.0318 0.0462 0.8235
a(:,:,3) =

0.6948 0.9502 0.4387
0.3171 0.0344 0.3816
a(:,:,4) =

0.7655 0.1869 0.4456
0.7952 0.4898 0.6463

比如说上面的

a(:,:,4) =

0.7655 0.1869 0.4456
0.7952 0.4898 0.6463

是构成的(2,3,4)维矩阵的

1,1,4  1,2,4 1,3,4

2,1,4 2,2,4 2,3,4

2:函数

在MATLAB中,函数在单独的文件中定义。文件的名称和函数的名称应该是一样的。

函数的定义是:

function [y1,y2...]=name(x1,x2,...)

xxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxx

end

其中主函数里面可以定义子函数,可以从命令行或其他函数的文件外部调用主函数,但不能从命令行或函数文件外的其他函数调用子函数,子函数仅对函数文件中的主函数和其他子函数可见。

 

 

 

 

 

查看原文:http://www.hahaszj.top/%e5%b7%a5%e5%85%b7/matlab%e5%9f%ba%e6%9c%ac%e8%af%ad%e6%b3%95/173
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: