一个用Go语言实现的计算机代数系统(Computer Algebra System),支持符号运算和精确的数学表达式处理。
go get cnb.cool/hakurei/go-cas
package main
import (
"fmt"
"cnb.cool/hakurei/go-cas"
)
func main() {
// 直接解析字符串表达式
result := cas.MustParseExpr("3 + (5 * 2) * 2 * √2")
fmt.Println(result) // 输出: (3 + 20√2)
// 更多示例
fmt.Println(cas.MustParseExpr("√8")) // 2√2
fmt.Println(cas.MustParseExpr("2 * √3 + 3 * √3")) // 5√3
fmt.Println(cas.MustParseExpr("(√2 + √3)^2")) // (5 + 2√6)
fmt.Println(cas.MustParseExpr("4^(1/2)")) // 2
}
package main
import (
"fmt"
"cnb.cool/hakurei/go-cas"
)
func main() {
// 有理数运算
r1 := cas.NewRational(1, 2) // 1/2
r2 := cas.NewRational(1, 3) // 1/3
sum := cas.Add(r1, r2) // 5/6
fmt.Println(sum)
// 平方根
sqrt2 := cas.Sqrt(cas.NewRational(2, 1)) // √2
sqrt8 := cas.Sqrt(cas.NewRational(8, 1)) // 2√2
fmt.Println(sqrt2, sqrt8)
// 根式乘法
result := cas.Mul(sqrt2, sqrt8) // √2 * 2√2 = 4
fmt.Println(result)
// 幂运算
pow := cas.Pow(cas.NewRational(2, 1), cas.NewRational(3, 2)) // 2^(3/2) = 2√2
fmt.Println(pow)
// 立方根
cbrt8 := cas.Root(cas.NewRational(8, 1), 3) // ∛8 = 2
fmt.Println(cbrt8)
// 四则混合运算
// 3 * (5 + 2) * √2 = 21√2
expr := cas.Mul(
cas.NewRational(3, 1),
cas.Add(cas.NewRational(5, 1), cas.NewRational(2, 1)),
sqrt2,
)
fmt.Println(expr) // 输出: 21√2
// (√2 + √3)² = 5 + 2√6
sqrt3 := cas.Sqrt(cas.NewRational(3, 1))
sum23 := cas.Add(sqrt2, sqrt3)
square := cas.Mul(sum23, sum23)
fmt.Println(square) // 输出: (5 + 2√6)
// 2√3 + 3√3 = 5√3
combined := cas.Add(
cas.Mul(cas.NewRational(2, 1), sqrt3),
cas.Mul(cas.NewRational(3, 1), sqrt3),
)
fmt.Println(combined) // 输出: 5√3
}
支持从字符串解析数学表达式,语法如下:
+-*/^()√ 或 sqrt()root(n, x) (暂未实现)5, 1231/2, 3/4-5, -1/23 + (5 * 2) * 2 * √2 (√2 + √3)^2 2 * √3 + 3 * √3 4^(1/2) √8 / √2 (1 + √2) * 3
# 运行完整示例
cd example
go run main.go
# 运行表达式解析演示
go run demo_parser.go
# 运行复数演示
go run demo_complex.go
go test -v
所有表达式类型的基础接口:
type Expr interface {
Simplify() Expr
String() string
Equals(other Expr) bool
}
√4 = 2 √8 = 2√2 √18 = 3√2 2^3 = 8 4^(1/2) = 2 2^(3/2) = 2√2 √2 * √8 = 4 ∛8 = 2 ∛16 = 2√[3]2 四则混合运算: 3 * (5 + 2) = 21 3 * (5 + 2) * √2 = 21√2 (2 + 3) * (4 + 5) = 45 2√3 + 3√3 = 5√3 (1 + √2) * 3 = (3 + 3√2) 3 * (√2 + √3) = (3√2 + 3√3) (√2 + √3)² = (5 + 2√6) 2(3 + √5) + 4(1 + √5) = (10 + 6√5) 复数运算: i² = -1 i³ = -i i⁴ = 1 (3 + 4i) + (1 + 2i) = (4 + 6i) (3 + 4i) * (1 + 2i) = (-5 + 10i) (2 + 3i) * (2 - 3i) = 13 1/i = -i |(3 + 4i)|² = 25 (1 + i)² = 2i (1 + i)⁴ = -4
MIT License