https://github.com/tangxiangong/numericalanalysis.jl
数值算法的 Julia 实现
https://github.com/tangxiangong/numericalanalysis.jl
julia numerical-methods
Last synced: 8 months ago
JSON representation
数值算法的 Julia 实现
- Host: GitHub
- URL: https://github.com/tangxiangong/numericalanalysis.jl
- Owner: tangxiangong
- License: mit
- Created: 2023-10-08T02:43:44.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-05-28T03:18:37.000Z (about 2 years ago)
- Last Synced: 2024-12-30T03:52:32.401Z (over 1 year ago)
- Topics: julia, numerical-methods
- Language: Julia
- Homepage: https://tangxiangong.github.io/NumericalAnalysis.jl/dev
- Size: 154 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# NumericalAnalysis.jl
> 教材 [Numerical Analysis (3rd Edition, by Timothy Sauer)](https://www.pearson.com/en-us/subject-catalog/p/numerical-analysis/P200000006340?view=educator&tab=title-overview) 中数值算法的 Julia 实现.
[](https://codecov.io/gh/tangxiangong/NumericalAnalysis.jl)
[](https://tangxiangong.github.io/NumericalAnalysis.jl/dev)
## Chapter 0. Fundamentals
[Evaluating a Polynomial](./src/Fundamentals/Polynomial.jl)
多项式相关计算, 更专业全面的实现可见 [Polynomials.jl](https://github.com/JuliaMath/Polynomials.jl).
### 进展
- [x] 实多项式类型 `Polynomial{<:Real}(::Vector{<:Real})`
- [x] 多项式次数 `degree(::Polynomial)`, `Base.getproperty(::Polynomial, :degree)`
- [x] 自定义纯文本输出 `Base.show(::Polynomial)`
- [ ] 在 Jupyter/Pluto/... 中实现 $\LaTeX$ 输出 (利用 [Latexify.jl](https://github.com/korsbo/Latexify.jl))
- [x] 加法逆元 `Base.:-(::Polynomial)`
- [x] 秦九韶算法求值 `evaluate(::Polynomial)`, `(::Polynomial)(::Real)`
- [x] 加/减法和求导运算 `Base.:+(::Polynomial, ::Polynomial)`, `Base.:-(::Polynomial, ::Polynomial)`, `∂(::Polynomial)`
- [x] 标量乘法 `Base.:*(::Real, ::Polynomial)` 和多项式乘法 `Base.:*(::Polynomial, ::Polynomial)` (利用 [FFTW.jl](https://github.com/JuliaMath/FFTW.jl) 计算乘积的系数)
- [x] 由根向量生成多项式 `from_roots(::Vector{<:Real}, ::Real = 1) :: Polynomial`
### 代码示例
```julia
using NumericalAnalysis.Fundamentals
p = Polynomial([1, 2, 0, 1]) # 输出为 Polynomial(t^3+2t^2+1)
q = Polynomial([1, 2, 1])
-q # Polynomial(-x^2-2x-1)
eval_poly(p, 1) # 3
p(1) == evaluate(p, 1) # true
∂(p) # Polynomial(3x^2+4x)
p + q; p-q; p*q
```
## Chapter 1. Solving Equations
[求解非线性方程组](./src/NonLinearSolve/NonLinearSolve.jl)
### 进展
- [x] 二分法 `bisection(::Function, ::Tuple{<:Real, <:Real}, ::Float64=1e-8)`
- [x] 不动点迭代法 `fixedpoint(::Function, ::Real; ::Union{Function, Nothing}=nothing, ::Float64=1e-8, ::Int=10_000)`
- [x] 牛顿迭代法 `newton(::Function, ::Real; ::Union{Nothing, Function}=nothing, ::Float64=1e-8, ::Integer=10_000)`
## Chapter Numerical Integrals
[数值积分](./src/Quadratures/)
### 进展
- [x] Gauss 积分公式
### 例子
```julia
using NumericalAnalysis.Quadrature
domain = (0, 1) # 积分区间
order = 10 # 节点个数, 即所使用的正交多项式的次数, 对应 2`order`-1阶代数精度
dx = discretization(domain, order; method=:Legendre) # 计算区间 `domain`, `order` 次 Legendre 正交多项式所对应的节点和权重
f(x) = x^9 # 被积函数
∫(f)*dx # 数值积分
```