Advertisement

matlab笔记-基础知识

阅读量:

Matrces and Arrays
在MATLAB中的一些数据是以多维数组的形式存储的,在这种情况下"matrix"仅仅代表一个二维数组"也可以是一个多维数组;
数组(类似于单行多列的二维结构)创建的方法如下:
(1)a = [1:4] 或 a=[1,2,3,4]
(2)a = [1:3;4:6;7:9] 这样就能生成一个矩阵
(3)z = zeros(5:1) 使用zeros函数生成一个5x1全零矩阵 同样地 ones函数用于生成全一矩阵 rand则用来生成均匀分布的随机数矩阵

在矩阵的操作中:
一个1×1的标量会对整个矩阵的所有元素产生影响,在这种情况下:
对每个元素施加这些运算即为:
对每个元素加2
对每个元素减2
对每个元素乘以2
对每个元素除以2
以及将该标量平方(即^2)。
这些操作都是直接作用于矩阵中的每一个单独元素。
例如,在涉及两个相同大小的矩阵进行相乘时:
如果两矩阵均为A=[1, 2; 3, 4] 和 B=[5, 6; 7, 8],
那么A*B将执行标准的二维数组相乘,
而A.*B则会实现对应位置上的元素相乘。
通过这种方式,
我们可以清晰地区分不同类型的矩阵运算及其作用方式。

在Matlab中,默认情况下所有变量都以双精度浮点型(double)存储。通过调用format命令可设置数值输出时的小数值位数。例如,在计算结果中,默认会显示足够的小数值位以反映其精度水平。此操作仅影响数值在屏幕上的呈现精度而不会修改其实际存储值。

避免修改核心数据。

两个矩阵的连接:[] 其实我们一直在使用[],看两个例子就行了;
A = [a,a]
A =

1 2 3 1 2 3
4 5 6 4 5 6
7 8 10 7 8 10
A = [a; a]
A =

1 2 3
4 5 6
7 8 10
1 2 3
4 5 6
7 8 10
一个行连接,一个列连接,其时我们在定义矩阵时 a=[1,2,3;4,5,6;7,8,9]用的不就是连接吗。

A =

16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
A(4,2) = 14;
A(8)=14;
A(2)=5;
A(1:3,2) =

2
11
7

A(3,:)

ans =

9 7 6 12

B = 0:10:100
B =

0 10 20 30 40 50 60 70 80 90 100
这个定义是步近的,是一个等差数列,d = 10;

当数组下标越界时,例如数组A使用索引(4,5)会导致错误。但是可以通过这种方式进行赋值:A(4,5) = 100; 此时矩阵A会自动扩展,并显示如下内容:

\begin{pmatrix} \end{pmatrix}

这是一个五阶幻方矩阵:
[
[16,2,3,13,0],
[5,11,10,8,0],
[9,7,6,12,0],
[4,14,15,1,100]
]
初始化一个空向量 v = \emptyset ,它具有动态扩展的能力;

此外, 它还可以自动缩减; 例如 v = v(1,1:5); 对我们来说看起来像是一个堆栈或队列。

可以使用 clear 清楚workspace中的所有变量;用 clc 函数清空屏幕;

可以使用 saves *.mat 命令将变量持久化到文件系统,并且即使退出 MATLAB 也不会丢失数据;如果使用 save(filename) 存储当前工作环境中的所有变量到文件中;并且使用 save(filename, variables) 存储指定的变量到文件中。

将变量追加至指定文件中

test.mat中;

通过调用load函数加载实现变量到工作空间中;当然也可以只加载某个变量的方式,并通过 load(filename, variables)来实现;

观察一下字符串的操作方法:
定义一个变量myText为'Hello, world'。
可以通过连接运算符将多个字符串组合成一个长字符串。
生成一个包含多个部分的长字符串longText

num2str(c) 把数字转化成字符串,然后可以和其它字符串进行连接了;

绘图:二维图形可通过 plot 函数生成;该函数具有三个参数供设置;具体信息可参考帮助文档;其中一个是 x 值的设定;通常不会全部连接起来。

逐步推进过程;表示变量间的数学关系,在Matlab软件中会自动生成并标注这些数值点。其中第三个参数用于定义绘图中的线条样式

图表的显示设置中,默认值可以通过交互界面(help plot)查看。为了简便起见,在当前配置下直接记录参数值即可:线的颜色可以在帮助文档列出的颜色选项中进行调整。

选择一种合适的样式来表示数据点之间的关系,在数学中通常认为:由于x通常是离散的变量,在统计学中我们通常假设这些变量在连续型尺度上呈现分布。

该连接路径(也可简称为线路)上可设定其样式。其中该线路上的样式可进行设置。其中该线路上的样式可通过在帮助文档提供的选项中选择的方式来进行配置(包括实线和虚线等多种选择)。此外由于x为一特定值而非其他数值因此在这种情况下配置结果会有所不同若非如此则会得到不同的配置效果

