返回渐变的Matlab函数

时间:2014-11-23 18:25:54

标签: matlab gradient

我试图创建一个有两个输出参数的函数:  1.计算的f(x)值  2.渐变

但它一直在递归地呼唤自己。 我做错了什么?

function [y, gra] = f1(x)
y = x^2
syms z
gra = gradient(f1(z))

感谢。

编辑: 现在我有了这个:

function [y, gra] = f1(x)
y = x^2
if nargout == 2
    syms x
    gra = gradient(f1(x))
end

编辑2:

我试图使用以下功能:

[y, grad] = f1(5);
y_derived = grad(10);

2 个答案:

答案 0 :(得分:1)

那是因为gradient中的参数是你的函数名f1(z)。因此,当原始函数也被称为f1时,它会一直调用f1,因此函数会一直调用自己,直到达到递归限制。

我认为你的意思是改为gradient(y)。尝试替换您的gradient电话,以便它正在执行:

gra = gradient(y);

答案 1 :(得分:1)

我认为这就是你想要做的事情:

function [y, gra] = f1(x)
f=@(x) x^2;

y=f(x); %// calculate y

syms z %// initialise symbolic variable
gra=gradient(f(z),z); %// symbolic differentiation

这将返回g作为符号函数。要计算一个值,您可以使用subs(gra,z,123),或者,如果您要多次评估它,请gradFunc=matlabFunction(gra)然后gradFunc(v) v,其中{{1}}是一个向量或矩阵你要评估的分数。