如何在haskell中计算多项式方程
基本上,我需要在haskell中基于值x计算一个多项式,系数的值需要存储在一个元组列表中 例如,多项式f(x)=a·xn+a1·xn−1 + ... + 一−1·x+an将在元组列表中表示,如如何在haskell中计算多项式方程,haskell,Haskell,基本上,我需要在haskell中基于值x计算一个多项式,系数的值需要存储在一个元组列表中 例如,多项式f(x)=a·xn+a1·xn−1 + ... + 一−1·x+an将在元组列表中表示,如f=[(a0,n),(a1,n-1),…,(an-1,1),(an,0)],因此如果我想计算 2*x^2+3*x+3对于x=20我需要列表[(2,2)、(3,1)、(0,3)] 事先非常感谢,如果我用一种混乱的方式解释了这个练习,那就很抱歉了:)简单:把清单翻过来就行了。累加器函数应将当前项(为x求解)添加
f=[(a0,n),(a1,n-1),…,(an-1,1),(an,0)]
,因此如果我想计算
2*x^2+3*x+3
对于x=20
我需要列表[(2,2)、(3,1)、(0,3)]
事先非常感谢,如果我用一种混乱的方式解释了这个练习,那就很抱歉了:)简单:把清单翻过来就行了。累加器函数应将当前项(为x求解)添加到累加器中。当然,种子必须为0。如果您想要基本解决方案,请尝试使用显式递归:
evaluate :: [(Int, Int)] -> Int -> Int
evaluate [] _x = .... -- TODO (1)
evaluate ((a,n) : rest) x = .... -- TODO (2)
where
result = evaluate rest x
在上面的(1)
中,我们需要指定计算“空”多项式(完全没有系数)的结果。这是递归的基本情况
相反,(2)
是递归步骤。这里,我们将系数对分成第一个(a,n)
,以及列表的其余部分rest
。然后,我们递归地定义result=evaluate rest x
来计算“没有第一个系数”的多项式,即a1·xn−1 + ... + 一−1·x+an。
然后,在第(2)
行中,我们需要将这个结果
与第一个单项式相结合,在x
中进行计算
您现在应该可以填充这些点了。类似这样的内容
> peval p x = foldr (\(a,n) s -> s+(a*x^n)) 0 p
> poly = peval [(2,2),(3,1),(3,0)]
> map poly [0..5]
[3,8,17,30,47,68]
calcfx=sum(map(\(coef,exp)->coef*x^exp)f)
[(2,2),(3,1),(0,3)]
应该是[(2,2),(3,1),(3,0)]
阅读,以获得更有效的方法来计算值。欢迎使用堆栈溢出。Stack Overflow不是一个代码编写服务。对不起,我不知道折叠是什么(这是我学习haskell的第三天)@Alex我有点迷糊;)既然你没有告诉我们你试过什么,我就给出了我能想到的最简短的答案