我想求解一个动态生成的方程。我在 HackageDB 中找到了一个很好的库,可以使用 Newton-Raphson 方法计算近似根。但是,牛顿函数将函数(具有类型签名 Num a => a -> a )作为方程。我的问题是,可以将函数附加在一起吗?例如:(语法不正确)
join :: (a->a) ->(a->a)->(a->a)
join func1 func2 = func1+func2
For instance:
if func1 = 1+2*X+5*X^2 , func2 = 5 + 4*x + 2*x^3
then func3 = join func1 func2
func3 is `6 + 6*x + 5*x^2 + 2*x^3?
我正在考虑两种方法来做到这一点。因为每个小函数都是动态生成的,所以我必须将函数简化为上面的形式,然后将信息存储在数据类型中,例如:(语法不正确)
data FuncInfo = Info [Double]
if 1 + 2*x + 3*x^2 ----> Info [1,2,3]
5 + 4*x^3 ----> Info [5,0,0,4]
这样添加两个数据并创建新函数应该很容易。然而,实际上这并不容易,因为动态生成的小函数确实很难简化(一个小函数可能看起来像这样:) 10 / (1+x)^5
。
我在想的另一种方法是将函数附加在一起,这样就不需要进行简化,也不需要存储到新的数据类型中,例如:
func1 = 10 / (1+x) ^5
func2 = 25 / (1+x) ^9
newfunc = (10 / (1+x) ^5) + (25 / (1+x) ^9)