如何解决非特定的非线性方程?

时间:2014-10-26 09:33:37

标签: numerical-methods idl

我试图在某些数据中加上一个圆圈。这需要在数值上求解一组三个非线性联立方程(参见this document的全最小二乘法)。

对我来说,似乎IDL提供的NEWTON功能适合解决这个问题。 NEWTON需要一个函数的名称,该函数将为自变量的特定值计算方程式系统的值:

FUNCTION newtfunction,X
    RETURN, [Some function of X, Some other function of X]
END

虽然这很好,但它要求方程系统的所有参数(在这种情况下是数据点集)在newtfunction中进行硬编码。如果只有一个数据集需要解决,这很好,但是我有数千个数据集,并且手动定义一个新函数不是一个选项。

有解决方法吗?是否可以在IDL中以编程方式定义函数,或者甚至以其他方式传递数据集?

2 个答案:

答案 0 :(得分:0)

我不是这方面的专家,但如果我要解决这个问题,我会做以下事情。而不是求解一个由3个非线性方程组成的系统来找到三个未知数(即xcycr),我将使用优化例程通过启动收敛到解决方案初步猜测。对于这种最陡下降,可以使用共轭梯度或任何其他多变量优化方法。

我很快就找出了问题的最小二乘方程(请在使用前检查):

F = (sum_{i=1}^{N} (xc^2 - 2 xi xc + xi^2 + yc^2 - 2 yi yc + yi^2 - r^2)^2)

计算此函数的梯度非常简单,因为它只是求和,因此编写最陡的下降代码将是微不足道的,以计算xcycr

我希望它有所帮助。

答案 1 :(得分:0)

通常在这些类型的函数中使用COMMON块来传递不属于数字例程的调用签名的其他参数,缓存值等。