CS考试辅导 DualNumbers

DualNumbers

Copyright By PowCoder代写 加微信 powcoder

# Dual(a,b) represents a + b*ϵ
struct Dual{T}

const ϵ = Dual(0,1)

import Base: +, -, ^, /, *, exp, sin

+(x::Real, y::Dual) = Dual(x + y.a, y.b)
+(x::Dual, y::Real) = Dual(x.a + y, x.b)
+(x::Dual, y::Dual) = Dual(x.a + y.a, x.b + y.b)
-(x::Real, y::Dual) = Dual(x – y.a, -y.b)
-(x::Dual, y::Real) = Dual(x.a – y, x.b)
-(x::Dual, y::Dual) = Dual(x.a – y.a, x.b – y.b)

/(x::Dual, y::Real) = Dual(x.a/y, x.b/y)
*(x::Dual, y::Dual) = Dual(x.a*y.a, x.a*y.b + x.b*y.a)

function ^(x::Dual, k::Integer)
error(“Not implemented”)
elseif k == 1
else # k > 1
Dual(x.a^k, k* x.b * x.a^(k-1))

exp(x::Dual) = Dual(exp(x.a), x.b*exp(x.a))
sin(x::Dual) = Dual(sin(x.a), x.b*cos(x.a))

sin (generic function with 14 methods)

f = x -> 1 + x + x^2
g = x -> 1 + x/3 + x^2

f(1 + ϵ).b # f'(1) == 3
g(1 + ϵ).b

2.3333333333333335

f = x -> (x-1)*(x-2) + x^2

Dual{Int64}(4, 5)

f = x -> exp(x^2 * sin(x) + x)

Dual{Float64}(71.52736276745335, -505.2129571436543)

exp(9sin(3) + 3) * (9cos(3) + 6sin(3)+1)

-505.2129571436543

# 1 + … + x^n

function s(n, x)
ret = 1 + x
for k = 2:n
ret = ret + x^k

程序代写 CS代考 加微信: powcoder QQ: 1823890830 Email: powcoder@163.com