我试图创建一个有两个输出参数的函数: 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);
答案 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}}是一个向量或矩阵你要评估的分数。