Matlab学习笔记----回归与插值
回归
简单线性回归
简单线性回归是指, 对于一系列的离散数据点, 用一条直线来对其进行模拟.如图
根据直线的解析式我们可以知道, 其实只要找到β0\beta_0β0和β1\beta_1β1两个参数, 直线就被确定下来了. 那么在无数条接近数据点的直线中, 哪一条会是最有可能适合的呢? 这里首先要对误差进行定义, 如图中所示, 真实数据点与回归直线上数据点的距离就是误差, 距离越远误差就越大, 我们的目的就是找一条直线, 使得所有点误差的总和最小. 由于有些点在直线上方, 有些点在直线下方, 因此用y的差值的平方来衡量误差的大小. 可以记为:
SSE=∑iϵi2=∑i(yi−y^i)2S S E=\sum_{i} \epsilon_{i}^{2}=\sum_{i}\left(y_{i}-\widehat{y}_{i}\right)^{2}
SSE=i∑ϵi2=i∑(yi−yi)2
代入直线方程y^i=β0+β1xi\hat{y}_{i}=\beta_{0}+\beta_{1} x_{i}y^i=β0+β1xi 有:
SSE=∑i(yi−β0−β1xi)2S ...
Matlab学习笔记----统计学
统计学
在做数据汇报时, 如果把只是简单罗列数据, 不够直观. 这里学习怎么使用matlab函数来对数据进行统计学的处理.统计学可以分为描述统计学和推论统计学(都是我翻译的)….描述统计学旨在更好的呈现数据的内容, 推论统计学在于研究一个假设问题的成立的可能性.
描述统计学
对于下面的数据表而言, 是很难快速从中获取到关键信息的, 因此有必要对数据的呈现方式进行处理, 比如可以使用图形的方式来呈现数据.
图形总是比图表更加有力量, 这里再介绍几种画图的函数.
对于一组数据, 给出其频率数据 freqy=[1 0 1 0 4 0 1 0 3 1 0 0 1 1], 其中freqy(x)的数值表示数据x的出现次数, 可以分别使用下面的函数进行图形的描述.
12345x = 1:14;freqy = [1 0 1 0 4 0 1 0 3 1 0 0 1 1];subplot(1,3,1); bar(x,freqy); xlim([0 15]);subplot(1,3,2); area(x,freqy); xlim([0 15]);subplot(1,3,3); stem(x,freq ...
Matlab学习笔记----线性方程组与线性系统
线性方程组
算法介绍
上一篇文章中已经介绍了一种matlab求解线性方程组的方式, 由于线性方程组还可以表示成Ax=bA x=bAx=b的矩阵形式, 这里介绍如何通过矩阵的形式来求解线性方程组. 在介绍matlab的函数之前, 先了解一下利用矩阵形式求解方程组的相关算法.
高斯消元法
高斯消元发实际上就是我们初中学习的加减消元法, 通过对整个增广矩阵的一系列初等行变换和列变换, 把系数矩阵转化为行最简矩阵, 从而得出方程组的解向量.
例如方程组{x+2y+z=22x+6y+z=7x+y+4z=3\left\{\begin{array}{r}
x+2 y+z=2 \\
2 x+6 y+z=7 \\
x+y+4 z=3
\end{array}\right.⎩⎨⎧x+2y+z=22x+6y+z=7x+y+4z=3的求解过程大致如下:
[121226171143]\left[\begin{array}{lll|l}
1 & 2 & 1 & 2 \\
2 & 6 & 1 & 7 \\
1 & 1 & 4 & 3
\ ...
Matlab学习笔记----方程式求根
方程式求根
方程式解析解
想要获得方程式的解析解, 首先要能够明确表示方程的解析式. 表示方程式可以通过符号变量来实现, 符号变量是一种新接触的变量, 可以使用syms或者sym来定义.
123syms x % 定义符号变量 x%% 等价于x=sym('x') % 定义符号变量 x
成功定义后, 可以在工作区中发现一个新的变量x, 其类型为 sym
中学数学教我们x+x+x应该等于3x, 此处, 如果定义x是符号变量的话, 在matlab中输入x+x+x 也会得到一个3*x的解析解.
123syms xx + x + x(x + x + x)/4
其运算结果ans的类型也是符号变量. 也就是说, 由符号变量导出的解析式的类型也是符号变量.因此对于解析式y=x2−2x−8y=x^2-2x-8y=x2−2x−8可以通过先定义符号变量x, 再输入方程关系式得到y.
12syms xy = x^2-2*x-8
下面正式介绍如何求方程式的解析解.
中学数学告诉我们, 求方程式的根与求函数零点问题是等价的, 因此一切方程式求根问题, 都可以转化为f(x)=0f(x)=0 ...
Matlab学习笔记----微积分计算
微积分计算
多项式的微积分
多项式微分
matlab中使用向量来表示多项式.即在向量中只存储多项式对应次数项的系数即可. 比如多项式f(x)=x3−2x−5f(x)=x^{3}-2 x-5f(x)=x3−2x−5在MATLAB中可以表示为 p=[1 0 -2 -5 ];
使用polyval函数可以获得多项式函数在某些点处的值, 得到这些函数值后就可以通过plot函数来绘制多项式函数的图像.比如想要绘制9x3−5x2+3x+79 x^{3}-5 x^{2}+3 x+79x3−5x2+3x+7在−2≤x≤5-2 \leq x \leq 5−2≤x≤5处的函数图像, 可以通过执行下面的代码实现.
12345a = [9,-5,3,7]; x = -2:0.01:5;f = polyval(a,x); % f中存储了多项式a在点x处的数值plot(x,f,'LineWidth', 2);xlabel('x'); ylabel('f(x)');set(gca,'FontSize', 14)
画出的图形如下 ...
Matlab学习笔记----图像处理(二)
图像处理(二)
前言
上节内容学习了图像的基本处理方法, 这一节学习一些图像处理上稍微进阶一点的知识. 关于图像处理的知识体系庞大, 需要以后投入很大的精力去研究学习, 这也是我未来学习研究的重点之处.
对于下面的这张rice.png的灰度图像, 如何能够获得关于图像的描述信息 , 也是图像处理的一个很重要的方面. 比如说, 如何求出这张图片中有多少粒米? 这些米中哪个是最大的? 平均大小有又是多少?
在数字图像处理那门课中, 曾经学习过关于图像像素点之间的位置关系, 比如 4连接等等. 那里所提到的位置关系的判断都是基于二值图像的, 所以这里想要使用那里提供的思路的话, 第一步要进行图像的二值化处理. 对图像二值化处理以后, 就可以可以利用图像像素点之间的位置关系来判断哪些像素点的是米, 哪些像素点是背景. 米的像素点都是偏亮的, 因此可以从上到下, 从左到右遍历整个图像, 遇到偏亮的像素点对其进行标记, 并对其相互连接的像素点做同样的标记, 这样就可以标记处整个图像中全部的米.
图像二值化
图像二值化的关键在于如何选取二值化处理的阈值, 对于灰度值在阈值以上的像素点将其灰 ...
Matlab学习笔记----图像处理(一)
图像处理(一)
读取和显示图像
读取图像: imread()
显示图像: imshow()
例如:
123clear, close allI = imread('pout.tif'); %readimshow(I); %show
其中pout.tif为matlab内置图像, 所以不需要外部导入图像就可以执行上面的代码.
执行代码后, I 矩阵存储了pout.tif的灰度值信息,矩阵中每个元素的类型是uint8类型, 范围是 0~255 , 也就是说每个像素需要使用一个字节来存储, 因此, 矩阵的大小就是图像的大小. imshow()函数把矩阵显示成图像的形式.
imshow()的显示结果:
可以使用imageinfo()函数来查看图像的详细信息. 例如执行imageinfo('pout.tif'):
使用imtool()函数可以图像打开时看到图像的像素点灰度信息. 比如执行 imtool('pout.tif')后 , 在弹出窗口中点击红色方框中的按钮, 即可查看每个位置的像素的灰度值信息.
图像处理
既然图像就是矩阵, 那么图像处理实际上就是对矩 ...
Matlab学习笔记----图形界面
图形界面
这一节学习如何使用matlab来撰写图形界面程序. 首先在命令行窗口中输入guide, 打开matlab内置的GUi程序撰写的工具, 该工具类似于C#窗体设计工具一样, 是一个可视化的操作工具. 在快速开始界面选择默认模板, 可以根据需要调整程序的保存位置, 点击确定即可进入UI设计界面.
左侧的按钮列出了可以使用的基本元件. 可以通过设置使其显示相应的名称. 依次点击文件->预设-> GUIDE ->在组件选项板中显示名称, 点击应用, 点击确定, 即可在设计界面中显示组件的名称, 方便初次学习时对组件的识别. 设置中还有许多其它选项, 可以自行探索, 并根据需要做相应的修改. 左侧的组件在初次学习时很难全部介绍到, 这篇文章只做简单的示例. 下面提供一些关于这些组件信息的文档超链接, 可以根据需要进行查阅.
Push Button: 普通按钮
Slider: 滑块
Radio Button: 单选按钮
Check Box: 复选框
Edit Text: 编辑文本
Static Text: 静态文本
Pop-Up Menu: 弹出式菜单
List ...
Matlab学习笔记----进阶绘图
进阶绘图
前言
Matlab的绘图功能要远比上一篇文章中所介绍的强大的多 , 下面一幅图片源自网络 , 大致介绍了在什么情况下适合绘制什么类型的图像 , 在以后的论文中可以根据需要加以参考.
平面绘图进阶
这里介绍一些平面图形的绘制过程中的其他功能 , 所需要的函数大致如下:
loglog: 双对数刻度图
semilogx: 半对数图
semilogy: 半对数图
plotyy: (不推荐)创建具有两个 y 轴的图形
histogram: 直方图
bar: 条形图
pie: 饼图
polarplot: 在极坐标中绘制线条
对数图
1234567891011121314x = logspace(-1,1,100); % 产生范围从10的-1次方到10的1次方中100维的等比数列y = x.^2;subplot(2,2,1);plot(x,y);title('Plot');subplot(2,2,2);semilogx(x,y); % 对x轴取对数title('Semilogx');subplot(2,2,3);semilogy(x,y ...
Matlab学习笔记----初级绘图
初级绘图
在未来的科研工作中, 关于matlab的其他知识可能未必会用到, 但是大概率会用到的就是使用matlab去作图.
matlab是一个很强大的绘图工具, 无论是统计图, 函数图像 还是三维图像都可以很好的呈现出来. matlab实际上使用的是初中学习的描点法来绘制函数图像的, 在坐标系中选择大量的坐标点, 用线把这些点连接起来, 就形成了最终我们想要的函数图像.
在画图的过程中使用最多的是plot()函数, 比如plot(x,y),就可以生成一幅y与x的函数图像, 其中y就是y轴上点的值, x是x轴上点的值, 这两个值应该是维度相同的向量值, 因为matlab需要描点, 描点连线即可形成图像. plot()还有更简单的使用方法, 直接plot(y), 其中y是x 的函数, 也就是说只给出y的向量值, 而缺省x的值, 在这种情况下, matlab生成的图像中, x的值是 0, 1, 2, …
在实际应用中, 我们更多的是采取第一种方式画图的, 第二种方式只是在下面作为例子讲解而已, 很少使用到, 毕竟缺省值不一定使我们想要的.
举个例子:
运行plot(cos(0:pi/20: ...