mdsk.net
当前位置:首页 >> mAtlAB求梯度 >>

mAtlAB求梯度

x=[]; m=[]; for i=1:24 sx=['x',num2str(i)]; sm=['m',num2str(i)]; eval(['syms ',sx,' ',sm]) eval(['x=[x,',sx,'];']); eval(['m=[m,',sm,'];']); end sh=sum(x.^2)/2*1e6; y=0; for i=1:length(x) y=y+sum(x(1:i)); sh=sh+(y-sum(x(1:i))/2)^2*m(i); end jac=jacobian(sh,x); jac'

使用gradient语句即可实现求梯度功能.具体语法如下:[FX, FY] = gradient (F)其中FX表示横向的梯度(相对于原矩阵F而言),FY表示纵向的梯度.示例如下:

2011b可用syms x1 x2f = x1^2+x2^2gradient(f)2009a以下,可用syms x1 x2f = x1^2+x2^2[diff(f,x1);diff(f,x2)]

举个例子syms x y zf=x^2+x*y+z;gradient=jacobian(f,[x,y,z])%求梯度 %gradient = %[ 2*x + y, x, 1]x=-1;y=2;z=3;tiduzhi=eval(gradient) %求在(-1,2,3)的梯度值%%tiduzhi =%% 0 -1 1 对于补充的问题,那就没什么函数,你直接用diff求微分算了gradient=[diff(f,x),diff(f,y),diff(f,z)]

你必须将gradmap转换成图像数据,好像是mat2img(gradmap),具体的函数我记不大清楚了,你查查帮助.

syms xy=(x^2)/2-log(x)grady=jacobian(y)x是n维向量是不合适

建议你把这个做成自定义函数哦.然后在外面对a赋值就行了.function w=hanshu(a)n=length(a);s=0;for k=1:n s=s+a(1,k);endw=0;for i=1:n w=w+a(1,i)*a(1,i)/s;end这个是函数文件,保存的文件名为hanshu.m接下来在m文件或者命令窗口进行调用:如a=[1 2 3 4];w=hanshu(a)

syms x y z f=x^2+x*y+z; gradient=jacobian(f,[x,y,z])%求梯度 %gradient = %[ 2*x + y, x, 1] x=-1;y=2;z=3; tiduzhi=eval(gradient) %求在(-1,2,3)的梯度值%%tiduzhi =%% 0 -1 1

就跟平时求一般的梯度一样,不管是向量还是常量

是产生两幅图一幅是水平方向的梯度fx另一幅是垂直方向的梯度fy大小都和原来图像一样,每个像素对应原来图像的位置

gpfd.net | jtlm.net | ltww.net | wwgt.net | wwfl.net | 网站首页 | 网站地图
All rights reserved Powered by www.mdsk.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com