Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Return element i,j of infinite matrix A
- Procedure.d A(i, j)
- ProcedureReturn 1.0 / ((i + j) * (i + j + 1) / 2 + i + 1)
- EndProcedure
- ; multiply vector v by matrix A
- Procedure MultiplyAv(n, Array v.d(1), Array Av.d(1))
- For i = 0 To n - 1
- Av(i) = 0
- For j = 0 To n - 1
- Av(i) = Av(i) + A(i, j) * v(j)
- Next j
- Next i
- EndProcedure
- ; multiply vector v by matrix A transposed
- Procedure MultiplyAtv(n, Array v.d(1), Array Atv.d(1))
- For i = 0 To n - 1
- Atv(i) = 0
- For j = 0 To n - 1
- Atv(i) = Atv(i) + A(j, i) * v(j)
- Next j
- Next i
- EndProcedure
- ; multiply vector v by matrix A And then by matrix A transposed
- Procedure MultiplyAtAv(n, Array v.d(1), Array AtAv.d(1))
- Dim u.d(n)
- MultiplyAv(n, v(), u())
- MultiplyAtv(n, u(), AtAv())
- EndProcedure
- Procedure.d Approximate(n)
- Dim u.d(n)
- Dim v.d(n)
- For i = 0 To n - 1
- u(i) = 1
- Next
- For i = 1 To 10
- MultiplyAtAv(n, u(), v())
- MultiplyAtAv(n, v(), u())
- Next
- vBv.d = 0
- vv.d = 0
- For i = 0 To n - 1
- vBv = vBv + u(i) * v(i)
- vv = vv + v(i) * v(i)
- Next
- ProcedureReturn Sqr(vBv / vv)
- EndProcedure
- OpenConsole()
- n = 100
- If CountProgramParameters() > 0
- n = Val(ProgramParameter(0))
- EndIf
- PrintN(StrD(Approximate(n), 9))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement