【学习笔记】Get Started with MATLAB-Chapter01
这是我在学习MATLAB的官方手册时做的笔记,手册是英文版可能有些术语啊、表达啊我只是按照自己的理解译的,不是很专业,分享给同样奋战中的小白参考,也希望各位大神多多指教哇哈哈~
基本结构
界面
clc清空所有命令
clc清空所有命令
clc清空所有命令
清除命令行窗口中的所有指令
变量
在未使用分号的情况下运行代码时不会出现错误,在使用分号的情况下则会推迟命令窗口中输出的显示(suppression de l'affichage de la sortie dans la fenêtre de commandes)
>> a=1
a =
1
>> b=cos(a)
b =
0.5403
>> sin(a) %不指定结果赋值给谁就会自动赋给ans,后面会被覆盖。
ans =
0.8415
whos %查看所有变量属性
save myfile.mat %save 文件名,将所有变量存储下来以备下次用,否则关掉程序就都清空了。可以在界面左侧current folder里看到。
load myfile.mat %load 文件名,打开保存的变量
矩阵
创建矩阵
基本方法:用方括号表示矩阵内元素,逗号或空格分列,分号分行
>> a=[1 2 3;4 5 6]
a =
1 2 3
4 5 6
函数方法:
>> z=zeros(5,1) %MATLAB里都是前面的表示行,后面的表示列
z =
0
0
0
0
0
矩阵运算
对矩阵进行的运算会作用到矩阵内的每个元素上
>> a+10
ans =
11 12 13
14 15 16
>> sin(a)
ans =
0.8415 0.9093 0.1411
-0.7568 -0.9589 -0.2794
矩阵的转置
>> a'
ans =
1 4
2 5
3 6
矩阵的逆
>> a=[a;[8 7 9]] %因为只有方阵才可以计算逆矩阵,因此在a下面加上一行
a =
1 2 3
4 5 6
8 7 9
>> inv(a) %求逆
ans =
-0.3333 -0.3333 0.3333
-1.3333 1.6667 -0.6667
1.3333 -1.0000 0.3333
矩阵乘法
对比下面两段即可
>> p=a*inv(a) %线性代数里面的矩阵乘法
p =
1.0000 0 0.0000
-0.0000 1.0000 0.0000
-0.0000 0 1.0000
>> p=a.*a %对应元素分别相乘
p =
1 4 9
16 25 36
64 49 81
再举两个栗子
>> a.^3 %等效于a.*a.*a
ans =
1 8 27
64 125 216
512 343 729
>> a^3 %等效于a*a*a
ans =
501 525 675
1140 1191 1530
1740 1815 2331
矩阵指针
A(i,j)的形式找到A矩阵中的第i行,第j列元素
>> A=magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> A(4,2) %第4行第2个
ans =
14
同样可以采用A(k)形式确定矩阵中从起始位置A(1,1)开始依次按列查找(纵向查找),最终定位到第k个元素的位置。
>> A(9)
ans =
3
若索引超出矩阵边界(例如在4×4矩阵中查找元素A(4,5))会导致错误。然而,在超出范围的位置进行赋值操作,则该矩阵会自动扩展至包含相应元素。
>> A(5,5)=99
A =
16 2 3 13 0
5 11 10 8 0
9 7 6 12 0
4 14 15 1 0
0 0 0 0 99
此外
>> A(2:3,4:5) %第2~3行的第4~5列
ans =
8 0
12 0
>> A(2,:) %第2行所有列
ans =
5 11 10 8 0
字符
字符永远放在单引号里,如果字符包含单引号,就用两个单引号代替
>> Text1='Hello World' %经典中的经典,学到这句话感觉才正式开始
Text1 =
Hello World
在一个矩阵中存储的数据具有相同属性;因此,在尝试将数值与字符串存放在同一矩阵时,请注意使用num2str函数将其转换为字符串形式
>> Text=['I have ',num2str(12),' apples.'] %注意留好空格
Text =
I have 12 apples.
函数
函数名字(输入参数),具体规则用到时候具体查,这里只举个栗子。
>> A=[1 5 9];
>> B=[2 4 7];
>> max(A,B) %同一位置的两个数比较,且只能比两个
ans =
2 5 9
制图
绘制2-D图
步骤:
1. 给定定义域:x=start:step:end
2. 给出函数: y=f(x)
3. 绘制图形:plot()
>> x=0:pi/100:2*pi;
>> y=sin(x);
>> plot(x,y,'r--')
>> xlabel('X');
>> ylabel('Y');
>> title('Plot of the Sine Function')

>> x=0:pi/100:2*pi;
>> y=sin(x);
>> plot(x,y)
>> hold on %hold住一个图像,再叠加另一个图像
>> y2=cos(x);
>> plot(x,y2,'r--')
>> legend('sin','cos') %添加图例

绘制3-D图
步骤:
- 生成网格区域:meshgrid() 函数
- 给出函数: z=f(x,y)
- 绘制图形:surf() 或mesh()
例如
>> a=[1 2];
>> b=[3 4 5];
>> [A,B]=meshgrid(a,b) %a,b均为数组
A =
1 2
1 2
1 2
B =
3 3
4 4
5 5
>> size(a)
ans =
1 2
>> size(b)
ans =
1 3
在本例中, 变量a被定义为一个行向量, 包含两个元素; 变量b则是一个包含三个元素的一维行向量. 当调用meshgrid函数时, 会生成两个二维网格矩阵. 网格矩阵A的第一维大小等于变量b的行数, 即3; 网格矩阵B则由变量a的所有元素按列方向扩展形成. 这种处理方式的主要目的是为了确保生成的两个网格矩阵具有相同的维度和大小, 即均为3×2矩阵. 其中,A中的每个元素对应于坐标点(A_ij, B_ij), 用于在平面上表示该坐标位置.
实例演示
>> t=0:pi/10:2*pi;
>> [X,Y,Z]=cylinder(4*cos(t)); %cylinder(r)函数表示“输出半径为r高度为1的圆柱”
%在一张图上显示几张小图的函数——subplot(m,n,p)其中前两个参数 m,n是将你的图分成 m*n个栅格,p表示这张图占第几个位置(位置编号是一行一行从左到右数的)%
>> subplot(2,2,1);mesh(X);title('X'); %mesh()用于生成网格图
>> subplot(2,2,2);mesh(Y);title('Y');
>> subplot(2,2,3);mesh(Z);title('Z');
>> subplot(2,2,4);surf(X,Y,Z);title('X,Y,Z');%surf()用于生成有颜色填充的图

脚本
编辑脚本:
edit plotrand %自动创建
在编辑器里写代码:
% generate random data from a uniform distribution
% and calculate the mean.plot the data and the mean
n=50;
r=rand(n,1); %产生50行的列向量
%绘制随机数的图
plot(r,'r*')
m=mean(r);
hold on
%画一条从(0,m)到(n,m)的线
plot([0,n],[m,m])
hold off
title('mean of random uniform data')
在命令窗口输入:(或者直接点运行按钮)
plotrand
保存,运行得到结果如下

循环&条件语句
%计算5组随机样本的样本均值和总体均值
nsamples=5;%随机样本组数
npoints=50;%随机数数量
for k=1:nsamples
currentData=rand(npoints,1); %每组样本内生成50*1随机数组
sampleMean(k)=mean(currentData); %对随机数组求均值存储在另外的数组里
end
overallMean=mean(sampleMean) %对存储有各组均值的数组求均值

改进:目前该函数仅能展示最终输出。希望进一步优化该功能,并使程序能够详细记录每一步骤的执行情况。建议将循环体结构进行如下调整:
for k=1:nsamples
interationString=['Interation #',int2str(k)];
sampleMeanNum=['sampleMean=',num2str(sampleMean(k))]
disp(interationString)
disp(sampleMeanNum) %disp()函数只能单参数输入
currentData=rand(npoints,1); %每个样本组内生成50*1随机数组
sampleMean(k)=mean(currentData); %对随机数组求均值存储在另外的数组里
end

条件语句
%当数值不同时输出不同的说明文字
if overallMean<.49
disp('mean is less than expected')
elseif overallMean>.51
disp('mean is greater than expected')
else
disp('mean is within the expected range')
end

帮助
>> doc mean %个人更喜欢doc模式,更美观,还有实例讲解
>> help mean
