Advertisement
Guest User

Untitled

a guest
Mar 18th, 2015
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Return element i,j of infinite matrix A
  2. Procedure.d A(i, j)
  3.   ProcedureReturn 1.0 / ((i + j) * (i + j + 1) / 2 + i + 1)
  4. EndProcedure
  5.  
  6. ; multiply vector v by matrix A
  7. Procedure MultiplyAv(n, Array v.d(1), Array Av.d(1))
  8.   For i = 0 To n - 1
  9.     Av(i) = 0
  10.     For j = 0 To n - 1
  11.       Av(i) = Av(i) + A(i, j) * v(j)
  12.     Next j
  13.   Next i
  14. EndProcedure
  15.  
  16. ; multiply vector v by matrix A transposed
  17. Procedure MultiplyAtv(n, Array v.d(1), Array Atv.d(1))
  18.   For i = 0 To n - 1
  19.     Atv(i) = 0
  20.     For j = 0 To n - 1
  21.       Atv(i) = Atv(i) + A(j, i) * v(j)
  22.     Next j
  23.   Next i
  24. EndProcedure
  25.  
  26. ; multiply vector v by matrix A And then by matrix A transposed
  27. Procedure MultiplyAtAv(n, Array v.d(1), Array AtAv.d(1))
  28.   Dim u.d(n)
  29.   MultiplyAv(n, v(), u())
  30.   MultiplyAtv(n, u(), AtAv())
  31. EndProcedure
  32.  
  33. Procedure.d Approximate(n)
  34.   Dim u.d(n)
  35.   Dim v.d(n)
  36.   For i = 0 To n - 1
  37.     u(i) = 1
  38.   Next
  39.   For i = 1 To 10
  40.     MultiplyAtAv(n, u(), v())
  41.     MultiplyAtAv(n, v(), u())
  42.   Next
  43.   vBv.d = 0
  44.   vv.d = 0
  45.   For i = 0 To n - 1
  46.     vBv = vBv + u(i) * v(i)
  47.     vv = vv + v(i) * v(i)
  48.   Next
  49.   ProcedureReturn Sqr(vBv / vv)
  50. EndProcedure
  51.  
  52. OpenConsole()
  53. n = 100
  54. If CountProgramParameters() > 0
  55.   n = Val(ProgramParameter(0))
  56. EndIf
  57. PrintN(StrD(Approximate(n), 9))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement