24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1429  |  回复: 5
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

yg5189

木虫 (小有名气)

[求助] matlab符号函数求导及梯度的问题

比如现有函数
function f=fun(x)
f=2*x(1)*x(1)-x(2)-1;

1.求f对x(1)的导数在[1,2]这点的值
2.求f对x的梯度(也就是分别对x(1),x(2)求导的一个向量)在[1,2]这点的向量(如果是重复使用1中的函数的话那这题可以不用写)

*注意:不是将x(1),x(2)变为x1,x2,因为我实际求的函数有n维,我想用for循环!谢谢
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yg5189

木虫 (小有名气)

引用回帖:
2楼: Originally posted by libralibra at 2012-06-30 23:10:24
matlab求导命令diff调用格式:

diff(函数) , 求的一阶导数;

diff(函数, n) , 求的n阶导数(n是具体整数);

diff(函数,变量名), 求对的偏导数;

谢谢你的回复!
不过我试过diff,好像不行,是不是我用的不对,能不能发一个你写的例子?
3楼2012-07-01 08:57:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 6 个回答

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

感谢参与,应助指数 +1
matlab求导命令diff调用格式:

diff(函数) , 求的一阶导数;

diff(函数, n) , 求的n阶导数(n是具体整数);

diff(函数,变量名), 求对的偏导数;
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2012-06-30 23:10:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

你的问题貌似没啥其他办法
CODE:
clc;
syms x y;
f = 2*x*x-y-1;
dx = diff(f,x);
dy = diff(f,y);
disp('df/dx = ');
disp(dx);
disp('df/dy = ');
disp(dy);
grad = [dx,dy];
dx12 = subs(dx,x,1);
dy12 = subs(dy,y,2);
disp(' ');
disp(['df/dx @ [1,2] = ',num2str(dx12)]);
disp(['gradient(f,x,y) @ [1,2] = ',num2str(dy12)]);

结果:
CODE:
df/dx =
4*x
df/dy =
-1

df/dx @ [1,2] = 4
gradient(f,x,y) @ [1,2] = -1
>>  

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
4楼2012-07-01 18:29:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

★ ★ ★ ★ ★ ★
yg5189: 金币+6, ★★★很有帮助 2012-07-02 09:35:51
抱歉,最后一句写错了
CODE:
grad12 = subs(grad,{x,y},{1,2});
disp(['gradient(f,x,y) @ [1,2] = [',num2str(grad12),']']);

结果
CODE:
df/dx =
4*x
df/dy =
-1

df/dx @ [1,2] = 4
gradient(f,x,y) @ [1,2] = [4 -1]

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
5楼2012-07-01 18:32:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见