MATLAB 语法基础(一)

https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes

https://blog.csdn.net/qq_28584889/article/details/82860489

https://blog.csdn.net/shitao99/article/details/85081718

MATLAB的搜索路径

在这里插入图片描述

用path命令设置文件搜索路径。例如:

path(path,‘e:\work’)

 用对话框设置文件搜索路径。
在这里插入图片描述

如果在当前文件夹和搜索路径文件夹下建立了一个同名的M 文件,那么在命令行窗口输入文件名时,执行哪个文件?

 如果用户建立的文件既没有保存在当前文件夹下,也没有 保存在文件搜索路径中,那么在命令行窗口输入文件名时, 会出现什么信息?

第一个问题根据MATLAB的搜索路径,程序文件的搜索顺 序是首先在当前文件夹中搜索,然后再在文件搜索路径 中的文件夹中搜索,所以执行的是当前文件夹下的M文件。

第二个问题,同样根据MATLAB的搜索路径,如果用户建 立的文件既没有保存在当前文件夹下,也没有保存在文 件搜索路径中,那么MATLAB就找不到这个文件,系统会 给出错误提示信息。

数值数据类型的分类

整型
浮点型
复数型

数值数据类型的分类

1.数值数据类型的分类

无符号整数:无符号8位整数、无符号16位整数、无符号32位整数、
无符号64位整数。

带符号整数:带符号8位整数、带符号16位整数、带符号32位整数、
带符号64位整数。

1.数值数据类型的分类
 无符号8位整数数据范围:0000000011111111(028-1)。  带符号8位整数数据范围:1000000001111111(-2727-1)。

x=uint8(129) x = 129

(2)浮点型
 single函数:将其他类型的数据转换为单精度型。  double函数:将其他类型的数据转换为双精度型。
默认为双精度型

class(4) ans = double >> class(single(4)) ans = single

(3)复型 复型数据包括实部和虚部两个部分,实部和虚部默认为双精度型,虚数 单位用i或j来表示。  real函数:求复数的实部  imag函数:求复数的虚部

6+5i ans = 6.0000 + 5.0000i >> 6+5j ans = 6.0000 + 5.0000i

format命令的格式: format 格式符

format long >> 50/3 ans = 16.666666666666668

注意:format命令只影响数据输出格式 ,而不影响数据的计算和存储。

3.常用数学函数

A=[4,2;3,6] A = 4 2 3 6 >> B=exp(A) B = 54.5982 7.3891 20.0855 403.4288
(1)函数的调用格式为:
函数名(函数自变量的值)

注:函数自变量的值为矩阵,标量只是特例

函数在运算时是将函数逐项作用于矩阵 的每个元素上,所以最后运算的结果就 是一个与自变量同型的矩阵

① 三角函数有以弧度为单位的函数和以角度为单位的函数,如果是以 角度为单位的函数就在函数名后面加“d”,以示区别。

sin(pi/2) ans = 1 >> sind(90) ans = 1

abs函数可以求实数的绝对值、复数的模、字符串的ASCII码值

abs(-4) ans = 4 >> abs(3+4i) ans = 5 >> abs(‘a’) ans = 97

用于取整的函数有fix、floor、ceil、round。

round(4.7) ans = 5 >> fix(-3.2) ans = -3 >> floor(3.6) ans = 3 >> ceil(-3.8) ans = -3

round函数是按照四舍五入的规则来取整。 ceil是向上取整,取大于等于这个数的第一个整数。 floor是向下取整,取小于等于这个数的第一个整数。 fix是固定取靠近0的那个整数,也就是舍去小数取整。

函数应用举例。

m=345; >> m1=rem(m,10) m1 = 5 >> m2=rem(fix(m/10),10) m2 = 4 >> m3=fix(m/100) m3 = 3

求[1,100]区间的所有素数

x=1:100; >> k=isprime(x); >> k1=find(k); >> p=x(k1)

计算矩阵中元素的个数
numel(rand(3))
ans =
     9

format long
format rat 分式输出

预定义变量

预定义变量是在MATLAB工作空间中驻留,由系统本身定义的变量。
常用的预定义变量
 ans是默认赋值变量
 i和j代表虚数单位
 pi代表圆周率
 NaN代表非数

save命令:创建内存变量文件。
 load命令:装入内存变量文件。

MATLAB矩阵的表示

 矩阵的建立
 冒号表达式
 结构矩阵和单元矩阵

(1)利用直接输入法建立矩阵:将矩阵的元素用中括号括起 来,按矩阵行的顺序输入各元素,同一行的各元素之间用逗 号或空格分隔,不同行的元素之间用分号分隔。

A=[1,2,3;4,5,6;7,8,9] A = 1 2 3 4 5 6 7 8 9

(2)利用已建好的矩阵建立更大的矩阵: 一个大矩阵可以由已经建立好的小矩阵拼接而成。

A=[1,2,3;4,5,6;7,8,9]; >> B=[-1,-2,-3;-4,-5,-6;-7,-8,-9]; >> C=[A,B;B,A]

