初识Matlab以及Matlab一般性教程

一、初识Matlab

MATLAB 是 MATrix 和 LABoratory 两个词的组合,意为矩阵工厂(矩阵实验室)。

界面

img

比较熟悉的界面风格~喜欢。

可以把当前文件夹换成工作目录。也就是存放脚本的地方。

命令:

**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 Log5x=log10x/log105

>> 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图片。

img

图像A的矩阵行列为256256,因为其大小即256256

img

因为是灰度,所以没有标识的整型uint8,且每一个值的范围为0~255。

3.2图像灰度反转

图像读取进来为矩阵。

矩阵可以进行计算。

255-A可得该图像的灰度图的反转

img

若不指定显示窗口,会输出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文件的“备份”。

可以在预设中通过设置取消自动备份功能:编辑器/调试器→备份文件。把勾选去掉就行了。

img

4.3反函数finverse求log52

>> y=5^2

y =

    25

>> f=finverse(y)
未定义与 'double' 类型的输入参数相对应的函数 'finverse'。

>> 
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页