xxxxxxxxxx
68
// The Catalan number R(m2) =
// (2 * m2)! / [ (1 + m2)! * m2! ]
function R(m2) {
let num = 1, den = 1
for(let n = 2 * m2 ; n >= m2 + 2 ; n--) {
num = num * n
}
for(let d = m2 ; d >= 2 ; d--) {
den = den * d
}
return num / den
}
// Power series with Catalan number coefficients
// sum from m2=0 to deg of R(m2) * t2 ^ m2
function F(t2, deg) {
let sum = new Fraction(1)
let t22 = t2.mul(1)
for(let m2 = 1 ; m2 <= deg ; m2++) {
sum = sum.add( new Fraction(R(m2)) .mul(t22) )
t22 = t22.mul(t2)
}
return sum
}
function Y(c0, c1, c2, deg) {
let d0 = c0.mul(1), d1 = c1.mul(1), d2 = new Fraction(1)
let sum = d0.div(d1)
for(let m = 1 ; m <= deg ; m++) {
d0 = d0.mul(c0)
d1 = d1.mul(c0).mul(c0)
d2 = d2.mul(c2)
sum = sum.add( new Fraction(R(m)) .mul(d0).mul(d2).div(d1) )
}
return [sum, c1.div(c2).sub(sum)]
}
function Q(c0, c1, c2) {
return [ 1/(2*c2) * (c1 + sqrt(c1*c1 - 4*c0*c2)) ,
1/(2*c2) * (c1 - sqrt(c1*c1 - 4*c0*c2)) ]
}
function setup() {
noLoop()
print( Q(2, 3, 0.5) )
let c0 = new Fraction(2),
c1 = new Fraction(3),
c2 = new Fraction(1,2)
let t2 = c0.mul(c2).div(c1).div(c1)
let x1 = c0.div(c1).mul(F(t2, 5))
let x2 = c1.div(c2) .sub(x1)
print(x1.flt(), x2.flt())
print( Q(3, 7, 2) )
c0 = new Fraction(3)
c1 = new Fraction(7)
c2 = new Fraction(2)
t2 = c0.mul(c2).div(c1).div(c1)
x1 = c0.div(c1).mul(F(t2, 3))
x2 = c1.div(c2) .sub(x1)
print(x1.flt(), x2.flt())
print(x1.str(), x2.str())
}
function draw() {
}