matlab速成

MATLAB速成

前言

​ 这学期的通信原理课程有实验课,是要用到matlab的,其实在之前学信号与系统和数字信号处理的时候,这两门课的实验课也是用matlab来完成的,但是我们学校没有开设matlab这门课程,在上实验课的时候老师也知道我们都不会,所以干脆直接把答案发出来让我们自己对着敲一遍,刚开始的时候自己其实也还是会学一点的,但是因为有答案,所以也就慢慢的变得摆烂了,反正自己也不学matlab,也就实验课会用一下,而且答案都有了,cv一下就可以了,所以对于matlab自己一直是处于置之不理的状态,这学期的通信原理老师要求的就稍微严一点了,没有给我们答案,但给了一个样例,但我也看不懂啊,这怎么办,一不做二不休,现学现卖,都学过好几门编程语言了,再学个matlab有多难?于是就有了这个matlab的速成,有兴趣参加数学建模比赛的其实也可以看一下,都是一些比较常用的函数与语法。

​ 因为是速成,所以写的比较简略,有的地方一笔带过。

​ 我才疏学浅,如果有不对或者遗漏的地方,欢迎各位大佬来指正,一起进步。

MATLAB基本使用

​ 这里我用的是matlab7,版本比较低,应该是04年发布的版本,因为我看新版的matlab和学校电脑的matlab界面变化有些大,我为了和学校机房电脑的版本一致,我就选择了matlab7,介绍一下matlab的基本使用

​ 打开matlab之后,界面如下

​ 最右边的部分是命令窗口,可以理解为控制台,可以在这里直接输入数据,下面来举个例子

​ 有>>的代表是我输入的部分,敲下回车后命令窗口会给你回应,比如我想知道a+b等于多少,给a和b分别赋值就可以了,然后输入a+b就能出现结果了,那如果我想输入新的数据该如何呢,可以在命令窗口敲clc执行清屏,这样命令窗口就会删除上面的命令。

​ 执行完清屏操作后的界面。

​ 接下来介绍如何新建文件以及如何编写代码。

​ 这里我们选择M-file文件,这里因为我使用matlab只是用来做实验,所以其他几个几乎用不到就只介绍这一个。点击之后就会出现一个代码窗口,就可以在这里开始敲代码了。编写完之后记得保存。

矩阵

​ 学过线性代数的应该都知道矩阵,那么在matlab中如何定义一个矩阵呢,非常简单,来试一下。

matlab 复制代码
%定义一个矩阵
A = [1 2 3;4 5 6;7 8 9]
%求转置矩阵
B = A'
%把矩阵变成一列的形式,按列变
C = A(:)
%求逆矩阵
D = inv(A)
%生成一个10行5列的0矩阵,后面的3代表三维
E = zeros(10,5,3)

​ 那怎么运行呢,我们选中编写的代码,点击鼠标右键,选择第一个,这里需要注意一下,你选中了那些代码,就会执行哪些,如果你

只选中了B = A',那就会报错,需要将前面的A = [1 2 3;4 5 6;7 8 9]也选中。

​ 点击之后好像没有什么反应?我们回到刚刚的命令窗口,命令窗口就相当于我们的控制台,结果会在这里输出。

下面介绍几种常用的矩阵函数

matlab 复制代码
%rand生成均匀分布的伪随机数分布在0-1之间
%rand(m,n)生成m行n列的均匀分布的伪随机数
%rand(m,n,'double')生成指定精度的位随机数
%randn生成标准正态分布的伪随机数(均值为0,方差为1)
%randi生成均匀分布的伪随机整数
%randi(iMax)在开区间0-iMax生成均匀分布的伪随机整数
%randi(Imax,m,n)在开区间(0,iMax)生成m*n型随机矩阵
%r = randi([iMin,m,n],m,n)在开区间iMin-iMax生成m*n型随机矩阵

元胞数组

​ 元胞数组和我们平常在Java和C中学习的数组有些不太一样,在元胞数组中可以存储任意的数据结构,不需要进行定义,我觉得和Java中的集合有些像。

matlab 复制代码
%元胞数组
%定义一个1行6列的数组,数组中的内容可以是任意的数据结构,跟Java的集合有点像
A = cell(1,6)
%eye函数用于生成一个单位矩阵,3代表生成一个三行三列的单位矩阵
%matlab中的索引是从1开始的,因为我用的是matlab7,是比较古老的版本了,可能在未来的版本中会出现从0开始的索引
%因为像java,c,python他们的索引都是从0开始的
%把eye(3)赋值给A的第二个索引
A{2} = eye(3)
%magic字面意思就是魔法,在matlab中用来生成n阶幻方,比如三阶幻方
%% 就是1-9九个数字,组成3*3矩阵,使得该矩阵无论横竖斜
%三个方向上的三个数字之和总是相同的
%magic(n)生成一个n阶幻方,就是把1-n的平方排成一个n*n的矩阵,使得
% 各个方向上的数字之和都相等(容易证明,这个和等于n*(n^2+1)/2)
A{5} = magic(5)
B = A{5}

结构体

matlab 复制代码
%结构体
books = struct('name',{{'Machine Learning','Data Mining'}},'price',[30 40])
books.name
books.name()
books.name{1}

