metodi numerici teoria generale Flashcards

1
Q

matrice grande o piccola

A

m < 50, m> 400

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

matrice sparsa

A

sparsity > 0.33

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

diagonale strettamente dominante

A

diagonale maggiore di somma dei valori assoluti dei elementi della riga

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

formula condizionamento built in

A

np.linalg.cond(A)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

codice matrice simmetrica e definita positiva

A

np.allClose(A, A.T)

try: scipy.linalg.cholesky(A)
except scipy.LinAlgError:

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

formula rank matrice

A

np.linalg.matrix_rank(A)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

codice diagonale strettamente dominante

A

n, _ = A.shape
diagonally_dominant = True
for i in range(n):
# Calcola la somma dei valori assoluti degli elementi della riga, escluso l’elemento diagonale
sum_row = np.sum(np.abs(A[i, :])) - np.abs(A[i, i])
# Controlla se valore assoluto dell’elemento diagonale è strettamente maggiore della somma degli altri elementi della riga
if np.abs(A[i, i]) <= sum_row:
diagonally_dominant = False
break

if diagonally_dominant:
    print("Matrice a Diagonale Strettamente Dominante")
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

codice residuo di sistema Ax = b

A

residuo_sol = np.linalg.norm(A @ x - b)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

codice derivata

A

df = sym.diff(f, var, 1)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

codice trasformare funz simbolica in numreica

A

f_numerica = sym.lamdify(var, f, np)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

codice radice quadrata

A

sym.sqrt(expr)
o np.sqrt(valore)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

codice matrice

A

sym.matrix

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

codice condizionamento

A

np.linalg.cond()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

importare cholesky

A

scipy.linalg.cholesky(A)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

vettore di zeri

A

np.zeros_like(vet)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

scambiare costanti per numeri in funzione simbolica

A

f.subs(var, numero)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

codice norma metodo built-in?

A

np.linalg.norm(A, 1)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

come ricordare differenza tra numpy e sympy?

A

numpy riguarda operazioni NON simboliche, ma operazioni su array e matrici

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

cos’è norma uno e come si calcola non usando funzioni built-in?

A

norma 1 = MAX SOMMA DI OGNI COLONNA, CONSIDERANDO ABS DI OGNI ELEMENTO

c = np.sum(np.abs(B),axis=0) #equivale a sommare gli elementi di tutte le colonna
norma1 = np.max(c)

18
Q

norma 2 cos’è e codice?

A

norma 2 è valore singolare massimo di matrice M = A * A.T

è necessario fare radice del massimo degli autovalori

def norma2EIGVALS(A):
M = A @ A.T
autovalori = np.linalg.eigvals(M)
norma2 = np.sqrt(np.max(autovalori))
return norma2

19
Q

condizionamento in norma 1? non built-in

A

cond = norma(A) * norma(np.linalg.inv(A))

20
Q

norma infinito cos’è e codice?

A

come norma 1 ma la somma riguarda le righe

c = np.sum(np.abs(B),axis=1) #equivale a sommare gli elementi di tutte le righe
normainf = np.max(c)

21
Q

inversa di matrice

A

np.linalg.inv(A)

22
Q

condizionamento in norma 2? non built-in

A

cond = norma2(A) / np.sqrt(np.min(autovalori))

23
Q

matrice di vandermone codice?

A

mat = np.vander(array, increasing = True)

24
Q

lu solve quando applicabile?

A

per matrici n = m, piccole dimensioni, dense (come Gauss)
fa fattorizzazione, poi viene applicato solve_triangular due volte

25
Q

condizione applicabilità lusolve? + codice

A

condizione: Il determinante di tutte le sottomatrici deve essere != 0 a.k.a. il rango di tutte le sottomatrici deve essere pieno

n, _ = A.shape
applicabile = True
for i in range(1, n):
sub_matrix = A[:i, :i]
if np.linalg.matrix_rank(sub_matrix) != i:
print(“NON APPLICABILE”)
applicabile = False
break

if applicabile:
print(“APPLICABILE”)

26
Q

codice applicare lusolve?

A

applicare lu che ritorna PT, L, U, poi risolvere con due solve_triangular

Step 1: Fattorizzazione LU con permutazione
PT, L, U = lu(A)
P = PT.T.copy()

Step 2: CALCOLARE Pb
Pb = P @ b

Step 3: Risolvere L * y = P * b per y (sistema triangolare inferiore)
y = solve_triangular(L, Pb, lower=True)

Step 4: Risolvere U * x = y per x (sistema triangolare superiore)
x = solve_triangular(U, y)

27
Q

norma 1, 2 e infinito built-in?

A

np.linalg.norm(A, 1)
np.linalg.norm(A, 2)
np.linalg.norm(A, np.inf)

28
Q

