1
+ import matplotlib .pyplot as plt
2
+ import numpy as np
3
+ from random import randint
4
+ from scipy import optimize
5
+ from time import time
6
+ def monteCarloMatrixMultiply2 (A ,B ):
7
+ n = len (A )
8
+ C = [[{} for j in range (n )] for i in range (n )]
9
+ D = [[{} for j in range (n )] for i in range (n )]
10
+ AB = [[0 for j in range (n )] for i in range (n )]
11
+ for i in range (n ):
12
+ for j in range (n ):
13
+ C [i ][j ]['size' ] = 0
14
+ D [i ][j ]['size' ] = 0
15
+ while True :
16
+ for i in range (n ):
17
+ for j in range (n ):
18
+ k = randint (0 ,n - 1 )
19
+ if j in C [i ][k ] and i in D [k ][j ]:
20
+ pass
21
+ else :
22
+ if A [i ][k ] != 0 or B [k ][j ] != 0 :
23
+ AB [i ][j ] = AB [i ][j ] + A [i ][k ]* B [k ][j ]
24
+ C [i ][k ][j ] = True
25
+ C [i ][k ]['size' ] = C [i ][k ]['size' ] + 1
26
+ D [k ][j ][i ] = True
27
+ D [k ][j ]['size' ] = D [k ][j ]['size' ] + 1
28
+ flag = True
29
+ for i in range (n ):
30
+ for j in range (n ):
31
+ flag = flag and C [i ][j ]['size' ] == n and D [i ][j ]['size' ] == n
32
+ if flag : break
33
+ return AB
34
+ def testPoly (x ,a ,b ,c ):
35
+ return a * x ** 2 + b * x + c
36
+ setparams = [5 ,105 ,5 ]
37
+ experi2Time = [k for k in range (setparams [0 ],setparams [1 ],setparams [2 ])]
38
+ xaxis = [k for k in range (setparams [0 ],setparams [1 ],setparams [2 ])]
39
+ for k in range (len (xaxis )):
40
+ n1 = xaxis [k ]
41
+ A = [[randint (5 ,10 ) for i in range (n1 )] for j in range (n1 )]
42
+ B = [[randint (5 ,10 ) for i in range (n1 )] for j in range (n1 )]
43
+ start = time ()
44
+ monteCarloMatrixMultiply2 (A ,B )
45
+ end = time ()
46
+ experi2Time [k ] = end - start
47
+ print ('size = ' ,xaxis [k ],' --> done ...' )
48
+ np .random .seed (0 )
49
+ params , params_covariance = optimize .curve_fit (
50
+ testPoly ,xaxis ,experi2Time ,
51
+ p0 = [1 , 1 , 1 ])
52
+ print (
53
+ '(' ,params [0 ],')x^2 + (' ,params [1 ],')x +' ,params [2 ]
54
+ )
0 commit comments