wiki:PolynomialExpansion

Version 88 (modified by sili, 10 years ago) ( diff )

--

A = {{a0, a1}, {a1, a2}}, b = {b0, b1}, x0 = {0, 0}

Step 1: r0 = b - Ax0; p0 = r0 (No expansion)

r0[0] = b0

r0[1] = b1

Step 2: alpha0 = <r0, r0> / <p0, Ap0> (No expansion)

<p0, Ap0> = b0(a0b0 + a1b1) + b1(a1b0 + a2b1)

alpha0 = (b02+b12) / (b0(a0b0 + a1b1) + b1(a1b0 + a2b1))

Step 3: r1 = r0 - alpha0*Ap0 (No expansion)

r1[0] = (b0(b0(a0b0 + a1b1) + b1(a1b0 + a2b1)) - (b02+b12)(a0b0+a1b1)) / (b0(a0b0 + a1b1) + b1(a1b0 + a2b1))

r1[1] = (b1(b0(a0b0 + a1b1) + b1(a1b0 + a2b1)) - (b02+b12)(a1b0+a2b1)) / (b0(a0b0 + a1b1) + b1(a1b0 + a2b1))

Step 4: x1 = x0 + alpha0*p0 (No expansion)

x1[0] = (b0(b02 + b12)) / (b0(a0b0 + a1b1) + b1(a1b0 + a2b1))

x1[1] = (b1(b02 + b12)) / (b0(a0b0 + a1b1) + b1(a1b0 + a2b1))

Step 5: beta = rsnew / rsold = <r1, r1> / <r0, r0> (No expansion)

To make it simple to read, let's devote m = b0(a0b0 + a1b1) + b1(a1b0 + a2b1)

rsnew =

[b0m - (b02+b12)(a0b0+a1b1)]2 + [b1m - (b02+b12)(a1b0+a2b1)]2
------------------------------------------------------------------------
m2

beta =

[b0m - (b02+b12)(a0b0+a1b1)]2 + [b1m - (b02+b12)(a1b0+a2b1)]2
-------------------------------------------------------------------------
(b02+b12)m2

Step 6: p1 = r1 +beta*p0 (No expansion)

p1[0] =

m(b02+b12)[b0m - (b02+b12)(a0b0+a1b1)] + b0{[b0m - (b02+b12)(a0b0+a1b1)]2 + [b1m - (b02+b12)(a1b0+a2b1)]2}
------------------------------------------------------------------------------------------------------------------------------------
(b02+b12)m2

p1[1] =

m(b02+b12)[b1m - (b02+b12)(a1b0+a2b1)] + b1{[b0m - (b02+b12)(a0b0+a1b1)]2 + [b1m - (b02+b12)(a1b0+a2b1)]2}
------------------------------------------------------------------------------------------------------------------------------------
(b02+b12)m2

Step 7: alpha1 = <r1, r1> / <p1, Ap1> (No expansion)

<p1, Ap1> = p1[0](a0p1[0]+a1p1[1]) + p1[1](a1p1[0]+a2p1[1])

alpha1 =

[b0m - (b02+b12)(a0b0+a1b1)]2 + [b1m - (b02+b12)(a1b0+a2b1)]2
------------------------------------------------------------------------------------
m2[p1[0](a0p1[0]+a1p1[1]) + p1[1](a1p1[0]+a2p1[1])]

Step 8: r2 = r1 - alpha1*Ap1 (Need to expand for cancellation)

r2[0] = r1[0] - alpha1*(A[0][0]*p1[0]+A[0][1]*p1[1])

r2[0] =

m[b0m - (b02+b12)(a0b0+a1b1)][p1[0](a0p1[0]+a1p1[1]) + p1[1](a1p1[0]+a2p1[1])] - (a0p1[0]+a1p1[1]){[b0m - (b02+b12)(a0b0+a1b1)]2 + [b1m - (b02+b12)(a1b0+a2b1)]2}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
m2[p1[0](a0p1[0]+a1p1[1]) + p1[1](a1p1[0]+a2p1[1])]

r2[1] =

Step 9: x2 = x1 + alpha1*p1

x2[0] = x1[0] + alpha1*p1[0]

x2[0] =

mb0(b02+b12)[p1[0](a0p1[0]+a1p1[1]) + p1[1](a1p1[0]+a2p1[1])] + p1[0]{[b0m - (b02+b12)(a0b0+a1b1)]2 + [b1m - (b02+b12)(a1b0+a2b1)]2}
------------------------------------------------------------------------------------------------------------------------------------------------------------------
m2[p1[0](a0p1[0]+a1p1[1]) + p1[1](a1p1[0]+a2p1[1])]

x2[1] =

assertion: (Need to expand for cancellation)

bncg[0] = A[0][0]*x2[0] + A[0][1]*x2[1] = a0(a2b0 - a1b1) / (a0a2 - a12) + a1(-a1b0 + a0b1) / (a0a2 - a12) = b0(a0a2 - a12) / (a0a2 - a12) = b0

bncg[1] = A[1][0]*x2[0] + A[1][1]*x2[1] = a1(a2b0 - a1b1) / (a0a2 - a12) + a2(-a1b0 + a0b1) / (a0a2 - a12) = b1(a0a2 - a12) / (a0a2 - a12) = b1

b[0] = b0

b[1] = b1

assert(bncg[i] == b[i])

END

Attachments (4)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.