def oppgave5(): w = 0.3 # m t = 0.03 # m g = 9.81 # N d = 480 # kg/m^3 L = 2 # m x = L E = 1.3 * 10**10 # N/m^2 I = (w * t**3) / 12 f_x = -d * w * t * g y = f_x / (24 * E * I) * (x**2) * (x**2 - 4 * L * x + 6 * L**2) cond_list = [0.0] * 11 err_list = [0.0] * 11 for i in range(1, 10): n = 10 * 2**i m = calc_y_c(n) condi = cond(lagA(n), p=inf) err = abs(y - m[-1]) print("\(" + str(i) + "\)", "&", "\(" + str(n) + "\)", "&", "\(" + str(condi) + "\)", "&", "\(" + str(err) + "\)", "\\\\\n\hline") cond_list[i - 1] = condi err_list[i - 1] = err loglog(list(range(1, 12)), cond_list, 'r', label='Kondisjonstall') loglog(list(range(1, 12)), err_list, 'b', label='Feil') legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.) ylabel("Verdi") xlabel("10*2^x") show()
def oppgave4c(): L = 2 #m n = 10 # lengden på hver seksjon h = L / n # Strukturmatrise A = lagA(10) # Vektor med eksakte y-verdier y_e = y_e_vektor(L) # vektoren y'''' med numeriske tilnærminger return (1 / h**4) * dot(A, y_e)
def calc_y_c(n): w = 0.3 # bredde (m) d = 0.03 # tykkelse (m) g = 9.81 # gravitasjonskonstant (m/s^2) density = 480 # massetetthet (kg/m^3) L = 2 # Lengde (m) E = 1.3 * 10**10 # Materialkonstant (N/m^2) I = (w * d**3) / 12 # Tverrsnitt (m^2) f = -density * w * d * g h = L / n f_x = [(h**4 / (E * I)) * f] * n A = lagA(n) y = spsolve(A, f_x) return y
def oppgave7(): B = [0.0] * 11 n_list = [0.0] * 11 for i in range(1, 12): n = 10 * 2**i n_list[i - 1] = n A = lagA(n) m = calc_y_c(n, A) B[i - 1] = m[-1] print("\(" + str(i) + "\)", "&", "\(" + str(n_list[i - 1]) + "\)", "&", "\(" + str(B[i - 1]) + "\)", "\\\\\n\hline") plot(list(range(1, 12)), B, 'g', label="Feil") legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.) ylabel("Misplacement") xlabel("n") show()
def calc_y_c(n): w = 0.3 # m t = 0.03 # m g = 9.81 # N d = 480 # kg/m^3 L = 2 # m E = 1.3 * 10**10 # N/m^2 I = (w*t**3)/12 f = -d*w*t*g p = 100 #km/m h = L/n b = [0.0]*n for k in range(n): s = -p*g*math.sin(math.pi/L*h*(k+1)) b[k]=([(h ** 4 / (E * I)) * (f+s)]) A = csc_matrix(lagA(n)) y = spsolve(A, b) return y
def oppgave6d(): w = 0.3 # m t = 0.03 # m g = 9.81 # N p = 100 #kg/m d = 480 # kg/m^3 L = 2 # m E = 1.3 * 10**10 # N/m^2 I = (w * t**3) / 12 f_x = -d * w * t * g x = L y1 = f_x / (24 * E * I) * (x**2) * ((x**2) - 4 * L * x + 6 * L**2) y2 = ((g * p * L / (E * I * math.pi)) * ((L**3) / (math.pi**3) * math.sin(math.pi / L * x) - ((x**3) / 6) + (L * (x**2) / 2) - (x * (L**2) / (math.pi**2)))) y = y1 - y2 B = [0.0] * 11 n_list = [0.0] * 11 tf = [0.0] * 11 condition = [0.0] * 11 emach = 2**(-52) for i in range(1, 12): n = 10 * 2**i n_list[i - 1] = n A = lagA(n) m = calc_y_c(n, A) B[i - 1] = abs(abs(y) - abs(m[-1])) tf[i - 1] = (abs((L**2) / (n**2))) condition[i - 1] = cond(A, p=inf) * emach print(condition[i - 1]) loglog(n_list, B, 'g', label="Feil") loglog(n_list, tf, 'r', label="h^2") loglog(n_list, condition, 'b', label="Kondisjonstall*e_mach") legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.) ylabel("Feil") xlabel("x=10*2^i") annotate(str(n_list[6]) + ", " + str(B[6]), (n_list[6], B[6])) show()
from oppgave4c import oppgave4c y4_c = oppgave4c() E = 1.3 * 10**10 I = (0.3 * 0.03**3) / 12 f = -480 * 0.3 * 0.03 * 9.81 # Regner ut vektoren med lengde 10 y4_e = (f / (E * I)) * ones((10, 1)) forward_error = norm(y4_e - y4_c, ord=inf) rel_forward_error = forward_error / norm(y4_e, ord=inf) # Antar at den relative bakoverfeilen er 2^-52 rel_backwards_error = 2**(-52) # Feilforstørringen er relativ foroverfeil delt på relativ bakoverfeil error_magnification = rel_forward_error / rel_backwards_error # Lager matrisen fra oppgave 2 A = lagA(10) # Konverterer matrisen til en 'sparse matrix' for å inverse den A = csc_matrix(A) A_Invers = inv(A) # Kondisjonstallet cond_A = sp_norm(A, ord=inf) * sp_norm(A_Invers, ord=inf) # Printer ut svarene print("Foroverfeil: ", forward_error) print("Relativ foroverfeil:", rel_forward_error) print("Feilforstørring:", error_magnification) print("Kondisjonstall for A:", cond_A)