一、初识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以其他数为底的内置函数
    
     解决办法:
    
   
    
     ①
    
    
     换底公式换算
    
    
    
     
      
       
        L 
o
g
5
x
=
l
o
g
10
x
/
l
o
g
10
5
         Log_5x=log_{10}x/log_{10}5
       
       
        
         
         
         
          L
         
         
          o
         
         
          
           g
          
          
           
            
             
              
               
               
               
                
                 5
                
               
              
             
             
              
             
            
            
             
              
              
             
            
           
          
         
         
          x
         
         
         
         
          =
         
         
         
        
        
         
         
         
          l
         
         
          o
         
         
          
           g
          
          
           
            
             
              
               
               
               
                
                 
                  1
                 
                 
                  0
                 
                
               
              
             
             
              
             
            
            
             
              
              
             
            
           
          
         
         
          x
         
         
          /
         
         
          l
         
         
          o
         
         
          
           g
          
          
           
            
             
              
               
               
               
                
                 
                  1
                 
                 
                  0
                 
                
               
              
             
             
              
             
            
            
             
              
              
             
            
           
          
         
         
          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的矩阵行列为256
    
     256,因为其大小即256
    
    256
   
     
   
因为是灰度,所以没有标识的整型uint8,且每一个值的范围为0~255。
    
    
    3.2图像灰度反转
   
图像读取进来为矩阵。
矩阵可以进行计算。
255-A可得该图像的灰度图的反转
     
   
若不指定显示窗口,会输出figure1,覆盖原有的图像
matlab
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'。
>> 
 
