Sfondo matematico
Sia A una matrice N per N di numeri reali, ba vettore di N numeri reali e xa vettore N numeri reali sconosciuti. Un'equazione di matrice è Ax = b.
Il metodo di Jacobi è il seguente: decomponi A = D + R, dove D è la matrice delle diagonali e R sono le voci rimanenti.
se si crea una soluzione di ipotesi iniziale x0, una soluzione migliorata è x1 = inversa (D) * (b - Rx) in cui tutte le moltiplicazioni sono moltiplicazione matrice-vettore e inverso (D) è l'inverso della matrice.
Specifica del problema
- Input : il programma completo dovrebbe accettare come input i seguenti dati: la matrice A, il vettore b, un'ipotesi iniziale x0 e un numero di "errore" e.
- Output : il programma deve generare il numero minimo di iterazioni in modo tale che l'ultima soluzione differisca dalla soluzione reale, al massimo da e. Ciò significa che ogni componente dei vettori in grandezza assoluta differisce al massimo da e. È necessario utilizzare il metodo Jacobi per le iterazioni.
Come vengono immessi i dati è la tua scelta ; potrebbe essere la tua sintassi su una riga di comando, potresti prendere l'input da un file, qualunque cosa tu scelga.
Come vengono emessi i dati è la tua scelta ; può essere scritto in un file, visualizzato nella riga di comando, scritto come arte ASCII, qualsiasi cosa, purché sia leggibile da un essere umano.
Maggiori dettagli
Non ti viene data la vera soluzione: il modo in cui calcoli la vera soluzione dipende interamente da te. Puoi risolverlo secondo la regola di Cramer per esempio, o calcolare direttamente un inverso. Ciò che conta è che hai una vera soluzione per essere in grado di confrontare le iterazioni.
La precisione è un problema; alcune "soluzioni esatte" per il confronto possono differire. Ai fini di questo codice golf, la soluzione esatta deve essere fedele a 10 decimali.
Per essere assolutamente chiari, se anche un solo componente della soluzione di iterazione attuale supera di e il componente corrispondente nella soluzione reale, allora è necessario continuare a iterare.
Il limite superiore di N varia in base all'hardware utilizzato e al tempo che sei disposto a dedicare all'esecuzione del programma. Ai fini di questo codice golf, assumere massimo N = 50.
presupposti
Quando viene chiamato il tuo programma, sei libero di supporre che ciò che segue sia sempre valido:
- N> 1 e N <51, cioè non ti verrà mai data un'equazione scalare, sempre un'equazione di matrice.
- Tutti gli input sono sul campo dei numeri reali e non saranno mai complessi.
- La matrice A è sempre tale che il metodo converge alla vera soluzione, in modo tale che puoi sempre trovare un numero di iterazioni per ridurre al minimo l'errore (come definito sopra) di seguito o uguale a e.
- A non è mai la matrice zero o la matrice identità, ovvero esiste una soluzione.
Casi test
A = ((9, -2), (1, 3)), b = (3,4), x0 = (1,1), e = 0.04
La vera soluzione è (0,586, 1,138). La prima iterazione fornisce x1 = (5/9, 1), differendo di oltre 0,04 dalla soluzione reale, di almeno un componente. Prendendo un'altra iterazione troviamo, x2 = (0,555, 1,148) che differisce di meno di 0,04 da (0,586, 1,138). Quindi l'output è
2
A = ((2, 3), (1, 4)), b = (2, -1), x0 = (2.7, -0.7), e = 1.0
In questo caso la vera soluzione è (2.2, -0.8) e la supposizione iniziale x0 ha già un errore inferiore a e = 1.0, quindi viene emesso 0. In altre parole, ogni volta che non è necessario eseguire un'iterazione, si esegue semplicemente l'output
0
Valutazione di presentazione
Questo è il golf del codice, con tutte le scappatoie standard non consentite. Vince il programma completo (o funzione) corretto più breve , ovvero il numero più basso di byte. È sconsigliato usare cose come Mathematica che racchiudono molti passaggi necessari in una funzione, ma usano qualsiasi linguaggio tu voglia.