嵌套函数的Gnuplot拟合

嵌套函数的Gnuplot拟合,gnuplot,model-fitting,Gnuplot,Model Fitting,gnuplot中适合函数f(x)具有下一个表单的正确方法是什么 f(x) = A*exp(x - B*f(x)) 我尝试将其作为任何其他函数使用: fit f(x) "data.txt" via A,B 输出只是一句话:“堆栈溢出” 我甚至不知道如何寻找这个话题,所以任何帮助都将不胜感激 这种函数是如何调用的?嵌套的?递归的?含蓄的 感谢这不仅在拟合方面失败,而且在绘图方面也失败了。您必须写下f(x)的显式形式,否则gnuplot将循环它,直到它达到递归极限。一种方法是使用不同的名称: f

gnuplot中适合函数
f(x)
具有下一个表单的正确方法是什么

f(x) = A*exp(x - B*f(x))
我尝试将其作为任何其他函数使用:

fit f(x) "data.txt" via A,B 
输出只是一句话:“堆栈溢出”

我甚至不知道如何寻找这个话题,所以任何帮助都将不胜感激

这种函数是如何调用的?嵌套的?递归的?含蓄的


感谢

这不仅在拟合方面失败,而且在绘图方面也失败了。您必须写下f(x)的显式形式,否则gnuplot将循环它,直到它达到递归极限。一种方法是使用不同的名称:

f(x) = sin(x) # for example
g(x) = A*exp(x - B*f(x))
现在用g(x)来拟合,而不是f(x)。如果您从未声明过f(x),那么gnuplot就没有可以使用的表达式。在任何情况下,如果您想要递归地定义一个函数,您至少需要设置一个递归限制。也许是这样的:

f0(x) = x
f1(x) = A*exp(x - B*f0(x))
f2(x) = A*exp(x - B*f1(x))
f3(x) = A*exp(x - B*f2(x))
...
这可以自动循环:

limit=10
f0(x) = x
do for [i=1:limit] {
j=i-1
eval "f".i."(x) = A*exp(x - B*f".j."(x))"
}

使用上面的表达式,可以使用
limit
变量设置递归限制。在任何情况下,它都应保持为有限数。

这是一个递归函数。您需要一个递归停止的条件,如最大迭代次数:

maxiter = 10
f(x, n) = (n > maxiter ? 0 : A*exp(x - B*f(x, n+1)))

fit f(x, 0) "data.txt" via A,B

当然,您必须检查,当递归停止时应该返回哪个值(这里我使用了
0

谢谢您的回复

和一个朋友讨论这个问题时,我找到了解决办法

首先,这类函数被称为“超越函数”,这意味着函数f(x)不是显式可解的,但变量x可以作为f(x)的函数求解,它将具有下一种形式

x=B*f(x)+对数(f(x)/A)

因此,有可能定义一个新的函数(不是超越的)

g(x)=B*x+对数(x/A)

从这里可以将函数g(x)拟合到绘图x vs y。使用gnuplot,可以按如下方式进行装配

使用($2):($1)通过A、B拟合g(x)“data.txt”


希望这对其他人有所帮助

您是想用以前定义的同名函数重新定义
f(x)
,还是想定义递归函数?