Matlab学习
Matlab学习
落魄君子Matlab基础
关于基础的Matlab的基础命令,命令在B站上的郭彥甫老师MATLAB课程+AI整理的,B站链接和油管链接
1.1 计算机使用
1 | % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % |
1.2 向量和矩阵
1 | % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % |
2.1 撰写
1 | %% 1. MATLAB Script 循环绘图 |
2.2 函数
1 | %% Scripts VS Functions |
3.1 字符串、结构体、单元格数组
1 | %% Variables:string,structure,cell(字符串,结构体,单元格) |
3.2 储存数据
1 | %% File Access (储存数据) |
4. 初阶绘图
1 | %% 初阶绘图 |
5.1 高阶绘图
1 | %% 绘制基本图形(普通、半对数和全对数图) |
5.2 填充
1 | %% fill(填充) |
6. GUI
guide
是 MATLAB 早期版本中的图形用户界面 (GUI) 设计工具,它允许用户以可视化方式创建应用程序界面(如按钮、菜单、图表等),并生成相应的 .fig
和 .m
文件来控制界面和响应事件。自 MATLAB R2016a 以来,appdesigner
被推荐为创建应用的工具,它整合了界面设计和代码管理,功能更为强大。
关于 guide
的操作步骤:
启动
guide
通过命令窗口输入guide
,会弹出一个 GUI 设计工具的窗口,用户可以从模板中选择现有布局或创建一个空白布局。设计界面
在图形设计器中,拖放所需的 UI 元素(按钮、标签、输入框等)来构建界面。所有组件都会显示在figure
窗口中。生成
.fig
和.m
文件
保存设计时,guide
会生成两个文件:.fig
:存储界面布局信息。.m
:包含响应事件的回调函数,用来控制界面行为。
编辑代码
在生成的.m
文件中,可以编写对应的回调函数,定义按钮点击、输入等事件触发的操作。可以通过 MATLAB 编辑器修改.m
文件来实现特定功能。
App Designer 的替代功能:
启动 App Designer
通过命令appdesigner
启动,它是创建和编辑 MATLAB 应用程序的现代工具,集成了 GUI 设计和代码开发环境。使用 App Designer
- 图形设计:与
guide
类似,可以拖放组件设计应用程序的用户界面。 - 代码编辑:App Designer 在界面中提供一个集成的代码窗口,可以同时查看和编辑 UI 组件的行为,代码和界面设计紧密结合。
- 图形设计:与
推荐使用 App Designer 的原因:
- 提供了更灵活的设计功能。
- 支持对象属性和事件的更好管理。
- 提供了更现代的 UI 组件。
- 自动生成面向对象的代码,便于管理应用程序。
guide
已不再建议使用,转而推荐使用 appdesigner
,尤其对于新项目或复杂应用开发来说,App Designer 更适合长期维护和扩展。
7. 图像处理
1 | %%% Read and Show An Image(读取和显示影像) |
解释:
imread()
:读取指定路径下的图像文件。imshow()
:显示图像。immultiply()
:对图像进行亮度调整(通过将图像像素值乘以一个系数)。imadd()
:对两幅图像进行加法操作,将其像素值相加。imhist()
:显示图像的灰度值直方图。histeq()
:进行直方图均衡化,提高图像的对比度。imrotate()
:对图像进行旋转操作。imwrite()
:保存图像到指定路径。
8. 图像分割与处理
1 | %%% Image Thresholding (图像二值化) |
解释:
graythresh()
:自动找到图像的灰度阈值,用于二值化。im2bw()
:将图像转换为二值图像。imopen()
:形态学开运算,用于去除噪声或小物体。imsubtract()
:图像减法,通常用于背景减除。bwlabel()
:标记二值图像中的相连对象。label2rgb()
:为标记的对象赋予不同颜色。regionprops()
:提取图像中标记对象的属性(如面积、周长等)。bwselect()
:交互式选择图像中的对象。
9.1 多项式微分和积分
1 | %%% Polynomial Differentiation and Integration %%% |
解释:
polyval(a, x)
:计算多项式 ( f(x) = a_1 x^{n-1} + a_2 x^{n-2} + \ldots + a_n ) 在给定 ( x ) 的值。a
是多项式的系数向量。polyder(p)
:计算多项式的导数。p
是多项式的系数向量。polyint(p, C)
:计算多项式的积分,其中C
是积分常数。p
是多项式的系数向量。polyval(dp, x)
:计算导数或积分后的多项式在给定 ( x ) 处的值。
9.2 数值微分和积分
1 | %%% Numerical Differentiation and Integration %%% |
解释:
数值微分:
- **
diff()
**:用于计算相邻数据点之间的差值。例如,diff(x)
计算x
向量中相邻元素的差值。 - 斜率计算:计算两个点之间的斜率,使用
diff(y) ./ diff(x)
。 - 导数计算:对于连续的 x 值,我们可以使用
diff(y) ./ diff(x)
计算导数。
- **
数值积分:
- 中点法(Midpoint Rule):通过将每个区间的中点的函数值乘以区间宽度
h
来近似积分。 - 梯形法(Trapezoid Rule):使用
trapz()
函数计算积分。它通过将每个区间的梯形面积累加来近似积分。 - 辛普森法(Simpson’s Rule):通过加权平均值来提高积分精度,尤其是对于非线性函数。
- 中点法(Midpoint Rule):通过将每个区间的中点的函数值乘以区间宽度
函数句柄(Function Handles):
- 使用
@
符号创建函数句柄,可以将函数作为参数传递给其他函数,例如integral()
、integral2()
和integral3()
。
- 使用
10. 符号求解和数值根求解
1 | %%% Symbolic Root Finding Approach 解析解(符号求解) %%% |
解释:
符号求解:
- 符号变量定义:
syms
和sym
用于定义符号变量,便于进行符号计算。 - 方程求解:使用
solve()
函数求解符号方程,支持求解单个方程或方程组。 - 符号微分和积分:使用
diff()
和int()
计算函数的导数和积分。
- 符号变量定义:
函数句柄与数值求解:
- **
fsolve()
**:用于求解非线性方程,提供初始猜测值和选项参数。 - **
fzero()
**:用于求解方程的零点,需要提供初始猜测值,并且函数必须穿过 x 轴。 - 多项式根:使用
roots()
函数求解多项式的根。
- **
二分法与牛顿法:
- 这些方法用于数值求解方程的根,具体实现可以参考相关的算法代码。
递归函数:
- 示例展示了如何编写递归函数计算阶乘。
这些内容帮助初学者理解符号计算和数值求解的基本方法,并展示了 MATLAB 中相关功能的使用方法。
11. 线性方程
1 | %%% Linear Equation 线性方程式 %%% |
解释:
高斯消去法(Gaussian Elimination):
- 使用
rref()
函数将增广矩阵化为简化行最简形式,从而求解线性方程组。
- 使用
LU 分解(LU Factorization):
- 使用
lu()
函数将矩阵分解为下三角矩阵L
和上三角矩阵U
,以及置换矩阵P
。LU 分解在解线性方程组和计算矩阵的行列式等方面非常有用。
- 使用
克莱默法则(Cramer’s Method):
- 使用
inv()
函数计算矩阵的逆矩阵来求解线性方程组。注意:矩阵的逆可能不存在,尤其是当矩阵接近奇异时。
- 使用
矩阵条件数(Matrix Condition Number):
- 使用
cond()
函数计算矩阵的条件数,条件数高表示矩阵可能接近奇异,可能影响求解的稳定性。
- 使用
特征值和特征向量(Eigenvalues and Eigenvectors):
- 使用
eig()
函数计算矩阵的特征值和特征向量,特征值和特征向量在许多线性代数问题中都非常重要。
- 使用
矩阵指数(Matrix Exponential):
- 使用
expm()
函数计算矩阵的指数,用于解决涉及微分方程的线性系统。结果可视化为三维图形。
- 使用
12. 统计功能及其应用
1 | %%% Statistics 统计 %%% |
解释:
频数图(Bar, Area, Stem):
bar(x, freqy)
:绘制条形图,其中x
表示数据点,freqy
表示每个数据点的频数。area(x, freqy)
:绘制面积图,以展示数据的分布。stem(x, freqy)
:绘制离散数据的垂直线图,用于显示每个数据点的频数。
箱线图(Boxplot):
boxplot(marks)
:绘制箱线图,展示数据的分布特征,包括中位数、四分位数和异常值。prctile(marks, [25 50 75])
:计算数据的25%、50%(中位数)、75%四分位数。
偏度(Skewness)和峰度(Kurtosis):
skewness(X)
:计算数据的偏度,描述数据分布的对称性。kurtosis(X)
:计算数据的峰度,描述数据分布的尖峭程度。偏度和峰度帮助分析数据的分布形态。
绘制不同分布的箱线图:
boxplot(X, {'Right-skewed', 'Symmetric', 'Left-skewed'})
:展示三种不同偏度的分布,帮助理解偏度对数据分布的影响。
13. 简单线性回归与插值方法
1. 简单线性回归
多项式曲线拟合(Polynomial Curve Fitting):
使用 polyfit
函数进行多项式拟合。例如,进行线性回归:
1 | x = [-1.2 -0.5 0.3 0.9 1.8 2.6 3.0 3.5]; |
线性相关性分析:
检验 x
和 y
是否存在线性关系:
1 | x = [-1.2 -0.5 0.3 0.9 1.8 2.6 3.0 3.5]; |
高阶多项式回归:
进行不同阶数的多项式回归:
1 | x = [-1.2 -0.5 0.3 0.9 1.8 2.6 3.0 3.5]; |
多变量回归:
进行多元线性回归分析:
1 | load carsmall; |
2. 内插与回归
线性内插(Linear Interpolation):
1 | x = linspace(0, 2*pi, 40); |
立方样条与赫尔米特多项式:
1 | x = -3:3; |
二维插值(interp2):
1 | xx = -2:.5:2; |
总结
- 线性回归:用
polyfit
和polyval
进行多项式拟合。检查线性相关性使用corrcoef
。 - 插值:用
interp1
进行一维内插,用spline
进行平滑内插。对于二维数据,使用interp2
进行内插,并比较不同插值方法(线性、立方等)的效果。