​ 来看一下执行结果,相信学过其他编程语言的看一遍就知道是什么意思了

矩阵的其他内容

matlab 复制代码
%矩阵的定义与构造
A = [1 2 3 4 5 6 7 8 9]
%1和9代表从1-9,3代表步长,可以理解为每一步走了多远
%必须指定中间的步长
B = 1:2:9
%重复B,重复3行1列
C = repmat(B,3,1)
%两列
C = repmat(B,3,2)
%生成两行四列的全1的矩阵
D = ones(2,4)


%矩阵的四则运算
A = [1 2 3 4;5 6 7 8]
B = [1 1 2 2;2 2 1 1]
C = A+B
D = A-B
E = A*B'
%加点代表对应项相乘,不加点代表矩阵相乘
F = A .* B
%相当于A*B的逆inv
G = A / B
%代表对应项相乘
H = A ./ B


%矩阵的下标
A = magic(5)
%代表B是A的第二行第三列
B = A(2,3)
%在matlab中,冒号所代表的就是所有,那么这一行代码表示的就是A的第三行
C = A(3,:)
%这个代表第四列
D = A(:,4)
%找到大于20的序号值,m代表行数,r代表列数
[m,r] = find(A>20)

​ 因为都比较简单,就一笔带过了。

逻辑控制

​ 同样的,学过其他编程语言的可能看一遍就会了,这里直接附上代码,扫一眼就会了。

matlab 复制代码
%逻辑与流程控制
%for循环
%语法 for  循环变量 = 初值:步长:终值
%                执行语句1
%                执行语句2
%     end
%如果步长为1则可以省略
sum = 0
 for n = 1:5
     sum = sum + n^2
 end
%同样的,for循环也可以进行嵌套
%求从1到5的阶乘的和
sum = 0
for i = 1:5
    p=1
    for j = 1 : i
        p = p*j;
    end
    sum = sum+p
end
%while循环
%while 条件表达式
%        执行语句1
%        执行语句2
%        end
%求1-10的和
sum = 0
n = 1
while n<10
    sum = sum+n
    n=n+1;
end
%if  end
a = 100
b = 20
if a>b
    '成立'
end
%if else end
a = 10
b = 20
if a>b
    '成立'
else
    '不成立'
end

二维绘图

​ 这个就比较重要了,我们实验课基本都是需要绘图的,但是也比较简单,看过前面的代码后,再来看这段就很容易理解了。

matlab 复制代码
%二维平面绘图
x = 0:0.01:2*pi
y = sin(x)
figure%建立一个幕布
plot(x,y)
%标题
title('y = sin(x)')
%x轴标签
xlabel('x')
%y轴标签
ylabel('sin(x)')
%表示x轴的边界最多是2*pi
xlim([0 2*pi])
%颜色选项参数
%红 r ;粉红m;绿 g;青 c;蓝 b;白 w;黄 y;黑 k;
%实线 -;虚线--;冒号线 :;点画线 -,;


%二维绘图
x = 0:0.01:20;
%exp就是e的次方
y1 = 200*exp(-0.05*x).*sin(x);
y2 = 0.8*exp(-0.5*x).*sin(10*x);
figure
%这个就跟定义一个函数或者方法一样,建立H1,和H2两个线,他们公用一个x轴
[AX,H1,H2] = plotyy(x,y1,x,y2,'plot');
%这个是定义H1的Y轴标签
set(get(AX(1),'Ylabel'),'String','Slow Decay')
%这个是定义H2的Y轴标签
set(get(AX(2),'Ylabel'),'String','Fast Decay')
%X轴的标签
Xlabel('Time(\musec)')
title('Multiple Decay Rates')
%这个是定义H1的绘图线使用哪一种
set(H1,'LineStyle','--')
set(H2,'LineStyle',':')

后记

这个速成课是我在b站上跟着up主爱研究的小阿楠学习的,讲的非常好,零基础的也可以去听,我在这只是整理了一下代码,后面的三维绘图等我用不到因此我就没有整理,学完上面的之后去看实验报告的样例就能看个七七八八了,虽然有一些函数没有讲到,但是利用搜索引擎和各种ai可以很快的了解。

相关推荐
玩电脑的辣条哥2 小时前
Python如何播放本地音乐并在web页面播放
开发语言·前端·python
ll7788115 小时前
LeetCode每日精进:20.有效的括号
c语言·开发语言·算法·leetcode·职场和发展
Jackson@ML6 小时前
Python数据可视化简介
开发语言·python·数据可视化
赵琳琅6 小时前
Java语言的云计算
开发语言·后端·golang
lly2024067 小时前
jQuery 杂项方法
开发语言
赵琳琅7 小时前
MDX语言的安全开发
开发语言·后端·golang
开开又心心的学嵌入式7 小时前
C语言——指针进阶应用
c语言·开发语言
开开又心心的学嵌入式7 小时前
C语言——指针基础知识
c语言·开发语言
lonelyhiker7 小时前
javascript的原型链
开发语言·javascript·原型模式
夏梓蕙8 小时前
Elixir语言的软件开发工具
开发语言·后端·golang