6

Dato L e ULU decomposition e vettore di costanti b tale che LU*x=b, c'è qualche funzione incorporata che trovano il x? Significare qualcosa come -Risolvi sistema di equazioni lineari per proposta decomposizione LU e vettore di costanti

X = functionName(L,U,b) 

noti che in entrambi L e U si tratta di matrici triangolari che possono essere risolti direttamente forward and backward substitution senza utilizzare il processo Gaussian elimination.

Edit:

Risolvendo questo sistema di equazioni lineari dovrebbe essere secondo le seguenti fasi -

1. define y - s.t Ux=y 
2. solve Ly=b by forward substitution 
3. solve Ux=y by backward substitution 
4. return y 

Modifica 2:

ho trovato linalg::matlinsolveLU ma non ho provato perché ho una versione troppo vecchia (R2010a). Funziona per chiunque?

+0

I vostri vettori e matrici sono simbolici? Se è così, devi dettagliarlo nella tua domanda. – horchler

+0

Inoltre, 'mldivide' è [sovraccaricato per i sistemi simbolici] (http://www.mathworks.com/help/symbolic/arithmeticoperations.html), ma non funzionerà esattamente allo stesso modo. – horchler

+0

Che cosa significa "matrici simboliche"? – URL87

risposta

5

Se si dispone di:

A = rand(3); 
b = rand(3,1); 

allora la soluzione al sistema può essere semplicemente calcolato come:

x = A\b 

Oppure, se si dispone già di una decomposizione LU di A, allora:

[L,U] = lu(A); 
xx = U\(L\b) 

la funzione mldivide è smart enough per rilevare che la matrice è triangolare e scelto un algoritmo di conseguenza (sostituzione avanti/indietro)

+0

questo tipo di cose è utile se si ha una matrice di coefficiente fissa 'A' ma molti lati diversi della mano destra' b'.Quindi, precompilando la decomposizione, potresti accelerare le cose – Amro

+0

Come sai che è "abbastanza intelligente da rilevare ..."? – URL87

+0

Ho fornito un collegamento ai documenti che spiega come 'mldivide' implementa diversi algoritmi e sceglie quello appropriato in base alle caratteristiche della matrice di input. – Amro

3

credo che questo è quello che stai cercando:

A = rand(3,3); % Random 3-by-3 matrix 
b = rand(3,1); % Random 3-by-1 vector 
[L,U] = lu(A); % LU decomposition 
x = U\(L\b) % Solve system of equations via mldivide (same as x = A\b or x = (L*U)\b) 
err = L*U*x-b % Numerical error 

Il sistema di equazioni è risolto utilizzando mldivide. Potresti anche cercare qr che implementa QR decomposition invece di utilizzare la decomposizione LU. qr può risolvere direttamente i problemi di tipo A*x = b ed è più efficiente. Guarda anche linsolve. Per i sistemi simbolici potresti ancora essere in grado di utilizzare mldivide o provare linalg::matlinsolveLU in MuPAD.

+0

vedi il mio post modificato per favore – URL87

+0

Grazie per i link @Amro. – horchler