calcolare perturbazione nei dati vettore b di Ax = b? codice

A

si usa divisione come tutti gli errori relativi, ed anche norma infinito

dopo la perturbazione di b in bper:
errore_dati = np.linalg.norm(bper - b, np.inf) / np.linalg.norm(b, np.inf)

29
Q

risoluzione con metodo build-in di sistema n == m

A

x = sym.solve(expr) per sistemi simbolici
x = numpy.linalg.solve(A) per sistemi numerici

30
Q

risoluzione con metodo build-in di sistema n > m sovradeterminati

A

x = sym.linsolve(expr) per sistemi simbolici
c, residuals, rank, s = numpy.linalg.lstsq(A, b) per sistemi numerici

31
Q

applicare cholesky? + codice

A

CHOLESKY

cholesky fa solo la fattorizzazione, serve poi applicare Lsolve, Usolve

cholesky restituisce solo L

L = cholesky(A, lower=True)
print(“Matrice triangolare inferiore L:\n”, L)

LSOLVE
z, flag = Lsolve(L, b)
if flag == 0:
print(“\nSoluzione intermedia z (dalla risoluzione di Lz = b):\n”, z)

# USOLVE
x, flag = Usolve(L.T, z)
if flag == 0:
    print("\nSoluzione finale x (dalla risoluzione di L.T x = z):\n", x)
32
Q

codice solve_triangular

A

scipy.linalg.solve_triangular

33
Q

come importare metodo lu

A

scipy.linalg.lu

34
Q

come importare metodo cholesky

A

scipy.linalg.cholesky

35
Q

come importare per usare Lsolve e Usolve? cosa cambia da solve_triangular?

A

from solvetriangular import Lsolve, Usolve # Importa le funzioni definite nel file

la differenza è che restituiscono anche un flag che è =0 se va bene

solve_triangular(L, V, lower = True) == Lsolve(L, V)

solve_triangular(U, V, lower = False) == Lsolve(U, V)

36
Q

come importare metodo qr?

A

np.linalg.qr(…)

37
Q

[QR, Cholesky, Jacobi, Gauss seidel, SOR, steepest descent, conjugate descent, metodo equazioni normali, QRLS, SVDLS]

tra questi metodi quali senza scheletro non forniscono la soluzione diretta?

A

QR, cholesky

37
Q

applicare metodo qr? + codice

A

qr restituisce Q, R tale che A = Q*R
risolta con metodo built-in solve

Q, R = np.linalg.qr(A)
y = Q.T @ b
x = scipy.linalg.solve(R, y)

38
Q

codice hilbert?

A

H = scipy.linalg.hilbert(n)

39
Q

quando si applica solve_nsis()?

A

in sistemi lineari Ax = b
CONDIZIONE: n == m
per sistemi con n vettori di termini noti b

utilizza lu, Lsolve, Usolve

40
Q

codice solve_nsis?

A

def solve_nsis(A, B):
n, m = A.shape
X = np.zeros(B)

#LU
PT, L, U = lu(A)
P = PT.T.copy()

for i in range(n):
    #LSOLVE
    y, flag = Lsolve(L, P @ B[:, i])
    if flag != 0:
        print("Errore: elemento diagonale nullo in L")
        X = []
        return X

    #USOLVE
    x, flag = Usolve(U, y)
    if flag != 0:
        print("Errore: elemento diagonale nullo in U")
        X = []
        return X

    X[:, i] = x.reshape(n,)

return X
41
Q

steps per fare condizionamento di funzione simbolica f?

A

1) definire funzione simbolica

2) calcolare la derivata simbolica

3) sostituire valori fissi se necessario

4) convertire funzione e derivata in numeriche

5) calcolare indice condizionamento: | c * df_numerica(c) / f_numerica(c) |

42
Q

nell’applicare scheletri, valori di itmax, tol, x0?

A

itmax = 10000
tol = ie-8
x0 = np.zeros_like(b)

43
Q

creare mediante interpolazione un polinomio di grado n? cosa serve avere e creare?

A

Metodo per calcolare il polinomio interpolante in forma di Lagrange.

  • x VETTORE dei nodi di interpolazione,
  • y1 VETTORE dei valori della funzione nei nodi di interpolazione, y1 = y1[x]
  • xx VETTORE dei punti in cui si vuole valutare il polinomio interpolante. PIU’ FITTI. DA CREARE(es con np.linspace())
  • yy1 VETTORE DA CALCOLARE CON interpL

yy = interpL(x, y, xx)

44
Q

come costruire polinomio di regressione lineare di grado n? + codice vander

A

usare matrice di vandermone
con vander si crea una matrice A che poi è risolvibile come un qualsiasi sistema lineare.

n2 = n + 1
A = np.vander(x, increasing = True)[:, :n2]