def iteration_checker(size, test_num, val_range, res_opt=0): for i in range(0, test_num): (a, b, x) = generate_linear_system(size, val_range) a_float = np.array(a, dtype=np.float64) b_float = np.array(b, dtype=np.float64) x1 = [] l, u = [], [] (x1, l, u, fra, frb, fr) = rdft.rdft_lu_solver_with_lu(a, b) x0 = x1 x1_after = np.array(x1) x1_after = iteration.iteration(fra, l, u, frb, x1_after, linalg.cond(fra)) x1_after = iteration.remove_imag(x1_after) (x2, pl, pu, swapped_a, swapped_b) = pp.solve(a_float, b_float) x3 = iteration.iteration(swapped_a, pl, pu, swapped_b, x2, linalg.cond(a_float)) #x2 = lib.lu_solver(a,b) #x2 = lib.direct_solver(a_float,b_float) #x4 = lib.direct_lu_solver(a,b) if res_opt == 1: print("---error---") print("cond:", linalg.cond(a)) print("[0] error", linalg.norm(b - a.dot(x0))) print("[1] error", linalg.norm(b - a.dot(x1))) #print("[2] error", linalg.norm(b - a.dot(x2))) #print("[3] error", linalg.norm(b - a.dot(x3))) elif res_opt == 2: print( str(linalg.cond(a)) + " " + str(linalg.norm(x - x0)) + " " + str(linalg.norm(x - x1_before)) + " " + str(linalg.norm(x - x1_after)) + " " + str(linalg.norm(x - x5)) + " " + str(linalg.norm(x - x2)) + " " + str(linalg.norm(x - x3))) elif res_opt == 3: step = [] for j in x4_step: step.append(linalg.norm(x - j)) print( str(linalg.cond(a)) + " " + str(linalg.norm(x - x0)) + " " + str(linalg.norm(x - x1_before)) + " " + str(linalg.norm(x - x1_after)) + " " + str(step) + " " + str(linalg.norm(x - x2))) # partial pivot only elif res_opt == 4: print( str(linalg.cond(a)) + " " + str(linalg.norm(x - x0)) + " " + str(linalg.norm(x - x2)) + " " + str(linalg.norm(x - x4))) # partial pivot only elif res_opt != 1: print("---error---") print("cond:", linalg.cond(a)) print("[0] error", linalg.norm(x - x0)) print("[1] error", linalg.norm(x - x1_before)) # remove_imag => iteration print("[2] error", linalg.norm(x - x1_after)) # iteration => remove_imag print("[3] error", linalg.norm(x - x2))
def solve_rdft_improved(a, b, x): (size, _) = a.shape f = rdft.generate_f(size) r = rdft.generate_random_r(size) fr = f.dot(r) ra = r.dot(a) (x1, l, u, fra, frb, _) = rdft.rdft_lu_solver_with_lu(a, b, r) x2 = np.array(x1) x2 = iteration.iteration_another(a, l, u, fr, b, x2, linalg.cond(fra)) x2 = iteration.remove_imag(x2) return (x2, fra, fr, ra, x1)
def iteration_checker(size, test_num, val_range, res_opt=0): for i in range(0,test_num): (a,b,x) = generate_linear_system(size, val_range) a_float = np.array(a,dtype=np.float64) b_float = np.array(b,dtype=np.float64) x1 = [] l,u = [], [] (x1, l, u, fra, frb, fr) = rdft.rdft_lu_solver_with_lu(a,b) x0 = x1 x1_after = np.array(x1) x1_after = iteration.iteration(fra, l, u, frb, x1_after, linalg.cond(fra)) x1_after = iteration.remove_imag(x1_after) (x2, pl, pu, swapped_a, swapped_b) = pp.solve(a_float,b_float) x3 = iteration.iteration(swapped_a, pl, pu, swapped_b, x2, linalg.cond(a_float)) #x2 = lib.lu_solver(a,b) #x2 = lib.direct_solver(a_float,b_float) #x4 = lib.direct_lu_solver(a,b) if res_opt == 1: print("---error---") print("cond:", linalg.cond(a)) print("[0] error", linalg.norm(b - a.dot(x0))) print("[1] error", linalg.norm(b - a.dot(x1))) #print("[2] error", linalg.norm(b - a.dot(x2))) #print("[3] error", linalg.norm(b - a.dot(x3))) elif res_opt == 2: print(str(linalg.cond(a)) + " " + str(linalg.norm(x - x0)) + " " + str(linalg.norm(x - x1_before)) + " " + str(linalg.norm(x - x1_after)) + " " + str(linalg.norm(x - x5)) + " " + str(linalg.norm(x - x2)) + " " + str(linalg.norm(x - x3))) elif res_opt == 3: step = [] for j in x4_step: step.append(linalg.norm(x - j)) print(str(linalg.cond(a)) + " " + str(linalg.norm(x - x0)) + " " + str(linalg.norm(x - x1_before)) + " " + str(linalg.norm(x - x1_after)) + " " + str(step) + " " + str(linalg.norm(x - x2))) # partial pivot only elif res_opt == 4: print(str(linalg.cond(a)) + " " + str(linalg.norm(x - x0)) + " " + str(linalg.norm(x - x2)) + " " + str(linalg.norm(x - x4))) # partial pivot only elif res_opt != 1: print("---error---") print("cond:", linalg.cond(a)) print("[0] error", linalg.norm(x - x0)) print("[1] error", linalg.norm(x - x1_before)) # remove_imag => iteration print("[2] error", linalg.norm(x - x1_after)) # iteration => remove_imag print("[3] error", linalg.norm(x - x2))
def solve_rdft_improved(a,b,x): (size,_) = a.shape f = rdft.generate_f(size) r = rdft.generate_random_r(size) fr = f.dot(r) ra = r.dot(a) (x1, l, u, fra, frb, _) = rdft.rdft_lu_solver_with_lu(a,b,r) x2 = np.array(x1) x2 = iteration.iteration_another(a, l, u, fr, b, x2, linalg.cond(fra)) x2 = iteration.remove_imag(x2) return (x2, fra, fr, ra, x1)
def solve_rdft_givens(a, b, x): (size, _) = a.shape f = rdft.generate_f(size) r = rdft.generate_r(size) ## === care === ## g = givens.givens_generation(size) fr = f.dot(r) frg = fr.dot(g) rg = r.dot(g) (x1, l, u, fra, frb, _) = rdft.rdft_lu_solver_with_lu(a, b, rg) x2 = np.array(x1) x2 = iteration.iteration_another(a, l, u, frg, b, x2, linalg.cond(fra)) x2 = iteration.remove_imag(x2) return (x2, x1)
def solve_rdft_givens(a,b,x): (size,_) = a.shape f = rdft.generate_f(size) r = rdft.generate_r(size) ## === care === ## g = givens.givens_generation(size) fr = f.dot(r) frg = fr.dot(g) rg = r.dot(g) (x1, l, u, fra, frb, _) = rdft.rdft_lu_solver_with_lu(a,b,rg) x2 = np.array(x1) x2 = iteration.iteration_another(a, l, u, frg, b, x2, linalg.cond(fra)) x2 = iteration.remove_imag(x2) return (x2, x1)
def solve_rdft_givens_both(a,b,x): (size,_) = a.shape f = rdft.generate_f(size) r = rdft.generate_r(size) g1 = givens.givens_generation(size) g2 = givens.givens_generation(size) fr = f.dot(r) frg = fr.dot(g1) frgb = frg.dot(b) ag = a.dot(g2) frgag = frg.dot(ag) (l,u) = lu.lu(frgag) y = lu.l_step(l,frgb) z = lu.u_step(u,y) x1 = g2.dot(z) x2 = np.array(x1) x2 = iteration.iteration_another(a, l, u, frg, b, x2, linalg.cond(frgag), g2) x2 = iteration.remove_imag(x2) return (x2, x1)
def solve_rdft_givens_both(a, b, x): (size, _) = a.shape f = rdft.generate_f(size) r = rdft.generate_r(size) g1 = givens.givens_generation(size) g2 = givens.givens_generation(size) fr = f.dot(r) frg = fr.dot(g1) frgb = frg.dot(b) ag = a.dot(g2) frgag = frg.dot(ag) (l, u) = lu.lu(frgag) y = lu.l_step(l, frgb) z = lu.u_step(u, y) x1 = g2.dot(z) x2 = np.array(x1) x2 = iteration.iteration_another(a, l, u, frg, b, x2, linalg.cond(frgag), g2) x2 = iteration.remove_imag(x2) return (x2, x1)