怎么用matlab求m文件中的函数的梯度

functionsh=fun1(x,m)sh=sum(x.^2)/2*1e6;y=0;fori=1:length(x)y=y+sum(x(1:i));sh=sh+(y-s... function sh=fun1(x,m)
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
end

这是fun1的函数,m已知(已赋值),x是长度为24的未知行矩阵,怎么求函数的梯度,即对x中所有未知量的偏导数,结果应该是公式组成的行矩阵而不是数
matlab应该是可以求的吧,但是这个涉及到矩阵,不会写,用diff或者jacobian怎么写
写出一个diff,拼凑也行,但是我就是一个的偏导数也算不出来,不知道哪里写错了
展开
zh1bo5
推荐于2017-10-05 · TA获得超过563个赞
知道小有建树答主
回答量:210
采纳率:0%
帮助的人:173万
展开全部
试试,下面的代码袜信,如果xi是实数将eval(['syms ',sx,' ',sm])改为eval(['syms ',sx,' ',sm,' real']),计算结果可能更简洁一些,这里由于不知道你的m值,所以也将其参数化了,你可以将其换为你需要的值。若有问题,可继续追问

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'
allstars52
2013-03-18 · TA获得超过1596个赞
知道小有建树答主
回答量:593
采纳率:75%
帮助的人:591万
展开全部
举个例陵宏子
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
对于补充的游蚂问题,那就没什么函数,你直接用diff求微分神汪埋算了
gradient=[diff(f,x),diff(f,y),diff(f,z)]

参考资料: http://zhidao.baidu.com/question/158734561.html

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式