【问题标题】:Matlab function that returns gradient返回梯度的Matlab函数
【发布时间】:2014-11-23 18:25:54
【问题描述】:

我正在尝试创建一个具有两个输出参数的函数: 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);

【问题讨论】:

  • 你是如何尝试使用这个功能的?你能给我们举个例子来说明你是如何运行它的吗?

标签: matlab gradient


【解决方案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 是您要评估的点的向量或矩阵。

【讨论】:

  • 是的。这是有道理的。这是另一个经典案例,提供答案的人比 OP 他/她自己更了解 OP 的要求和需求,哈哈。
【解决方案2】:

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

我认为您的意思是改用gradient(y)。尝试替换您的 gradient 调用,使其正常运行:

gra = gradient(y);

【讨论】:

  • 感谢您的快速回复!但我的问题是,我是否可以创建一个函数,该函数也将梯度作为函数返回,并且尚未评估?
  • @vardump - 在此之前,我需要更多关于 f1 工作原理的详细信息。 x 到底是什么?我没有看到任何功能评估。你也应该提供f 吗?
  • 对于f1我有两个用例:1.调用y = f1(5) 2.调用[grad, grad] = y(0),只是为了得到渐变功能。稍后我想打电话给grad(123)。查看编辑
  • @vardump - f 是什么?你不提供它与你的功能。仅仅是f(x) = x^2吗?你还是没跟我说清楚。
  • 当然对于x^2 这没有意义。我希望它适用于任何功能,但一个例子是:exp(-(x^2)/2) + x^2。当然,我可以手动推导它,但我目前正在学习 Matlab 并想使用它的强大功能。
猜你喜欢
  • 2011-10-28
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多