一、Matlab
MATLAB 是 MATrix 和 LABoratory 两个词的组合,意为矩阵工厂(矩阵实验室)。
界面
比较熟悉的界面风格~喜欢。
可以把当前文件夹换成工作目录。也就是存放脚本的地方。
命令:
clc()用于清除命令行的命令。
clear()用于清除工作区的变量。
二、Matlab基础数学运算
2.1 MATLAB的变量与注释
可不声明变量,和python一样。(或者说,python和他一样……)
变量名由一个字母引导,后面可以跟字母、数字、下划线等,且区分大小写。不能以数字、下划线开头~,区分大小写。
注释用%。也可用快捷键“ctrl+R”进行注释,
取消多行注释,则在选中的基础上,快捷键“ctrl+T”。
2.2 MATLAB基本语句
2.2.1直接赋值语句
格式:赋值变量=赋值表达式
分号
若赋值表达式后无分号,则为变量赋值并显示结果
若赋值表达式后有分号。则为变量赋值不显示结果。
省略赋值变量和等号
若省略赋值变量和等号,则结果会赋给保留变量ans。
如下,
>> a=1+3*2 %赋值表达式后无分号。则为变量赋值并显示结果
a =
7
>> a=1+3*2; %赋值表达式后有分号。则为变量赋值不显示结果
>> 1+3*2 %省略赋值变量和等号。则结果会赋给保留变量ans
ans =
7
>> 1+3*2; %(带了分号)省略赋值变量和等号。则结果会赋给保留变量ans
>>
Matlab的中括号是用来放矩阵的
Matlab是弧度制
>> sin(30)
ans =
-0.9880
>> sin(pi/6)
ans =
0.5000
>> pi
ans =
3.1416
>>
Log**函数(内置与非内置计算)**
>> log2(5) %以2为底5的对数
ans =
2.3219
>> log10(5) %以10为底5的对数
ans =
0.6990
>> log(5) %以e为底5的对数
ans =
1.6094
>>
发现matlab没有log以其他数为底的内置函数
解决办法:
① 换底公式换算
$$
Log_5x=log_{10}x/log_{10}5
$$
>> log(5)/log(5)
ans =
1
>> log(2)/log(5)
ans =
0.4307
>>
② 利用内置反函数:finverse()函数
>> y=5^2
y =
25
>> f=finverse(y)
未定义与 'double' 类型的输入参数相对应的函数 'finverse'。
>>
数据类型怎么转换?
问题未解决……
2.2.2函数调用语句(自定义函数)
自定义函数
可直接在定义:function y=fun2(x)
进行自定义函数。将elseiftest函数改造如下,
function y=fun1(x)
%x=-2;
if x>=1
y=10;
elseif x>-1&&x<1
y=0;
else
y=-10;
end
注意:使用函数的时候,要用文件名,跟y=fun1没关系。
2.3矩阵运算
2.3.1 矩阵生成
① 直接输入矩阵
对于较小的简单的矩阵,可以从键盘上直接输入矩阵元素,输入时遵循下面的几个原则:
a) 矩阵每一行的元素必须用空格或逗号分开;
b) 在矩阵中,采用分号或回车表明每一行的结束;
c) 整个输入矩阵必须包含在方括号中。
方式一:
>> A=[1,2,3;4,5,6;7,8,9]
A =
1 2 3
4 5 6
7 8 9
>>
方式二:
>> A=[1 2 3
2 3 4
5 6 7]
A =
1 2 3
2 3 4
5 6 7
>>
矩阵的基本运算
>> A=[1 2 3
2 3 4
5 6 7]
A =
1 2 3
2 3 4
5 6 7
>> B=[2,3,4;5,6,7;8,9,10]
B =
2 3 4
5 6 7
8 9 10
>> A+B
ans =
3 5 7
7 9 11
13 15 17
>> A-B
ans =
-1 -1 -1
-3 -3 -3
-3 -3 -3
>> A*B
ans =
36 42 48
51 60 69
96 114 132
>> A' %转置
ans =
1 2 5
2 3 6
3 4 7
>>
由内置函数生成矩阵
在MATLAB中,内置了一些生成矩阵的函数,如:eye(n)生成n维的单位矩阵,ones(n)生成n 维的全1矩阵,zeros(n)生成n维的全0矩阵,另外可以将小矩阵联接起来生成一个较大的矩阵。
>> eye(5) %)生成n维的单位矩阵
ans =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
>> ones(4) %)生成n维的全1矩阵
ans =
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
>> zeros(5) %)生成n维的全0矩阵
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
>>
除了方阵,还可以生成n*m的矩阵
>> ones(3,4)
ans =
1 1 1 1
1 1 1 1
1 1 1 1
>> zeros(5,6)
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
>> eye(6,8)
ans =
1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0
>>
基本运算
在MATLAB中,矩阵的计算非常方面,系统会自动判断矩阵的类型和维度。求转置矩阵用 ‘ ,如求A的转置:>> A’;求逆矩阵用函数inv(),如求 A 的逆矩阵:>> inv(A) ;开平方用函数 sqrt()。
>> A=[1,2,3;2,2,5;3,5,1]
A =
1 2 3
2 2 5
3 5 1
>> inv(A)
ans =
-1.5333 0.8667 0.2667
0.8667 -0.5333 0.0667
0.2667 0.0667 -0.1333
>> sqrt(A) %开平方
ans =
1.0000 1.4142 1.7321
1.4142 1.4142 2.2361
1.7321 2.2361 1.0000
>> A'
ans =
1 2 3
2 2 5
3 5 1
>>
生成大矩阵
可以将小矩阵联接起来生成一个较大的矩阵。
>> A
A =
1 2 3
2 2 5
3 5 1
>> B=[A, A+5, A+10; A-10, A-5, A]
B =
1 2 3 6 7 8 11 12 13
2 2 5 7 7 10 12 12 15
3 5 1 8 10 6 13 15 11
-9 -8 -7 -4 -3 -2 1 2 3
-8 -8 -5 -3 -3 0 2 2 5
-7 -5 -9 -2 0 -4 3 5 1
>>
2.4 循环控制语句
for和while
用for和while来计算1—100的数之和。
For
s=0; %初始化
for k=1:1:100 %第一个冒号之前的1是k的初始值,两个冒号之间的1是k增加的步长,最后一个冒号之后的100是结束值。
s=s+k;
end
s
命令行窗口输出
>> for_Test
s =
5050
>>
While
s=0; k=1; %初始值
while(k<=100) %当 k=100 是结束循环。
s=s+k;
k=k+1;
end
s
命令行窗口输出
>> whiletest
s =
5050
>>
条件转移语句elseif
x=-2;y=0;
if x>=1
y=10;
elseif x>-1&&x<1
y=0;
else
y=-10;
end
y
开关语句switch
x=0;
switch x
case 1
y=1
case 2
y=-1
otherwise
y=9999
end
输出
>> switchtest
y =
9999
>>
三、基于MATLAB平台的数字图像认知
在 MATLAB 的安装目录下可以找到 MATLAB 自带的图片资源,以 MATLAB 2016b 版本为例,可以在 MATLAB\R2016b\toolbox\images\imdata 目录下找到图片资源。
3.1照片读取imread()函数
A=imread('cameraman.tif'); %可以在工作区看到A是一个 256*256的uint8格式数组
A
B=imread('yellowlily.jpg'); %可以在工作区看到B是一个1632*1224*3的uint8格式数组
figure(1),imshow(A)%打开图形窗口1,显示A图片。
figure(2),imshow(B) %打开图形窗口2,显示B图片。
图像A的矩阵行列为256256,因为其大小即256256
因为是灰度,所以没有标识的整型uint8,且每一个值的范围为0~255。
3.2图像灰度反转
图像读取进来为矩阵。
矩阵可以进行计算。
255-A可得该图像的灰度图的反转
若不指定显示窗口,会输出figure1,覆盖原有的图像
A=imread('cameraman.tif'); %可以在工作区看到A是一个 256*256的uint8格式数组
figure(1),imshow(A)%打开图形窗口1,显示A图片。
%灰度反转
C=255-A;
imshow(C);%也会显示在图形窗口1,覆盖掉A
3.3彩色图像
是三维矩阵。R、G、B三个通道去显示。
读取彩色tif默认为灰度图。
四、遇到过的问题
4.1 字体改为Consolas后编辑器注释中文乱码问题
安装完毕后,越写越觉得Matlab的字体真不咋地,于是乎,将字体改为心心爱爱的Consolas字体,然鹅,发现注释中的中文出现了方框问号的乱码问题……。
原因:
Matlab中缺少Consolas字体,导致其显示不正确。
解决:下载Consolas-with-Yahei-master.zip字体(4个),将其放在matlab字体路径下即可。
Matlab字体路径:D:\Matlab\sys\java\jre\win64\jre\lib\fonts
下载链接:https://pan.baidu.com/s/1-Ozh509csXHgNSMoWGRteg
提取码:vd8a
为什么选择这一种字体呢
Consolas 字体是微软专为程序员开发的一种字体,这一字体的特性是所有字母、数字与符号均能非常容易辨认!而且所有字符都具有相同的宽度,让编程人员看着更舒适。但是不支持中文。
微软雅黑是个人电脑上可以显示的最清晰的中文字体之一,全面支持ClearType技术。
这种字体是一种 Consolas 和 微软雅黑 的混合字体,这样既保证了代码的显示效果,而且也兼容了中文显示。
4.2 ASV文件
在写代码的时候,无意间发现,哎~?创建的脚本旁边还有有个同名的兄弟文件,后缀为CSV。很有趣,
asv就是autosave的意思,.asv文件的内容和相应的.m文件内容一样,用记事本和matlab都能打开它。它可以作为*.m文件的“备份”。
可以在预设中通过设置取消自动备份功能:编辑器/调试器→备份文件。把勾选去掉就行了。
4.3反函数finverse求log52
>> y=5^2
y =
25
>> f=finverse(y)
未定义与 'double' 类型的输入参数相对应的函数 'finverse'。
>>
数据类型怎么转换?
这是个问题……