Matlab学习手记
用实例代码学习Matlab编程;
学会用Matlab绘制各种图形;
学会用Matlab编写各种算法;
学会用Matlab制作GUI软件;
程序猿老王。
好记性不如烂笔头
展开
-
【Matlab学习手记】Matlab多个坐标轴实现技巧
Matlab2016B版本提供了一个plotyy函数,可以提供左右两个纵坐标轴,如果需要三个纵坐标轴甚至多个,怎么做,这里提供一种简单的技巧,效果如下: 这种方式可以修改任何一条线的属性和坐标轴属性,极为方便。代码如下:clear; clc;x=0:0.1:2*pi;y1 = x.^2;y2 = sin(x);y3 = 5*y2;h1 = axes...原创 2018-06-25 09:21:28 · 30701 阅读 · 7 评论 -
【Matlab学习手记】图像分割:区域生长
区域生长的基本思想是将具有相似性质的像素集合起来构成一个区域,实质是将具有相似特性的像素元素连接成区域。具体实现时,先在分割的区域找一个种子像素作为生长的起点,再将种子像素周围邻域中与种子像素有相同或相似性质的像素(根据某种事先确定的生长准则确定)合并到种子像素所在区域中,然后将这些新增的像素点作为新的生长点重复上面的过程。三个问题:1. 选择或确定一组正确代表所需区域的种子像素;...原创 2018-08-18 09:54:54 · 11453 阅读 · 4 评论 -
【Matlab学习手记】区域边界拾取
Matlab提供了bwboundaries函数确定区域边界。测试图代码:function [Pm, Fm] = My_RegionBoundary(Jm)% 区域生长后确定区域的边界% 输入:% Jm:感兴趣区域值为1,其余部分值为零% 输出:% Pm:边界坐标,第一列为横向,第二列为纵向% Fm:边界点[xlen, ylen] = size(Jm);...原创 2018-08-18 09:56:20 · 2213 阅读 · 0 评论 -
【Matlab学习手记】基于最小二乘的非线性拟合
用一个实例来理解基于最小二乘的非线性拟合问题。原理部分代码部分clear; clc;M = 2000;t = 0.3 * (1 : M)';rng('default');ratio = 10;noise = ratio * randn(M, 1);Et = 1000 * exp(-t / 50) + 10 + noise;p1 = LSFittingT2Free(t...原创 2019-06-18 14:16:18 · 6929 阅读 · 3 评论 -
【Matlab学习手记】多元线性回归
介绍多元线性回归的三种方法:regress、左除、Adagrad梯度下降法。regress是Matlab内置函数,用于数据回归分析;左除这个思想很有用,可以解决很多问题,多元线性回归、多项式回归都可以用到这个方法;Adagrad是一种梯度方法。clear; clc;% 多元线性回归模型% z = w1 * x + w2 * y + w3% z = 5 * x + 10 * ...原创 2019-08-16 10:29:46 · 2987 阅读 · 0 评论 -
【Matlab学习手记】简单的印章提取
简单的印章提取程序网上随便找了一幅图,效果如下:原理:主要根据R、G、B三个颜色分量的差异来实现。这个程序比较简单,要求印章颜色和背景文字颜色有明显差异,这样方便根据RGB的差异来提取目标信息。clear; clc;imData = imread('test.jpg');[m, n, r] = size(imData);reData = imData;for i =...原创 2019-12-01 13:39:14 · 2294 阅读 · 0 评论 -
【Matlab学习手记】梯度下降法
用一个实例来理解两种梯度下降方法。clear; clc;%% 一元函数梯度下降法% 示例:f(x) = min{(x - 1)^2}% 梯度:g(x) = 2 * (x - 1)yita = 0.25; % 学习率,一般设置小一点,否则容易在最小值附近震荡或者不收敛x1 = -5 : 0.1 : 5;y1 = (x1 - 1).^2;iteMax = 1000;xI...原创 2019-08-14 16:33:51 · 1632 阅读 · 4 评论 -
【Matlab学习手记】BP神经网络数据滚动预测
BP神经网络滚动预测未来数据:将预测的下一年数据作为已知数据继续预测下一年。代码clear; clc;data = [0 0.0252 0.0550 0.1104 0.1480 0.0252 0.0550 0.1104 0.1480 0.2111 0.0550 0.1104 0.14...原创 2019-06-05 23:46:21 · 11827 阅读 · 46 评论 -
【Matlab学习手记】绘制带箭头直线
Matlab提供了绘制箭头的函数,如以下函数及效果图,可见,此函数绘制的范围限定在[0, 1]之间,如果要在指定位置绘制箭头,则此方法不可取,需要重新定义绘图函数,将实际坐标换算到[0, 1]之间。annotation('arrow', [0, 1], [0, 1]);源代码function PlotLineArrow(obj, x, y, markerColor, line...原创 2019-08-14 15:07:56 · 14347 阅读 · 0 评论 -
【Matlab学习手记】Matlab积分问题
一个程序彻底搞懂Matlab的数值积分、符号积分问题。数值积分问题,给定被积分函数和积分上下限,使用 integral 函数得到积分值; 符号积分问题,通常结果是解析解,即需要知道被积分函数的原函数表达式;如果原函数未知或者表达形式过于复杂(同样没有明确的表达式),可以自定义一个积分函数(给定一个积分区间,返回一个积分值)来简短表达; 一重积分问题本质上得到的是面积,当然可以用积分定义来计...原创 2019-07-26 14:57:31 · 1579 阅读 · 0 评论 -
【Matlab学习手记】Matlab绘制Bezier曲线
原理部分 Bezier曲线由一系列控制点决定,每个点的坐标都是控制点坐标的线性组合,权系数随时间变化,权系数之和为1(0到1之间)。假设有四个控制点P0,P1,P2和P3,那么Bezier曲线可以表示为:J30(t) = (1 - t)^3J31(t) = 3 * (1 - t)^2 * tJ32(t) = 3 * (1 - t) * t^2J33(t) = t^3P(t)...原创 2019-07-25 14:44:36 · 3165 阅读 · 0 评论 -
【Matlab学习手记】二维高斯曲面拟合法定位光斑中心
1. 高斯曲面拟合法原理 终端探测器探测到的光斑灰度分布函数可近似看做高斯分布,因此可以通过二维高斯函数进行拟合,模型表示为: 效果图: 为了方便计算,做一步变换,两边取对数,得到: 展开并进一步变形为: 求解问题变为二元二次多项式拟合问题。2. 问题解法 此问题一般基于最小二乘来求解,这里提供两种思路,第...原创 2019-06-02 21:12:15 · 15958 阅读 · 8 评论 -
【Matlab学习手记】csv和xlsx格式互转
简单的几句代码实现 csv 格式和 xlsx 格式之间互转。clear; clc;files = dir('*.csv'); % 相对路径fileNumber = length(files);for i = 1 : fileNumber fileName = files(i).name; % 文件名,不带路径 [~, ~, context] = xlsread(...原创 2019-05-24 14:28:44 · 6984 阅读 · 2 评论 -
【Matlab学习手记】图片随指定路径运动
效果图:代码:clear; clc;x = - 5 : 0.5 : 5;y = x.^2;minX = min(x);maxX = max(x);minY = min(y);maxY = max(y);h1 = axes('position', [0.1, 0.1, 0.8, 0.8]);plot(x, y);xlim([minX, maxX]);ylim([mi...原创 2019-04-19 21:21:09 · 2131 阅读 · 5 评论 -
【Matlab学习手记】Matlab裁剪三维曲面图
目的:实现三维曲面图的裁剪,即选择显示特定曲面。效果图: 测试代码:clear; clc;n = 1000;[x, y, z] = peaks(n);subplot(1, 2, 1)surf(x, y, z);shading interpview(0, 90)for i = 1:n% for j = 1:n% if x(i, j)...原创 2019-03-29 20:34:21 · 3414 阅读 · 0 评论 -
【Matlab学习手记】Matlab通过OLE方式操作Excel
一个实例搞懂Matlab通过OLE方式操作Excel,下面的这些代码都要自己输入,Matlab不会给出提示,不会自动补全,可以百度OLE方式访问Excel的代码,基本上所有的语言都是通用的,或者直接用Excel的录制宏来获悉未知的代码。function Matlab_Excel% Matlab 操作 Excel 文档filepath = [pwd, '\测试.xlsx']; ...原创 2018-12-04 21:10:03 · 1960 阅读 · 0 评论 -
【Matlab学习手记】字符串分割
Matlab对字符串的分割,以 regexp 和 textscan 函数为例来说明。用 “=” 分割的结果是两部分,包含空格。文本内容:第529次采集 流量CH1 温度CH2 压差CH72016/7/22 9:54:50 4.3985 23.588 288.2499WholeText=importdata('test.txt');C1=textscan(WholeTe...原创 2018-11-29 14:29:05 · 2403 阅读 · 0 评论 -
【Matlab学习手记】三维散点插值成曲面
问题:已知一系列三维的散点坐标,得到一个经过这些散点的曲面图。 实例 构造一个曲面分布,从曲面上取一些特征点,然后依据这些特征点进行二维插值,用到了griddata函数,提取的特征点越多,插值得到的曲面和原始曲面越接近。clear; clc;[X, Y, Z] = peaks(30);position = [13,26; 20,24...原创 2018-11-02 09:23:53 · 25117 阅读 · 4 评论 -
【Matlab学习手记】自定义Colormap
Colormap即色图,不同的颜色表征不同的数值,常用于绘制伪彩图。 目前新版本默认的colormap是parula,老版本默认的是jet。 本质上来说,colormap是一个N*3的数组,表征的是R、G、B值,比如: 另外,Matlab提供了色图编辑器从Figure的编辑→颜色图打开: 颜色条下方的滑块,可以单...原创 2018-10-25 09:49:36 · 9473 阅读 · 0 评论 -
【Matlab学习手记】特殊曲线绘图:颜色渐变、标记大小渐变
效果图参考代码clear; clc;x = 0 : 0.1 : 2*pi;y = sin(x);sizeMarker = linspace(1, 100, length(x)); % 比0大,值越大标记越大colorMarker = y; % 颜色渐变subplot(1,2,1)scatter(x, y, sizeMarker, colorMarker, 'o', ...原创 2018-10-19 16:03:09 · 16082 阅读 · 0 评论 -
【Matlab学习手记】椭圆拟合
熟悉 Matlab 函数 nlinfit 使用。椭圆拟合方程:结果图:程序:clear; clc;F = @(p, x) p(1) * x(:, 1) .^ 2 + p(2) * x(:, 1) .* x(:, 2) + p(3) * x(:, 2) .^2 + p(4);% 离散数据点x = [6.3246, 6.9379, 7.0875, 7.9242, 7.8...原创 2018-10-16 17:00:45 · 14809 阅读 · 8 评论 -
【Matlab学习手记】ELM分类
实例:极限学习机(Extreme Learning Machine, ELM)在分类问题中的应用研究训练集正确率Accuracy = 90.6%(453/500)测试集正确率Accuracy = 82.6087%(57/69)病例总数:569 良性:357 恶性:212训练集病例总数:500 良性:316 恶性:184测试集病例总数:69 良性:41 恶性:28...原创 2018-08-11 09:51:31 · 9519 阅读 · 164 评论 -
Matlab学习手记——ELM数据回归拟合
极限学习机(Extreme Learning Machine, ELM)在回归拟合问题中的应用研究。代码function ELM_Regression()clear; clc;% 导入数据load data_regression.mat input output% 随机生成训练集、测试集k = randperm(size(input,1));% 训练集—1900个...原创 2018-08-13 08:38:55 · 4906 阅读 · 56 评论 -
【Matlab学习手记】BP神经网络数据预测
目的:利用BP神经网络进行数据预测。原理代码clear; clc;TestSamNum = 20; % 学习样本数量ForcastSamNum = 2; % 预测样本数量HiddenUnitNum=8; % 隐含层InDim = 3; % 输入层OutDi...原创 2018-08-11 09:50:55 · 62432 阅读 · 108 评论 -
【Matlab学习手记】基于带动量项的BP神经网络语音识别
正确率0.7699 1.0000 0.9275 0.9760代码clear; clc;% 加载四类语音信号load data1 c1load data2 c2load data3 c3load data4 c4% 四个特征信号矩阵合成一个矩阵data(1:500, :) = c1(1:500, :);data(501:1000, :) = ...原创 2018-08-11 09:51:05 · 2137 阅读 · 0 评论 -
【Matlab学习手记】三次样条插值源代码
实现三次样条插值函数,自然边界条件,程序移植性强。源码function yy = Interpolation_Spline0(x, y, xx)%{函数功能:三次样条插值法;输入: x:已知点横坐标; y:已知点纵坐标; xx:插值点;输出: yy:插值点的函数值;示例:clear; clc;x = 0 : 0.2 : 2;y = sin(x);xx ...原创 2018-08-09 14:24:53 · 22402 阅读 · 14 评论 -
【Matlab学习手记】sym8小波滤波
提供sym8小波,四层全局软阈值滤波源代码,采用Matlab语言编写,可移植性强。源代码clear;clc; load leleccum; indx = 1:3450; noisez = leleccum(indx); wname = 'sym8'; lev = 4; [c,l] = wavedec(noisez,lev,wname); [Lo_D,...原创 2018-08-09 14:35:58 · 12402 阅读 · 1 评论 -
【Matlab学习手记】随机游走法求解函数极值
基本原理1. 给定初始迭代点 x,初次行走步长 λ;2. 初始化合适的迭代控制次数N,k = 1;3. 当 k < N 时,随机生成一个(-1,1)之间的 D 维向量 u,并标准化:u = u / norm(u),更新初始点:x1 = x + λ* u,完成第一步行走;4. 计算函数值,如果 f(x1) < f(x),即重置 k = 1,返回 2;否则返回 3;5. ...原创 2018-08-11 09:53:25 · 3217 阅读 · 1 评论 -
【Matlab学习手记】拟牛顿型信頼域方法求解函数极值
信頼域子问题求解过程,包含Hessian矩阵计算啊,这里采用拟牛顿法(BFGS)来计算近似的Hessian矩阵。 例子比较简单: f = 100*(x(1)^2 - x(2))^2 + (x(1) - 1)^2; 很容易看出,此函数有唯一一个全局极小值点[1, 1],下面给出拟牛顿信頼域法的计算过程,给一个偏离很远的初始值[-100, 100],经过205次迭代收敛到[1...原创 2018-08-12 10:29:10 · 2033 阅读 · 1 评论 -
【Matlab学习手记】非线性拟合的信頼域方法
信頼域原理 常规的线搜索方法,选定一个初始点,产生一个位移方向(搜索方向,如梯度方向),然后确定位移长度(搜索长度),以此来更新初始点位置。 信頼域方法,给定一个“信頼域半径”作为位移长度,并以当前迭代点为中心,以此“上界”为半径确定一个称之为“信頼域”的闭球区域;然后通过求解“信頼域子问题”(目标函数的二次近似模型)的最优解来确定“候选位移”;若候选位移能使目标函数有充分的下降量...原创 2018-08-12 10:28:37 · 1073 阅读 · 0 评论 -
【Matlab学习手记】线搜索Goldstein准则
代码function [lam, newxk, fk, newfk] = Opt_Goldstein(xk, dk)a = 0; % 搜索下界b = 10; % 搜索上界lam = 1; % 初始点c1 = 0.25;c2 = 0.75;t = 2;% 循环求解最佳的步长 while a < b % 搜索步长满足 Goldstein 第...原创 2018-08-11 10:03:30 · 4861 阅读 · 29 评论 -
【Matlab学习手记】偏最小二乘回归
偏最小二乘程序,可移植性强。function [T, P, U, Q, B, W] = PLS(X, Y)% 函数功能:偏最小二乘% ===============================================================% 输入:% X:自变量;% Y:因变量;% TolY:收敛条件,默认为1e-10;% 输出:% T:...原创 2018-08-11 10:01:13 · 2638 阅读 · 3 评论 -
【Matlab学习手记】拉格朗日插值
源码function [y0, coef] = Interpolation_Lagrange(x, y, x0)%{函数功能:拉格朗日插值法;输入: x:已知点横坐标; y:已知点纵坐标; x0:未知点横坐标;输出: y0:未知点纵坐标; coef:插值系数;示例:clear; clc;x = 0 : 0.2 : 2;y = sin(x);x0 = ...原创 2018-08-11 10:00:36 · 3174 阅读 · 0 评论 -
Matlab学习手记——牛顿型信頼域法求解无约束问题
牛顿型信赖域方法求解无约束问题: min f(x)。function x = Opt_TrustRegionNewton(x0, err, MaxIter)%{函数功能:牛顿型信赖域方法求解无约束问题: min f(x);输入: x0:初始点; err:梯度误差阈值; MaxIter:最大迭代次数;输出: x:最小值点;调用格式:clear; clc;x =...翻译 2018-08-12 10:30:06 · 2469 阅读 · 0 评论 -
Matlab学习手记——非线性拟合方法:压缩因子粒子群算法
目的:采用压缩因子粒子群算法实现双指数拟合。function x_opt = PSO_ExpFit2(t, Et)%{函数功能:压缩因子粒子群算法实现指数拟合:y = a1*exp(-x/b1) + a2*exp(-x/b2) + c输入: t:自变量; Et:因变量;输出: x_opt:最优解;调用格式:clear;clc;t = 0.2*(1:3000)';d...原创 2018-08-14 09:29:45 · 3155 阅读 · 2 评论 -
Matlab学习手记——线搜索Wolfe准则
测试:>> [alpha, newxk, fk, newfk] = Opt_Wolfe([0 0]', [1 0]')alpha = 0.1250newxk = 0.1250 0fk = 1newfk = 0.7900 代码如下:function [alpha, newxk, fk, newfk] = Opt_W...翻译 2018-08-14 09:29:58 · 10722 阅读 · 2 评论 -
Matlab学习手记——进退法确定搜索区间
功能:给定一个初始点,确定一个极小值区间。function [lb, ub] = Opt_AdvanceRetreat(fun, x0, h0)%{函数功能:进退法确定搜索包含最小值的区间输入: fun:目标函数句柄; x0:初始点; h0:初始步长,默认值为0.0125;输出: lb:搜索区间左端点; rb:搜索区间右端点;调用格式:clear; clc;...原创 2018-08-14 09:30:10 · 7694 阅读 · 0 评论 -
Matlab学习手记——旅行商TSP问题:模拟退火法
原理结果 坐标文件5.6500000e+02 5.7500000e+02 2.5000000e+01 1.8500000e+02 3.4500000e+02 7.5000000e+02 9.4500000e+02 6.8500000e+02 8.4500000e+02 6.5500000e+02 8.8000000e+0...原创 2018-08-15 08:44:00 · 2871 阅读 · 0 评论 -
Matlab学习手记——灰色预测
结果图源码function pre_data = Gray_Prediction(data, m)%{函数功能:灰色预测;输入: data:参考数据,一行; m:预测点数;输出: pre_data:预测数据;示例:clear; clc;% data = [89677, 99215, 109655, 120333, 135823, 159878, 182321, ...翻译 2018-08-15 08:43:31 · 3382 阅读 · 2 评论 -
Matlab学习手记——黄金分割法求极小值
功能:黄金分割法求函数极小值点。源码function [xo, fo] = MinValue_Gold(func, a, b, eps, MaxIter)%{函数功能:黄金分割法确定最小值点,func在[a, b]上为单峰;输入: func:目标函数句柄; a:左端点值; b:右端点值; eps:精度,默认精度1e-6; MaxIter:迭代次数;输出: ...原创 2018-08-15 08:48:12 · 11474 阅读 · 0 评论