
算法系列
程序猿老王。
好记性不如烂笔头
展开
-
【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学习手记】非线性方程组求解:牛顿法
功能:牛顿法求解非线性方程组。调用示例 命令行输入:[r, n]=mul_Newton([0 0 0], 1e-5) 得到结果:r = 0.4996 -0.0900 -0.5259n = 5源码function [r, n] = mul_Newton(x0, eps)% 牛顿法求解非线性方程组% 输入参数说明:% 初始迭代...原创 2018-08-19 20:38:42 · 16489 阅读 · 20 评论 -
【Matlab学习手记】非线性方程求解:二分法
功能:二分法求解非线性方程的一个解,采用递归的方式。源码function root = HalfInterval_Search(fun, a, b, eps)% 二分法求函数fun在区间[a b]上的一个零点% 输入参数说明:% fun --- 目标函数% a --- 搜索区间的下界% b --- 搜索区间的上界% eps --- 区间的最小阀值长度% 输出参数说明...原创 2018-08-19 20:38:58 · 6085 阅读 · 0 评论 -
【Matlab学习手记】非线性方程求解:黄金分割法
功能:黄金分割法求解非线性方程的一个根。源码function root = Gold_Search(fun, a, b, eps)% 黄金分割法求函数fun在区间[a b]上的一个零点% 输入参数说明:% fun --- 目标函数% a --- 搜索区间的下界% b --- 搜索区间的上界% eps --- 区间的最小阀值长度% 输出参数说明:% root -...原创 2018-08-19 20:39:11 · 2710 阅读 · 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 评论 -
Matlab学习手记——对超松弛迭代法求解线性方程组
功能: 对超松弛迭代法求解线性方程组。function [x, k] = LinearEquations_SSOR(A, b, x0, MaxIters, err, w)%{函数功能:对超松弛迭代法求解线性方程组;输入: A:系数矩阵 b:常数矩阵; x0:初始解; MaxIters:最大迭代次数; err:精度阈值; w:松弛因子;输出: x:近似解;...翻译 2018-08-15 08:48:48 · 16186 阅读 · 13 评论 -
【算法系列】C#直线拟合及相关系数代码
函数功能:直线拟合及相关系数计算。代码class FunctionMethod { public static void LinearFit(double[] x, double[] y, out double a, out double b) { double xsum = 0; double ysu...原创 2018-08-19 20:40:40 · 9667 阅读 · 7 评论 -
Matlab学习手记——Matlab非线性数据拟合:高斯牛顿法
函数功能:高斯牛顿法实现非线性数据拟合。代码clear;clc;M=1000;Te=20;% 模型t=Te*(1:M)';load noise; % 噪音可自己添加Et1=0.4*exp(-t/50)+0.6*exp(-t/200);Et2=0.4*exp(-(t/50).^2)+0.6*exp(-t/200);Et3=0.3*exp(-t/50)+0.4*exp(-t/...原创 2018-08-17 09:00:48 · 7499 阅读 · 6 评论 -
Matlab学习手记——非线性方程组求解:牛顿下山法
功能:牛顿下山法求解非线性方程组。牛顿下山法function [x, n] = NonLinearEquations_NewtonDown(x0, err)%{函数功能:牛顿下山法求解非线性方程组的解;输入: x0:初始值; err:精度阈值;输出: x:近似解; n:迭代次数;示例:clear; clc;[r, n] = NonLinearEquations...原创 2018-08-16 08:54:09 · 6966 阅读 · 15 评论 -
【Matlab学习手记】进退法和黄金分割法求极小值
功能:进退法和黄金分割法确定极小值。源码function result = Advance_Retreat_Gold(func, t0, step, eps)% 进退法和黄金分割法确定极小值%=======================================================================% 输入:% fun:目标函数;% t0:进退...原创 2018-08-19 20:38:27 · 4661 阅读 · 0 评论 -
【Matlab学习手记】拟牛顿法BFGS
功能:拟牛顿法BFGS实例源码。源码function x = Opt_BFGS(x0, Iter_max, eps)% BFGS法确定多个变量的最优解%=======================================================================% 输入:% x0:当前点;% Iter_max:最大迭代次数;% eps:黄金分割...原创 2018-08-18 09:58:19 · 15970 阅读 · 9 评论 -
【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 评论 -
【WPF学习手记】C#实现高斯拟合的模拟退火算法
算法功能:实现高斯拟合,可根据需要修改。源码public static double PeakPicker(double[] xfit, double[] yfit) { // 定义子函数 ************************* // 数组拷贝 void ArrCopy(double[] d...原创 2018-08-11 09:51:59 · 2354 阅读 · 0 评论 -
【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 [sol, yhat] = PLS_Regress(x, y)% 函数功能:偏最小二乘回归% =============================================================% 输入:% x:自变量;% y:因变量;% 输出:% sol:回归系数,每一列是一个回...原创 2018-08-18 09:57:35 · 3591 阅读 · 6 评论 -
【Matlab学习手记】离散差分进化法求最小值
求函数f(x,y)=-((x^2+y-1)+(x+y^2-7)^2)/200+10的最大值,x和y取值区间[-100,100];经过下面的优化过程,得到结果:x=-2,y=-3,最大值为10。原理源码%%%%%%%%%%%%% 离散差分进化算法求函数极值 %%%%%%%%%%%%%%%%%%%%%%%%%% 初始化 %%%%%%%%%%%%%clear;clc;...原创 2018-08-18 09:57:46 · 3590 阅读 · 0 评论 -
【Matlab学习手记】粒子群算法求最小值
《智能优化算法及其MATLAB实例》系列。理论 1995年,美国社会心理学家James Kennedy和电气工程师Russell Eberhart共同提出了粒子群算法(Particle Swarm Optimization,PSO),该算法的提出是受对鸟类群体行为进行建模与仿真的研究结果的启发。 粒子群优化算法通过个体间的协作与竞争,实现复杂空间最优解的搜索,将群体中的个体视...原创 2018-08-18 09:58:03 · 7315 阅读 · 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 评论