C =
1 2 3 -1 -2 -3 4 5 6 -4 -5 -6 7 8 9 -7 -8 -9 -1 -2 -3 1 2 3 -4 -5 -6 4 5 6 -7 -8 -9 7 8 9

可以用实部矩阵和虚部矩阵构成复数矩阵

B=[1,2,3;4,5,6];
C=[6,7,8;9,10,11];
A=B+i*C

A =
1.0000 + 6.0000i 2.0000 + 7.0000i 3.0000 + 8.0000i
4.0000 + 9.0000i 5.0000 +10.0000i 6.0000 +11.0000i

2.冒号表达式

linspace(a,b,n)

当n省略时,自动产生100个 元素

(1)结构矩阵
由结构数据构成的矩阵就是结构矩阵,结构矩阵里的每个元素 就是结构数据类型。
格式为: 结构矩阵元素.成员名=表达式

a(1).x1=10; a(1).x2=‘liu’; a(1).x3=[11,21;34,78]; >> a(2).x1=12; a(2).x2=‘wang’; a(2).x3=[34,191;27,578]; >> a(3).x1=14; a(3).x2=‘cai’; a(3).x3=[13,890;67,231];

单元矩阵

b= {10,‘liu’,[11,21;34,78];12,‘wang’,[34,191;27,578];… 14,‘cai’,[13,890;67,231]} b = [10] ‘liu’ [2x2 double] [12] ‘wang’ [2x2 double] [14] ‘cai’ [2x2 double]
建立单元矩阵和一般矩阵相似,直接输入就可以了,只是单元矩阵元 素用大括号括起来。

矩阵元素的引用

矩阵元素的引用方式
利用冒号表达式获得子矩阵
利用空矩阵删除矩阵的元素
改变矩阵的形状

(1)通过下标来引用矩阵的元素
A(3,2)表示A矩阵第3行第2列的元素。

A(3,2)=200

A=[1,2,3;4,5,6]; >> A(4,5)=10 A = 1 2 3 0 0 4 5 6 0 0 0 0 0 0 0 0 0 0 0 10
(1)通过下标来引用矩阵的元素
注意:如果给出的行下标或列下标大于原来矩阵的行数和列数, 那么MATLAB将自动扩展原来的矩阵,并将扩展后没有赋值的矩阵 元素置为0。

(2)通过序号来引用

在MATLAB中,矩阵元素按列存储,即首先存储矩阵的第一列元
素,然后存储第二列元素,…,一直到矩阵的最后一列元素。  矩阵元素的序号就是矩阵元素在内存中的排列顺序。

sub2ind函数:将矩阵中指定元素的行、列下标转换成存储的序号。调用格
式为:

在这里插入图片描述

ind2sub函数:将把矩阵元素的序号转换成对应的下标,其
调用格式为:

在这里插入图片描述

.改变矩阵的形状

reshape(A,m,n):在矩阵总元素保持不变的前提下,将矩阵A重 新排成m×n的二维矩阵。
注意:reshape函数只是改变原矩阵的行数和列数,但并不改 变原矩阵元素个数及其存储顺序。

>> x=[23,45,65,34,65,34,98,45,78,65,43,76]; 
>> y=reshape(x,3,4) 
>> y 

23 34 98 65
45 65 45 43
65 34 78 76

A(😃 :将矩阵A的每一列元素堆叠起来,成为一个列向量。

>> A =[-45,65,71;27,35,91] 

A = -45 65 71 27 35 91

>>B=A(:) 

B = -45 27 65 35 71 91

A(:)等价于reshape(A,6,1)。

MATLAB基本运算

 算术运算
 关系运算
 逻辑运算

(1)基本算术运算
基本算术运算符:+(加)、-(减)、*(乘)、/(右除)、(左除)、
^(乘方)。

MATLAB的算术运算是在矩阵意义下进行的。
 单个数据的算术运算只是矩阵运算的一种特例。

注意,MATLAB的运算是在矩阵意义下进行的,单个数据的算术运算只
是矩阵运算的一种特例。

加减运算

 若两矩阵同型,则运算时两矩阵的相应元素相加减。
 若两矩阵不同型,则MATLAB将给出错误信息。
 一个标量也可以和矩阵进行加减运算,这时把标量和矩阵的每一个元素进行加减运算。

乘法运算

 矩阵A和B进行乘法运算,要求A的列数与B的行数相等,此时则称A、B矩阵是可乘的,或称A和B两矩阵维数和大小相容。
 如果两者的维数或大小不相容,则将给出错误信息,提示用户两个矩阵是不可乘的。

除法运算

在MATLAB中,有两种矩阵除法运算:右除/和左除\。
如果A矩阵是非奇异方阵,则B/A等效于B*inv(A),A\B等效
于inv(A)*B

首先,看这个矩阵是不是方阵(即行数和列数相等的矩阵,若行数和列数不相等,那就谈不上奇异矩阵和非奇异矩阵)。然后,再看此矩阵的行列式|A|是否等于0,若等于0,称矩阵A为奇异矩阵;若不等于0,称矩阵A为非奇异矩阵。 同时,由|A|≠0可知矩阵A可逆,这样可以得出另外一个重要结论:可逆矩阵就是非奇异矩阵,非奇异矩阵也是可逆矩阵。 如果A为奇异矩阵,则AX=0有无穷解,AX=b有无穷解或者无解。如果A为非奇异矩阵,则AX=0有且只有唯一零解,AX=b有唯一解。

>> A=[1,2,3;4,2,6;7,4,9];
>> B=[4,3,2;7,5,1;12,7,92]; 
>> C1=B/A 
C1 =
   -0.1667   -3.3333    2.5000
   -0.8333   -7.6667    5.5000
   12.8333   63.6667  -36.5000

>> C2=A\B 
C2 =
    0.5000   -0.5000   44.5000
    1.0000    0.0000   46.0000
    0.5000    1.1667  -44.8333

乘方运算

一个矩阵的乘方运算可以表示成A^x,要求A为方阵,x为标量。

>> A=[1,2,3;4,5,6;7,8,0]; 
>> A^2
ans =
    30    36    15
    66    81    42
    39    54    69

(2)点运算 

点运算符:.*、./、.\和.^。
两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵同型。

log abs exp 均可以

当x=0.1、0.4、0.7、1时,分别求y=sinx cosx的值。

>> x=0.1:0.3:1;
>> sin(x).*cos(x)
ans =
    0.0993    0.3587    0.4927    0.4546

2.关系运算
 关系运算符:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等 于)、==(等于)、~=(不等于)。

 当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0。

 当参与比较的量是两个同型的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由0或1组成。

 当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由0或1组成。

