def solve_getinfo(a, b, x, sample): mat = np.array(a) (size, _) = a.shape result = [] a_cond = linalg.cond(mat) (a_maxcond, _, a_subcond) = rdft.get_leading_maxcond(mat) for i in range(0, sample): # RDFT solve (x1, fra, fr, ra, x1_orig) = solve_rdft(a, b, x) (fra_maxcond, _, fra_subcond) = rdft.get_leading_maxcond(fra) fra_cond = linalg.cond(fra) err_rdft_iter = linalg.norm(x1 - x) err_rdft = linalg.norm(x1_orig - x) # RDFT improved solve (x1_imp, fra_imp, fr_imp, ra_imp, x1_imp_orig) = solve_rdft_improved(a, b, x) (fra_maxcond_imp, _, fra_subcond_imp) = rdft.get_leading_maxcond(fra) fra_cond_imp = linalg.cond(fra_imp) err_rdft_imp_iter = linalg.norm(x1_imp - x) err_rdft_imp = linalg.norm(x1_imp_orig - x) # RDFT givens solve (x5_imp, x5_imp_orig) = solve_rdft_givens(a, b, x) err_rdft_givens_iter = linalg.norm(x5_imp - x) err_rdft_givens = linalg.norm(x5_imp_orig - x) # RDFT givens solve (x7_imp, x7_imp_orig) = solve_rdft_givens_both(a, b, x) err_rdft_givens_both_iter = linalg.norm(x7_imp - x) err_rdft_givens_both = linalg.norm(x7_imp_orig - x) # GAUSS solve (x2, ga, _, x2_orig) = solve_gauss(a, b, x) (ga_maxcond, _, ga_subcond) = rdft.get_leading_maxcond(fra) ga_cond = linalg.cond(ga) err_gauss_iter = linalg.norm(x2 - x) err_gauss = linalg.norm(x2_orig - x) # Partial Pivot a_float = np.array(a, dtype=np.float64) b_float = np.array(b, dtype=np.float64) (x3, pl, pu, swapped_a, swapped_b) = pp.solve(a_float, b_float) err_pp = linalg.norm(x3 - x) ##x3_i = iteration.iteration(swapped_a, pl, pu, swapped_b, x3, linalg.cond(a_float)) #result make result.append( ([ a_maxcond / a_cond, fra_maxcond / fra_cond, fra, a_subcond, fra_subcond, fr, ra, err_rdft_iter, err_rdft, err_rdft_imp_iter, err_rdft_imp ], [err_rdft_givens_iter, err_rdft_givens ], [err_rdft_givens_both_iter, err_rdft_givens_both], [ga_maxcond / ga_cond, ga, ga_subcond, err_gauss_iter, err_gauss], [err_pp])) return result
def const_r(): for i in range(0, 50): size = 200 mat = np.zeros((size, size)) r = rdft.generate_r(size) # use constant r for j in range(0, size): for k in range(0, size): mat[j, k] = random.uniform(-100, 100) f = rdft.generate_f(size) fr = f.dot(r) fra = fr.dot(mat) (a_maxcond, _, _) = rdft.get_leading_maxcond(mat) (fra_maxcond, _, _) = rdft.get_leading_maxcond(fra) a_cond = linalg.cond(mat) fra_cond = linalg.cond(fra) print("A: ", a_maxcond / a_cond) print("FRA:", fra_maxcond / fra_cond)
def const_r(): for i in range(0, 50): size = 200 mat = np.zeros((size,size)) r = rdft.generate_r(size) # use constant r for j in range(0,size): for k in range(0,size): mat[j,k] = random.uniform(-100,100) f = rdft.generate_f(size) fr = f.dot(r) fra = fr.dot(mat) (a_maxcond,_,_) = rdft.get_leading_maxcond(mat) (fra_maxcond,_,_) = rdft.get_leading_maxcond(fra) a_cond = linalg.cond(mat) fra_cond = linalg.cond(fra) print("A: ", a_maxcond/a_cond) print("FRA:", fra_maxcond/fra_cond)
def const_a(sample, size, rand_range): result = [] mat = np.zeros((size,size)) for j in range(0,size): for k in range(0,size): mat[j,k] = random.uniform(-rand_range,rand_range) for i in range(0, sample): f = rdft.generate_f(size) r = rdft.generate_r(size) fr = f.dot(r) fra = fr.dot(mat) (a_maxcond,_,a_subcond) = rdft.get_leading_maxcond(mat) (fra_maxcond,_,fra_subcond) = rdft.get_leading_maxcond(fra) a_cond = linalg.cond(mat) fra_cond = linalg.cond(fra) result.append([mat, a_maxcond/a_cond, fra_maxcond/fra_cond, fra, a_subcond, fra_subcond]) #print("A: ", a_maxcond/a_cond) #print("FRA:", fra_maxcond/fra_cond) return result
def solve_getinfo(a,b,x,sample): mat = np.array(a) (size,_) = a.shape result = [] a_cond = linalg.cond(mat) (a_maxcond,_,a_subcond) = rdft.get_leading_maxcond(mat) for i in range(0, sample): # RDFT solve (x1, fra, fr, ra, x1_orig) = solve_rdft(a,b,x) (fra_maxcond,_,fra_subcond) = rdft.get_leading_maxcond(fra) fra_cond = linalg.cond(fra) err_rdft_iter = linalg.norm(x1-x) err_rdft = linalg.norm(x1_orig-x) # RDFT improved solve (x1_imp, fra_imp, fr_imp, ra_imp, x1_imp_orig) = solve_rdft_improved(a,b,x) (fra_maxcond_imp,_,fra_subcond_imp) = rdft.get_leading_maxcond(fra) fra_cond_imp = linalg.cond(fra_imp) err_rdft_imp_iter = linalg.norm(x1_imp-x) err_rdft_imp = linalg.norm(x1_imp_orig-x) # RDFT givens solve (x5_imp, x5_imp_orig) = solve_rdft_givens(a,b,x) err_rdft_givens_iter = linalg.norm(x5_imp-x) err_rdft_givens = linalg.norm(x5_imp_orig-x) # RDFT givens solve (x7_imp, x7_imp_orig) = solve_rdft_givens_both(a,b,x) err_rdft_givens_both_iter = linalg.norm(x7_imp-x) err_rdft_givens_both = linalg.norm(x7_imp_orig-x) # GAUSS solve (x2, ga, _, x2_orig) = solve_gauss(a,b,x) (ga_maxcond,_,ga_subcond) = rdft.get_leading_maxcond(fra) ga_cond = linalg.cond(ga) err_gauss_iter = linalg.norm(x2-x) err_gauss = linalg.norm(x2_orig-x) # Partial Pivot a_float = np.array(a,dtype=np.float64) b_float = np.array(b,dtype=np.float64) (x3, pl, pu, swapped_a, swapped_b) = pp.solve(a_float,b_float) err_pp = linalg.norm(x3-x) ##x3_i = iteration.iteration(swapped_a, pl, pu, swapped_b, x3, linalg.cond(a_float)) #result make result.append(([a_maxcond/a_cond, fra_maxcond/fra_cond, fra, a_subcond, fra_subcond, fr, ra, err_rdft_iter, err_rdft,err_rdft_imp_iter,err_rdft_imp],[err_rdft_givens_iter,err_rdft_givens],[err_rdft_givens_both_iter,err_rdft_givens_both],[ga_maxcond/ga_cond, ga, ga_subcond, err_gauss_iter, err_gauss],[err_pp])) return result
def const_a(sample, size, rand_range): result = [] mat = np.zeros((size, size)) for j in range(0, size): for k in range(0, size): mat[j, k] = random.uniform(-rand_range, rand_range) for i in range(0, sample): f = rdft.generate_f(size) r = rdft.generate_r(size) fr = f.dot(r) fra = fr.dot(mat) (a_maxcond, _, a_subcond) = rdft.get_leading_maxcond(mat) (fra_maxcond, _, fra_subcond) = rdft.get_leading_maxcond(fra) a_cond = linalg.cond(mat) fra_cond = linalg.cond(fra) result.append([ mat, a_maxcond / a_cond, fra_maxcond / fra_cond, fra, a_subcond, fra_subcond ]) #print("A: ", a_maxcond/a_cond) #print("FRA:", fra_maxcond/fra_cond) return result
def const_a_test(test_num, sample, size, rand_range, way=-1, way_option=[]): counter = 0 sample_counter = 0 for i in range(0, test_num): [cd, fs, mat, mca, mcfra, fras, a_subcond, fra_subconds] = const_a_detection(sample, size, rand_range) a = np.array(mat) if way == 0: mat = mat.T elif way == 1: for (k, j) in way_option: mat = pp.swap(mat, k, j) if cd > sample * (2 / 3): np.savetxt("./test_result/test_result" + str(counter) + "_a.txt", a) os.mkdir("./test_result/fra_" + str(counter)) for i in range(0, len(fras)): np.savetxt( "./test_result/fra_" + str(counter) + "/" + str(i) + ".txt", fras[i]) output = open( "./test_result/test_result" + str(counter) + "_a_subcond.txt", 'w') output.write(str(a_subcond)) output.close() output = open( "./test_result/test_result" + str(counter) + "_fra_subcond.txt", 'w') output.write(str(fra_subconds)) output.close() output = open( "./test_result/test_result" + str(counter) + "_mca.txt", 'w') output.write(str(mca)) output = open( "./test_result/test_result" + str(counter) + "_mcfra.txt", 'w') output.write(str(mcfra)) output.close() output = open( "./test_result/test_result" + str(counter) + "_det.txt", 'w') output.write(str(np.linalg.det(a))) output.close() output = open( "./test_result/test_result" + str(counter) + "_cd.txt", 'w') output.write(str(cd)) output.close() output = open( "./test_result/test_result" + str(counter) + "_cdnum.txt", 'w') output.write(str(linalg.cond(a))) output.close() sample_counter = 0 a_subcond, fra_subconds = [], [] while sample_counter < 100: f = rdft.generate_f(size) r = rdft.generate_r(size) fr = f.dot(r) fra = fr.dot(mat) (a_maxcond, _, a_subcond) = rdft.get_leading_maxcond(mat) (fra_maxcond, _, fra_subcond) = rdft.get_leading_maxcond(fra) fra_subconds.append(fra_subcond) sample_counter = sample_counter + 1 np.savetxt( "./test_result/test_result" + str(counter) + "_z_mod_a.txt", mat) os.mkdir("./test_result/fra_" + str(counter) + "_" + str(sample_counter)) for i in range(0, len(fras)): np.savetxt( "./test_result/fra_" + str(counter) + "_" + str(sample_counter) + "/" + str(i) + ".txt", fras[i]) output = open( "./test_result/test_result" + str(counter) + "_z_a_subcond.txt", 'w') output.write(str(a_subcond)) output.close() output = open( "./test_result/test_result" + str(counter) + "_z_fra_subcond.txt", 'w') output.write(str(fra_subconds)) output.close() output = open( "./test_result/test_result" + str(counter) + "_z_mca.txt", 'w') output.write(str(mca)) output = open( "./test_result/test_result" + str(counter) + "_z_mcfra.txt", 'w') output.write(str(mcfra)) output.close() output = open( "./test_result/test_result" + str(counter) + "_z_det.txt", 'w') output.write(str(np.linalg.det(mat))) output.close() output = open( "./test_result/test_result" + str(counter) + "_z_cdnum.txt", 'w') output.write(str(linalg.cond(mat))) output.close() counter = counter + 1 print(str(counter) + "detected")
def const_a_test(test_num, sample, size, rand_range, way=-1, way_option=[]): counter = 0 sample_counter = 0 for i in range(0, test_num): [cd, fs, mat, mca, mcfra, fras, a_subcond, fra_subconds] = const_a_detection(sample, size, rand_range) a = np.array(mat) if way == 0: mat = mat.T elif way == 1: for (k,j) in way_option: mat = pp.swap(mat,k,j) if cd > sample*(2/3): np.savetxt("./test_result/test_result" + str(counter) + "_a.txt",a) os.mkdir("./test_result/fra_" + str(counter)) for i in range(0,len(fras)): np.savetxt("./test_result/fra_" + str(counter) + "/" + str(i) + ".txt", fras[i]) output = open("./test_result/test_result" + str(counter) + "_a_subcond.txt",'w') output.write(str(a_subcond)) output.close() output = open("./test_result/test_result" + str(counter) + "_fra_subcond.txt",'w') output.write(str(fra_subconds)) output.close() output = open("./test_result/test_result" + str(counter) + "_mca.txt",'w') output.write(str(mca)) output = open("./test_result/test_result" + str(counter) + "_mcfra.txt",'w') output.write(str(mcfra)) output.close() output = open("./test_result/test_result" + str(counter) + "_det.txt",'w') output.write(str(np.linalg.det(a))) output.close() output = open("./test_result/test_result" + str(counter) + "_cd.txt",'w') output.write(str(cd)) output.close() output = open("./test_result/test_result" + str(counter) + "_cdnum.txt",'w') output.write(str(linalg.cond(a))) output.close() sample_counter = 0 a_subcond, fra_subconds = [], [] while sample_counter < 100: f = rdft.generate_f(size) r = rdft.generate_r(size) fr = f.dot(r) fra = fr.dot(mat) (a_maxcond,_,a_subcond) = rdft.get_leading_maxcond(mat) (fra_maxcond,_,fra_subcond) = rdft.get_leading_maxcond(fra) fra_subconds.append(fra_subcond) sample_counter = sample_counter + 1 np.savetxt("./test_result/test_result" + str(counter) + "_z_mod_a.txt",mat) os.mkdir("./test_result/fra_" + str(counter) + "_" + str(sample_counter)) for i in range(0,len(fras)): np.savetxt("./test_result/fra_" + str(counter) + "_" + str(sample_counter) + "/" + str(i) + ".txt", fras[i]) output = open("./test_result/test_result" + str(counter) + "_z_a_subcond.txt",'w') output.write(str(a_subcond)) output.close() output = open("./test_result/test_result" + str(counter) + "_z_fra_subcond.txt",'w') output.write(str(fra_subconds)) output.close() output = open("./test_result/test_result" + str(counter) + "_z_mca.txt",'w') output.write(str(mca)) output = open("./test_result/test_result" + str(counter) + "_z_mcfra.txt",'w') output.write(str(mcfra)) output.close() output = open("./test_result/test_result" + str(counter) + "_z_det.txt",'w') output.write(str(np.linalg.det(mat))) output.close() output = open("./test_result/test_result" + str(counter) + "_z_cdnum.txt",'w') output.write(str(linalg.cond(mat))) output.close() counter = counter + 1 print(str(counter) + "detected")