PJK*_*PJK 2 math precision haskell list-comprehension equation-solving
我刚刚开始玩GHCi.我看到列表生成器基本上解决了给定集合中的等式:
Prelude> [x | x <- [1..20], x^2 == 4]
[2]
Run Code Online (Sandbox Code Playgroud)
(根据预期只找到一个根)
现在,我为什么不能解决在ℝ结果方程式,因为该解决方案被包括在指定范围内?
[x | x <- [0.1,0.2..2.0], x*4 == 2]
Run Code Online (Sandbox Code Playgroud)
如何在实数集中解决这些方程式?
编辑:对不起,我的意思0.1当然.
列表理解不解决方程式,它只生成属于某些集合的项目列表.如果您的集被定义为任何x在[1..20]这样x^2==4,这就是你所得到的.
你不能用任何实数的完整列表0.01来实现2.0,因为这样的真实列表不能用haskell表示(或更好:它不能在任何计算机上表示),因为它具有无限精度的无限数.
[0.01,0.2..2.0] 是由以下数字组成的列表:
Prelude> [0.01,0.2..2.0]
[1.0e-2,0.2,0.39,0.5800000000000001,0.7700000000000001,0.9600000000000002,1.1500000000000004,1.3400000000000005,1.5300000000000007,1.7200000000000009,1.910000000000001]
Run Code Online (Sandbox Code Playgroud)
这些数字都不能满足您的要求.
请注意,您可能意味着[0.1,0.2..2.0]代替[0.01,0.2..2.0].仍然:
Prelude> [0.1,0.2..2.0]
[0.1,0.2,0.30000000000000004,0.4000000000000001,0.5000000000000001,0.6000000000000001,0.7000000000000001,0.8,0.9,1.0,1.1,1.2000000000000002,1.3000000000000003,1.4000000000000004,1.5000000000000004,1.6000000000000005,1.7000000000000006,1.8000000000000007,1.9000000000000008,2.000000000000001]
Run Code Online (Sandbox Code Playgroud)
正如其他人所提到的,这不是解决方程式的有效方法,但可以用比率来完成.
Prelude> :m +Data.Ratio
Prelude Data.Ratio> [x|x<-[1%10, 2%10..2], x*4 == 2]
[1 % 2]
Run Code Online (Sandbox Code Playgroud)
读x % y为x divided by y.
| 归档时间: |
|
| 查看次数: |
1538 次 |
| 最近记录: |