Newsgroup: it.scienza.informatica
Titolo: Risoluzione sistema di equazioni

Ho posto questa domanda su it.scienza.matematica ma non ho ricevuto
risposta, provo anche qui...:)
Ho un sistema di equazioni di 1° grado di questo tipo:
x1=f(8*x2,3*x3,...,12*xn)
x2=f(17*x1,9*x3,...,2*xn)
....
xn=f(5*x1,3*x2,...,6*xn-1)
I coefficienti delle variabili sono costanti arbitrarie, e naturalmente un
coefficiente (o anche tutti) può valere 0.
Insomma, xi equivale al risultato della funzione f, applicata a tutte le
altre incognite escluso xi stessa.
La funzione f esegue la sommatoria delle variabili [Es:
sum(8*x2,3*x3,...,12*xn)] e poi "comprime" il risultato ottenuto tra 0 e A.
La compressione non è lineare, può essere una funzione a scalino o una
funzione del tipo f(x)=A/(1+e^x)
La domanda è: qual'è il metodo migliore per risolvere (o meglio, fare un
programma in C che risolva) questo sistema ? :)
Va bene qualunque suggerimento, link, algoritmo...
Ringrazio in anticipo !! :)
-- 
LF

 Ringrazio in anticipo !! :)
Non so se è il metodo migliore ma un sistema, ad esempio:
x1+2*x2+3*x3=10
4*x1+5*x2+6*x3=11
-7*x1+8*x2+9*x2=12
lo puoi vedere come una matrice
1 2 3 10
4 5 6 11
-7 8 9 12
Per risolvere il problema puoi ridurre la matrice in forma triangolare.
Ad esempio, consideri la prima equazione o riga della matrice: moltiplichi
la seconda riga per 1/4!
E' un'operazione perfettamente lecita. Poi togli la prima riga dalla seconda
e ottieni...
1 2 3 10
0 -.75 -1.5 -7.25
-7 8 9 12
ora moltiplichi la terza per -1/7 e poi sottrai gli sottrai la prima.
1 2 3 10
0 -.75 -1.5 -7.25
0 -3.14286 -4.28571 -11.7143
ora, se moltiplico la terza per 0.75/3.14285 e poi gli tolgo la seconda ho
che nell'ultima equazione compare solo x3.
Poi, sempre attraverso manipolazioni della matrice (in modo simile a come
faresti in matematica con un sistema) a ritroso usi l'ultimo risultato per
calcolare gli altri.
Ad esempio fai sparire dalla seconda x3 e ti calcoli x2.
Io avevo scritto un programmino che lo faceva (a scopo didattico) se lo vuoi
te lo posto (in privato ovviamente).
Dato però che sto per farmi una breve vacanza e parto domani mattina, forse
è meglio che vai al sito che si chiama Numerical Recipes in C
http://www.nr.com/
 dove ci sono tantissime applicazioni.
Il mio programmino è in C++, questo invece è in C, comunque è un algoritmo
semplice e vedrai che lo capisci subito.
ciao.

Va bene qualunque suggerimento, link, algoritmo...
Basta trasformare in matrice il sistema di equazioni e risolvere con
la fattorizzazione di gauss (facilmente implementabile in c).
--
tdan...@jumpy.it

 Va bene qualunque suggerimento, link, algoritmo...
Tipicamente dovrai utilizzare un metodo iterativo per la
risoluzione di sistemi non lineari. Considerando che
le funzioni e le loro derivate sono semplici potrebbe andare
bene una generalizzazione del metodo di Newton.
etc.etc.etc.
Per avere una introduzione al problema (e le parole chiave
per cercare eventuale software gia' in rete!) leggiti il
Capitolo 9 che trovi qui:
http://www.library.cornell.edu/nr/cbookcpdf.html
Tratta appunto della soluzione di sistemi non lineari in C.
Ciao,
g.

 Va bene qualunque suggerimento, link, algoritmo...
http://www.library.cornell.edu/nr/cbookcpdf.html
guarda il capitolo 2
ciao
Mauro
-- 
Computer science is no more about computers than astronomy is about 
telescopes
     - Edsger W. Dijkstra

Grazie a tutti !! Sì, effettivamente il mio sistema non è affatto di primo
grado, mi sono lasciato ingannare dalla potenza delle incognite... Mi
studierò con calma i metodi che mi avete indicato.
Grazie ancora...:)
-- 
LF