虽然在连续空间中两点可通过直线相连,在处理过程中可能会将这些点转化为离散形式,并且Matlab则可在每个离散点标注不同的符号。例如可使用+号等,并有多种可供选择。

以参数形式进行设置,具体信息可以在文档中找到。总结一下:颜色设置、线型设置以及标记符号设置都可以通过一个字符串参数来指定,并通过类似'r-+'这样的示例来实现。

采用红色实型线条将两个点连结起来,在每个离散点上带有'+'符号。建议自行尝试操作以掌握具体操作步骤;尽量让x保持稳定状态。

步进大一点,这样可以看的比较清楚(LineSpec 如下图所示)。

看下面的图如何画: plot([1,2],[10,11]) 应该比较好画,x1->y10, x2->y11, 但如果是 plot([1,3],[10,11])要如何画

,因为x从1->3分成两份,1->2,2->3,所以(11-10)/2 即为 y 对应于x的步进,具体可以实验一下; 而plot([1,10],

绘制区间[5,5]就是画一条水平线在y=5处。
使用 plot(Y) 会在二维平面上绘制数据点Y相对于其索引的连线图。
若Y为向量,则x轴自动设置为从1延伸至Y元素个数。
若Y为矩阵,则 MATLAB会以列数据对应行索引绘制图形;此时x轴起始范围应设为1

对应于矩阵Y的行数。绘制一个矩阵,并可参考文档中的绘图示例。

生成变量 x 的值域。
绘制 sin(x) 函数图像。
启用 hold on 功能。
绘制 cos(x) 函数图像。
禁用 hold on 功能。

当遇到这种情况时,则可以通过 ezplot('x2-y4') 来绘制图形。其默认绘图范围是 x 和 y 分别从 -2π 到 2π。

用于生成三维图形的函数plot3通常不被广泛采用。以下是一个示例:

plot3用于绘制一条曲线,在三维空间中有时我们需要使用曲面图来观察函数的变化趋势。此时应调用surf函数并辅以等高线图进行分析。
在三维空间中绘制曲线时,请记住只需要知道每个点的(x,y,z)坐标即可。将这些点按照一定的顺序连接起来就能形成一条曲线。
例如给定点集如(1,1,2)、(2,2,3)、(3,3,8),依此类推连接起来就是一条空间曲线。
绘图过程相对复杂的原因是什么呢?这是因为不仅要考虑数据点本身的分布还要确保图形能够清晰地展示出数据的趋势和特征。
为了更好地理解这一过程通常会先生成网格节点然后计算对应的z值最后将所有点按照顺序连接起来形成连续的表面。
对于给定的函数z = x*e^(-x² - y²),其曲面图如下所示:

为了获得这个区域内的数据分布情况,在编程实现时我们选取了x和y两个方向上的等间隔采样点,并将这些采样点依次计算对应的z值以构建空间曲面的数据矩阵。具体来说,在x轴方向上取样点为-2,-1,0,1,2,在y轴方向上同样取样点为-2,-1,0,1,2。通过计算这些离散点处的函数值得到一个完整的二维数组即为z矩阵数据。因此我们获得了一个矩阵形式的z值数据集从而我们可以轻松地绘制出曲面图形。

x =

-2 -1 0 1 2
-2 -1 0 1 2
-2 -1 0 1 2
-2 -1 0 1 2
-2 -1 0 1 2

y =

  • 元素依次递增分别为:-2, \;-\!1,\;0,\;+\!1,\;+\!{ }{ }{ }{ }{ }{ }等。
  • 只是为了将x和y表示为矩阵形式,
  • 主要为了方便得到上述的z矩阵。
    下面是一个具体的实例:

[x, y] = meshgrid(-!{ }{-}:!+{ }{}: +!{ })
其中,
x 和 >> y 被配置为网格形式,
这样就可以直接生成所需的 >> z 矩阵。

x =

-2 -1 0 1 2
-2 -1 0 1 2
-2 -1 0 1 2
-2 -1 0 1 2
-2 -1 0 1 2

y =

-2 -2 -2 -2 -2
-1 -1 -1 -1 -1
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2

z = x.*exp(-x.2-y.2);
surf(x,y,z)
图形如下:

当采样点数量不足时(即点太少),可能导致拟合出的曲面不够清晰或平滑)。具体而言,在上述例子的基础上进一步展开分析(即对上例进行细化)。具体分析如下所述:

x=linspace(-2, 2, 25); % 在x轴上取25点

y=linspace(-2, 2, 25); % 在y轴上取25点

[xx,yy]=meshgrid(x, y); % xx和yy都是21x21的矩阵

zz=xx.*exp(-xx.2-yy.2); % 计算函数值,zz也是21x21的矩阵

surf(xx, yy, zz); % 画出立体曲面图

图形如下:

========================待添加===============================

全部评论 (0)

还没有任何评论哟~