utilities(matlab)—— 多元函数的数值梯度
2016-05-08 10:04
756 查看
多元函数的数值梯度,用于校验多元函数的解析解(或者书写是否有误)的准确性。
简单起见,我们仅以二元函数为例,进行演示,如何进行梯度校验:
一般都能改造为矢量化的运算方式,暂时我还没想到改造方法。不过 computeNumericGradient 还是太丑陋了,一种稍微矢量化的运算方法如下:
function numgrad = computeNumericGradient(J, theta) epsilon = 1e-4; n = size(theta, 1); numgrad = zeros(n, 1); for i = 1:n, tmp1 = theta; tmp2 = theta; tmp1(i) = tmp1(i) + epsilon; tmp2(i) = tmp2(i) - epsilon; numgrad(i) = (J(tmp1) - J(tmp2))/2/epsilon; end
简单起见,我们仅以二元函数为例,进行演示,如何进行梯度校验:
>> f = @(x) x(1)^2+x(2)^3; % 其在 x=[2, 3]' 处的梯度为(解析解)[4, 27] % 采用数值分析的方式,梯度为: >> computeNumbericGradient(f, [2, 3]') ans = 4.0000 27.0000
代码的优化
numgrad = zeros(n, 1); for i = 1:n, numgrad(i) = ...; end
一般都能改造为矢量化的运算方式,暂时我还没想到改造方法。不过 computeNumericGradient 还是太丑陋了,一种稍微矢量化的运算方法如下:
function numgrad = computeNumericGrad(J, theta) n = length(theta); numgrad = zeros(n, 1); epsilon = 1e-4; thetaMinus = bsxfun(@minus, theta, epsilon*eye(n)) ; thetaPlus = bsxfun(@plus, theta, epsilon*eye(n)); for i = 1:n, numgrad(i) = (J(thetaPlus(:, i)) - J(thetaMinus(:, i)))/2/epsilon; end
相关文章推荐
- utilities(matlab)—— visualizes filters(可视化滤波器)
- SDM For Face Alignment 流程介绍及Matlab代码实现之训练篇
- matlab中cell的用法
- utilities(matlab)—— normalize
- matlab处理lvm格式文本
- MATLAB GPU编程基础
- MATLAB2014a中help与参考页中文翻译(用于学习) cat
- win10系统中ASP.NET(VS2013)和MATLAB混编,调用MATLAB生成的.dll文件
- matlab 中的内联函数、匿名函数和函数函数
- 用Matlab的FDAtool生成IIR滤波器参数
- matlab debug
- matlab GUI入门实现字符串传递的功能
- MATLAB的符号运算基础
- SAR成像学习(五)方位向成像及matlab代码解析
- fprintf 输出矩阵到txt的方法
- matlab 字符串处理(单引号、拼接、char)
- matlab struct 结构体
- MATLAB的size()函数的返回值是一个1*2的向量哦,即使参数是向量也是1*2的向量哦!
- 要看懂MATLAB的Help需要积累的英文词汇!
- 深度学习入门级框架MatConvNet环境配置(Ubuntu14.04+Cuda7.5+Cudnn5+Matlab2014a)