Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Soluzione Sistema di equazioni non lineari con Matlab

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

2
voti

[11] Re: Soluzione Sistema di equazioni non lineari con Matlab

Messaggioda Foto Utentedimaios » 26 mar 2012, 16:20

p4ngm4n ha scritto:Comunque non c'è da preoccuparsi del circuito, l'ho messo perché me l'hai richiesto, ma sono certo delle equazioni che ho scritto, se ti va di aiutarmi riferiamoci a quelle.


Se non volessi aiutarti non risponderei.

La soluzione te l'ho illustrata nel post precedente.
Il problema non è quello di risolvere il sistema di equazioni non lineari ma valutare se la soluzione trovata è quella corretta. Senza una condizione iniziale plausibile potresti incappare in un minimo locale, comunque se vuoi fare un tentativo partendo da una terna di variabili a caso prova.

[1] Riscrivi le equazioni in modo diverso :

I_m_p - \left[ I_p_v- I_0[e^\frac{V_m_p+R_sI_m_p}{V_t}-1]-\frac{V_m_p+R_sI_m_p}{R_p} \right] = \epsilon_{1}
I_s_c - \left[ I_p_v- I_0[e^\frac{R_sI_s_c)}{V_t}-1]-\frac{R_sI_s_c}{R_p} \right] = \epsilon_{2}
I_p_v - I_0[e^{\frac{V_o_c}{V_t}}-1]- \frac{V_o_c}{R_p}=\epsilon_{3}

J = \epsilon_{1}^2 + \epsilon_{2}^2 + \epsilon_{3}^2

[2] Scrivi una funzione Matlab che dia in uscita la funzione J che dovrà essere minimizzata ( quando J \rightarrow 0 le 3 equazioni sono verificate contemporaneamente quindi le 3 variabili sono quelle attese ).

[3] Fornisci alla funzione fminsearch la tua funzione e le condizioni iniziali delle 3 variabili ricercate.

L'help della funzione lo trovi qui.

Fai la ricerca partendo da un certo numero di condizioni iniziali abbastanza "distanti" tra loro.
Non è a mio avviso un modo molto corretto di procedere comunque è un punto di partenza.
Ingegneria : alternativa intelligente alla droga.
Avatar utente
Foto Utentedimaios
30,2k 7 10 12
G.Master EY
G.Master EY
 
Messaggi: 3381
Iscritto il: 24 ago 2010, 14:12
Località: Behind the scenes

0
voti

[12] Re: Soluzione Sistema di equazioni non lineari con Matlab

Messaggioda Foto Utentep4ngm4n » 26 mar 2012, 17:11

Grazie, ho ancora qualche dubbio:
se volessi imporre di cercare i valori corretti di R_s,RpI_p_vpartendo da alcuni valori in modo da ottenere la soluzione corretta, come dovrei fare???

il punto [2] non mi è chiaro...
Avatar utente
Foto Utentep4ngm4n
20 5
New entry
New entry
 
Messaggi: 97
Iscritto il: 21 gen 2009, 18:47

0
voti

[13] Re: Soluzione Sistema di equazioni non lineari con Matlab

Messaggioda Foto Utentep4ngm4n » 26 mar 2012, 17:26

poi mi chiedo, ma fsolve non serve a niente ?
Avatar utente
Foto Utentep4ngm4n
20 5
New entry
New entry
 
Messaggi: 97
Iscritto il: 21 gen 2009, 18:47

1
voti

[14] Re: Soluzione Sistema di equazioni non lineari con Matlab

Messaggioda Foto Utentedimaios » 26 mar 2012, 17:27

p4ngm4n ha scritto:Grazie, ho ancora qualche dubbio:
se volessi imporre di cercare i valori corretti di R_s,RpI_p_vpartendo da alcuni valori in modo da ottenere la soluzione corretta, come dovrei fare???

il punto [2] non mi è chiaro...



Scrivi una funzione che accetta come ingresso un vettore di parametri che chiamerai genericamente theJfunction.
Questa funzione ha come ingresso un vettore x di parametri che devono essere minimizzati.
Per far partire l'algoritmo la prima terna di valori viene fornita dall'esterno .... poi l'algoritmo tenta per iterazioni successive di minimizzare la funzione J modificando i valori iniziali ( lo fa automaticamente ).
All'uscita devi verificare SE L'ALGORITMO E' RIUSCITO A FAR CONVERGERE A ZERO LA FUNZIONE OBIETTIVO OPPURE HA FALLITO LA MINIMIZZAZIONE!

Codice: Seleziona tutto

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
%CODICE PER RICHIAMARE LA FUNZIONE

% Inizializza l'algoritmo con i valori che ritieni idonei
Rs0 = ...;
Rp0 = ...;
Ipv0 = ...;

[x,fval] = fminsearch(theJfunction,[ Rs0, Rp0 , Ipv0 ])

% E' la funzione fminsearch che itera finché il valore in uscita alla funzione theJfunction non viene minimizzato secondo il criterio di convergenza
..................
CODICE DELLA FUNZIONE CHE CALCOLA L'OBIETTIVO DA MINIMIZZARE ( pseudocodice )

function [ J ] = myJfunction( x )

% Ricavo le variabili dell' n-esima iterazione
Rs  = x(1);
Rp  = x(2);
Ipv = x(3);

