MATLAB速成

MATLAB速成

前言

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

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

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

MATLAB基本使用

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

打开matlab之后,界面如下

QQ截图20241020163058.png

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

QQ截图20241020163632.png

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

QQ截图20241020163149.png

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

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

e0be2c0c-a282-417e-9446-a22fb8a6210b.png

这里我们选择M-file文件,这里因为我使用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]也选中。

6df96b23-b283-4d2f-b48e-b5526c64e927.png

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

QQ截图20241020164857.png

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

%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中的集合有些像。

%元胞数组
%定义一个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}

结构体

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

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

QQ截图20241020165319.png

矩阵的其他内容

%矩阵的定义与构造
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)

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

逻辑控制

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

%逻辑与流程控制
%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

二维绘图

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

%二维平面绘图
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可以很快的了解。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容