>> A =[24,35,13;22,63,23;39,47,80] 
A =
    24    35    13
    22    63    23
    39    47    80

>> P=rem(A,2)==0 
P =
  3×3 logical 数组

   1   0   0
   1   0   0
   0   0   1

3.逻辑运算

逻辑运算符:&(与)、|(或)和~(非)。
设参与逻辑运算的是两个标量a和b,那么运算规则为:
 a&b a、b全为非零时,运算结果为1,否则为0。  a|b a、b中只要有一个为非零时,运算结果为1 。
 ~a 当a为零时,运算结果为1;当a为非零时,运算结果为0。

若参与逻辑运算的是两个同型矩阵,那么将对矩阵相同位置上的元
素按标量规则逐个进行运算,最终运算结果是一个与原矩阵同型的
矩阵,其元素由1或0组成。
 若参与逻辑运算的一个是标量,一个是矩阵,那么将在标量与矩阵
中的每个元素之间按标量规则逐个进行运算,最终运算结果是一个
与矩阵同型的矩阵,其元素由1或0组成。

水仙花数是指各位数字的立方之和等于该数本身的三位正整数。 求全部水仙花数。

>> m=100:999; 
>> m1=rem(m,10); 
>> m2=rem(fix(m/10),10); 
>> m3=fix(m/100); 
>> k=find(m==m1.*m1.*m1+m2.*m2.*m2+m3.*m3.*m3)
 k = 54   271   272   308 
>> s=m(k) 
 s = 153   370   371   407
v = [2,3,4]
val = max(v)
[val, index] = max(v)

val =
     4

val =
     4

index =
     3

% 如果是矩阵烦返回每一列最大值

A = [1,2,5;8,4,3]
[val, index] = max(A)
val =
     8     4     5
index =
     2     2     1
v = [2,3,4]
val = max(v)
[val, index] = max(v)
% 如果是矩阵烦返回每一列最大值
A = [1,2,5;8,4,3]
[val, index] = max(A)
find(A>3)%以序列的形式返回,下标
ans =
     2
     4
     5
v = [2,3,4]
val = max(v)
[val, index] = max(v)
% 如果是矩阵烦返回每一列最大值
A = [1,2,5;8,4,3]
[val, index] = max(A)
find(A>3)%以序列的形式返回,下标
[r,c]= find(A>3)

r =
     2
     2
     1

c =
     1
     2
     3
% v = [2,3,4]
% val = max(v)
% [val, index] = max(v)
% % 如果是矩阵烦返回每一列最大值

% A = [1,2,5;8,4,3]
% [val, index] = max(A)
% find(A>3)%以序列的形式返回,下标
% [r,c]= find(A>3)
% max(A,[],1)%按列
% max(A,[],2)%按行
%max(A(:))
%max(max(A))

v = [2,3,4]
sum(v)
prod(v)
floor(v)%向2下取整
ceil(v)%向下取整

A = [1,2,5;8,4,3]
sum(A)
sum(A,1)%按列
prod(A)%按列
prod(A,2)

eye(3)
B = magic(3)
B.*eye(3)
%主对角线之和
sum(sum(B.*eye(3)))

%sum(sum(A.*flipup(eye(9))))%副对角线之和
% flipup 表示使矩阵翻转

 
D = magic(5)
imagesc(D)
imagesc(D), colorbar, colormap gray;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何为xl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值