% Scrivo le equazioni calcolando il residuo ( errore )
....equazione 1......   = epsilon1 ;
....equazione 2......   = epsilon2 ;
....equazione 3......   = epsilon3 ;

% Scrivo la funzione obiettivo da minimizzare come somma
% quadratica dei residui
   
J = epsilon1^2 + epsilon2^2 + epsilon3^2;  % <= L'iterazione si fermerà se J viene minimizzato

end
Ingegneria : alternativa intelligente alla droga.
Avatar utente
Foto Utentedimaios
30,2k 7 10 12
G.Master EY
G.Master EY
 
Messaggi: 3381
Iscritto il: 24 ago 2010, 14:12
Località: Behind the scenes

2
voti

[15] Re: Soluzione Sistema di equazioni non lineari con Matlab

Messaggioda Foto Utentedimaios » 26 mar 2012, 17:33

p4ngm4n ha scritto:poi mi chiedo, ma fsolve non serve a niente ?


Leggi bene gli help delle funzioni Matlab.
E' un principio analogo ma gli algoritmi sono diversi.
A seconda del problema in oggetto dovresti utilizzare la tecnica più indicata.
Questo dipende dalla natura delle funzioni ( dati ) a disposizione.
E' un argomento non banale che non riesco a spiegarti in un semplice post.
Ingegneria : alternativa intelligente alla droga.
Avatar utente
Foto Utentedimaios
30,2k 7 10 12
G.Master EY
G.Master EY
 
Messaggi: 3381
Iscritto il: 24 ago 2010, 14:12
Località: Behind the scenes

0
voti

[16] Re: Soluzione Sistema di equazioni non lineari con Matlab

Messaggioda Foto Utentep4ngm4n » 26 mar 2012, 17:39

Grazie, approfondirò a mente libera...

ora mi esce un errrore del tipo: The expression to the left of the equals sign is not a valid target for an assignment.

a cosa è dovuto? a me sembra scritta bene l'equazione
Avatar utente
Foto Utentep4ngm4n
20 5
New entry
New entry
 
Messaggi: 97
Iscritto il: 21 gen 2009, 18:47

1
voti

[17] Re: Soluzione Sistema di equazioni non lineari con Matlab

Messaggioda Foto Utentedimaios » 26 mar 2012, 17:41

Se alleghi il codice ( file ) magari posso anche tentare di correggerlo.
Ingegneria : alternativa intelligente alla droga.
Avatar utente
Foto Utentedimaios
30,2k 7 10 12
G.Master EY
G.Master EY
 
Messaggi: 3381
Iscritto il: 24 ago 2010, 14:12
Località: Behind the scenes

0
voti

[18] Re: Soluzione Sistema di equazioni non lineari con Matlab

Messaggioda Foto Utentep4ngm4n » 26 mar 2012, 17:42

funzione
Codice: Seleziona tutto
function J = myJfunction(x)
x(1)- Iscn -Io*[exp((x(2)*Iscn)/Vt)-1] - (x(2)*Iscn)/x(3)=epsilon1;
x(1)-Io*(exp((Vmpp + x(2)*Impp)/Vt)-1)-(Vmpp + x(2)*Impp)/(x(3))=epsilon2;
x(1)-Io*(exp(Vocn/Vt)-1)-Vocn/x(3)];

J = epsilon1^2 + epsilon2^2 + epsilon3^2;


chiamata, ho messo solo il pezzo di interesse, tutti gli altri valori costanti sono dichiarati sopra
Codice: Seleziona tutto
Io = Iscn/(exp(Vocn/Vt)-1);

Rso=1e-9;
Rpo=20;
Ipvo=1;
[x,fval] = fminsearch(theJfunction,[Rso, Rpo, Ipvo])



Grazie per il tempo dedicatomi
Avatar utente
Foto Utentep4ngm4n
20 5
New entry
New entry
 
Messaggi: 97
Iscritto il: 21 gen 2009, 18:47

1
voti

[19] Re: Soluzione Sistema di equazioni non lineari con Matlab

Messaggioda Foto Utentedimaios » 26 mar 2012, 17:53

Attenzione alle variabili locali e globali.
Le costanti che hai dichiarato nella funzione chiamante non vengono viste all'interno della funzione locale myJfunction.

Usa il comando GLOBAL per farle vedere ove ti serve oppure per fare una prova veloce e capire se il resto è a posto copiale dentro la funzione locale.
Per il reference del comando Matlab guarda qui
Ingegneria : alternativa intelligente alla droga.
Avatar utente
Foto Utentedimaios
30,2k 7 10 12
G.Master EY
G.Master EY
 
Messaggi: 3381
Iscritto il: 24 ago 2010, 14:12
Località: Behind the scenes

0
voti

[20] Re: Soluzione Sistema di equazioni non lineari con Matlab

Messaggioda Foto Utentep4ngm4n » 26 mar 2012, 17:58

dimaios ha scritto: per fare una prova veloce e capire se il resto è a posto copiale dentro la funzione locale.


Avevo già fatto così, ma mi dice : Function definitions are not permitted at the prompt or in scripts.
Avatar utente
Foto Utentep4ngm4n
20 5
New entry
New entry
 
Messaggi: 97
Iscritto il: 21 gen 2009, 18:47

PrecedenteProssimo

Torna a Programmi applicativi: simulatori, CAD ed altro

Chi c’è in linea

Visitano il forum: Nessuno e 19 ospiti