matlab关于调用函数构成一个含新变量的函数

function [tempX,y,delta_x]=FindNextX(start_x,S)
syms interval
x{1}=start_x;
for j=2:n+1
temp_f=f(x{j-1}+interval*S{1,j});
temp_f=diff(temp_f,interval);
interval=solve('temp_f=0');
x{j}=x{j-1}+interval*S{1,j};
delta_x{j-1}=f(x{j-1})-f(x{j});
end
tempX=x{j};
for j=1:n+1
y{1,j}=x{j};
end
end
本人编一个Powell优化函数,自变量为函数句柄,通过调用优化函数求出目标函数的全域最小点。

问题出在,这里面需要求一个最优步长,所以我想用一个符号变量带入函数句柄构成一个一元函数,然后求导得出最优步长。

程序运行到上面第五行时报错:

Error using mupadmex
Error in MuPAD command: Array sizes must match.
Error in sym/privBinaryOp (line 1694)
Csym = mupadmex(op,args{1}.s, args{2}.s, varargin{:});
Error in sym/plus (line 7)
X = privBinaryOp(A, B, 'symobj::zip', '_plus');
Error in Powell/FindNextX (line 26)
temp_f=f(x{j-1}+interval*S{1,j});
Error in Powell (line 11)
tempX=FindNextX(X{k},S);

请各位帮忙解释一下为什么会出现这种问题以及怎么解决,在此先谢过!
再举个例子吧:

比如Powell调用的函数句柄为f=@(x)(x(1)-2)^4+(x(1)-2*x(2))^2

语句temp_f=f(x{j-1}+interval*S{1,j});中,x{j-1}=[0,3];S{1,j}=[1,0];

interval是一个新的变量,这样带入f的表达式里计算以后变成一个只含有interval的函数temp_f=4*(interval-2)^3+2*(interval+6),

对它求导,就能求出使f值最小的interval=0.5174

想法很理想,运行的时候提示不能将interval加到一个静止的工作空间,求大神来解救

第1个回答  2014-05-15
我有点明白为什么我平时的问题从来没几个有用解答的原因了。自己正是思路清晰的时候,但是别人看你的问题确是一头雾水,这么长的代码本就看得头疼,何况我要明白你的思路那是要看得非常痛苦的。所以,祝你好运。
相似回答