Salve, sono ancora qui a chiedere il vostro aiuto.
Ho un programma che risolve un sistema non lineare. Lanciandolo ho l'output:
"Optimizer appears to be converging to a point which is not a root.
Norm of relative change in X is less than max(options.TolX^2,eps) but
sum-of-squares of function values is greater than or equal to sqrt(options.TolFun)
Try again with a new starting guess".
A voi sarà ben noto. Quali sono i parametri che mi consigliate di variare per far convergere ad una soluzione?Vi preannuncio che sui valori iniziali non posso fare granché.
Quali sono le tolleranze che mi conviene alzare (TolFun,TolX,...)??
Grazie per l'aiuto.
Soluzione sistema non trovata MATLAB
7 messaggi
• Pagina 1 di 1
0
voti
1
voti
p4ngm4n ha scritto:...Ho un programma che risolve un sistema non lineare. Lanciandolo ho l'output...
Quale programma ? Quale sistema?
"Il circuito ha sempre ragione" (Luigi Malesani)
0
voti
Eccolo:
- Codice: Seleziona tutto
function [fu]=equaz_v(x,z6)
Iph=x(1);
I0=x(2);
VT=x(3);
Rs=x(4);
Rsh=x(5);
ns=1;
Isc=7.61;
Voc=0.61;
Vmpp=0.51;
Impp=7.11;
Rz=zeros(6,6);
Rz(1,1)=1e3;Rz(2,2)=1e3;Rz(3,3)=1e3;Rz(4,4)=1e3;Rz(5,5)=1e2;Rz(6,6)=1e2;
zh(1,1)=x(1)-x(2)*(exp((x(4)*Isc)/(ns*x(3)))-1)-x(4)*Isc/x(5)-Isc;
zh(2,1)=x(1)-x(2)*(exp((Vmpp+x(4)*Impp)/(ns*x(3)))-1)-(Vmpp+x(4)*Impp)/x(5)-Impp;
zh(3,1)=x(1)-x(2)*(exp(Voc/(ns*x(3)))-1)-Voc/x(5);
zh(4,1)=x(1)-x(2)*(exp((Vmpp+x(4)*Impp)/(ns*x(3))))-Vmpp*x(2)/(ns*x(3))*(exp((Vmpp+x(4)*Impp)/(ns*x(3))))+x(2)-2*Vmpp/x(5)-x(4)*Impp/x(5);
zh(5,1)=x(5)-z6;
fu=zh;
- Codice: Seleziona tutto
%programma stima parametri pv
clear all
% mursh=0.25;varrsh=0.001;
% alfarsh=mursh*(mursh*(1-mursh)/varrsh-1);
%
% betarsh=(1-mursh)*(mursh*(1-mursh)/varrsh-1);
%
%
%
% Rsh=1000*betarnd(alfarsh,betarsh,10000,1)+900
Rsh=1000 + 100*randn(1000,1);
for ii=1:1000
ii
z6=Rsh(ii);
x0=[7.61,.2e-9,0.0200,0.20,1100];
options = optimset('Display','iter','LargeScale','off','MaxFunEvals',1e6,'Diagnostic','on','Maxiter',1e6,'MaxPCGiter',400,'TolPCG',1,'TolCon',1e-3,'TolFun',1e-3,'TolX',1e-3);
[x,fval] = fsolve(@equaz_v,x0,options,z6);
x1r(ii)=x(1);
x2r(ii)=x(2);
x3r(ii)=x(3);
x4r(ii)=x(4);
x5r(ii)=x(5);
x0=x;
end
4
voti
Quando si espone un problema di questo tipo bisogna :
[1] Illustrare il problema ( schema del circuito o altro - possibilmente FidoCadJ )
[2] Scrivere il sistema di equazioni che si vuole risolvere ( LaTex )
[3] Criterio di scelta della condizione iniziale
Se non segui questa procedura l'errore per quanto mi riguarda potrebbe essere ovunque.
L'algoritmo risolutivo è solo l'ultimo step da controllare ma prima bisogna vedere se le equazioni sono corrette.
Se per esempio nello script Matlab hai sbagliato un segno come pretendi che le persone possano individuare l'eventuale bug ?
Il post [2] di
Ti sembra un atteggiamento corretto ?
Ingegneria : alternativa intelligente alla droga.
-

dimaios
30,2k 7 10 12 - G.Master EY

- Messaggi: 3381
- Iscritto il: 24 ago 2010, 14:12
- Località: Behind the scenes
0
voti
Chiedo umilmente scusa, il mio non era un atteggiamento irrispettoso.
Volutamente, avevo posto soltanto la domanda cercando di renderla quanto più generale possibile, per poter operare da solo sul codice.
Mi sembra di capire che non esiste una scelta ottimale per raggiungere la convergenza, ma bisogna valutare caso per caso?
In questo caso, a differenza del mio precedente post, dove provavo a svolgere tutto, dal circuito, alle equazioni per giungere al programma, ho già questo codice e mi serve farlo girare.
Spero di aver spiegato perché non ho seguito tutte le buone norme del forum.
Detto ciò, anche se so che non è l'approccio giusto, quali parametri potrei provare a variare per far si da avere una soluzione?
Volutamente, avevo posto soltanto la domanda cercando di renderla quanto più generale possibile, per poter operare da solo sul codice.
Mi sembra di capire che non esiste una scelta ottimale per raggiungere la convergenza, ma bisogna valutare caso per caso?
In questo caso, a differenza del mio precedente post, dove provavo a svolgere tutto, dal circuito, alle equazioni per giungere al programma, ho già questo codice e mi serve farlo girare.
Spero di aver spiegato perché non ho seguito tutte le buone norme del forum.
Detto ciò, anche se so che non è l'approccio giusto, quali parametri potrei provare a variare per far si da avere una soluzione?
2
voti
p4ngm4n ha scritto:Volutamente, avevo posto soltanto la domanda cercando di renderla quanto più generale possibile, per poter operare da solo sul codice.
Operando solo sul codice la rendi più particolare possibile. Partire dalle equazioni o meglio dalla fisica del problema permette di comprendere meglio diverse cose.
p4ngm4n ha scritto:Mi sembra di capire che non esiste una scelta ottimale per raggiungere la convergenza, ma bisogna valutare caso per caso?
Si. Spesso il punto più critico è quello di capire quale possa essere un punto iniziale per convergere in un minimo. Poi, che questo sia anche quello globale è un problema ancora più complesso.
La scelta ed Il setup dell'algoritmo in termini di parametri è fortemente dipendente dalla natura delle funzioni.
Anche il numero delle variabili è una discriminante nella scelta dell'algoritmo.
p4ngm4n ha scritto:In questo caso, a differenza del mio precedente post, dove provavo a svolgere tutto, dal circuito, alle equazioni per giungere al programma, ho già questo codice e mi serve farlo girare.
Da questo devo dedurre che ti hanno dato le equazioni senza lo schema del circuito elettrico e devi farlo convergere alla cieca ?
p4ngm4n ha scritto:Detto ciò, anche se so che non è l'approccio giusto, quali parametri potrei provare a variare per far si da avere una soluzione?
Se la risposta alla domanda 2 è si direi che la cosa migliore sia quella di iniziare scrivendo le equazioni a partire dal codice e cercando di vedere la dipendenza delle stesse dalle 5 variabili.
Siamo proprio sicuri che non si possa ridurre almeno a 4 ?
Quell' x(1) messo in mezzo al "mucchio" selvaggio non ti insospettisce ?
L'osservazione della regolarità e di eventuali minimi a volte può suggerire una condizione iniziale plausibile per cui fare dei grafici mirati per vedere tali dipendenze non è tempo sprecato.
Ingegneria : alternativa intelligente alla droga.
-

dimaios
30,2k 7 10 12 - G.Master EY

- Messaggi: 3381
- Iscritto il: 24 ago 2010, 14:12
- Località: Behind the scenes
0
voti
Lo schema elettrico da cui è ricavato questo modello è quello del mio post precedente.
Con alcuni valori dei parametri noti c'è convergenza, con quelli che vedete nel codice che ho postato, NO.
Purtroppo questo codice, è solo una piccola parte del mio lavoro. Non posso dedicarmi nel dettaglio, come necessario, a questo aspetto.
Ecco perché speravo di risolvere provando un po' con qualche tolleranza più alta o variando qualche altra option.
Non voglio modificare il codice, ad esemio modificando le equazioni, laddove possibile. visto che è un programma funzionante utilizzato con successo per gli stessi scopi che ho io.
Purtroppo con i valori dei parametri noti che ho io, non funziona bene.
Mi rendo conto che per
dimaios questa possa essere una bestemmia, ma sono in questa situazione.
Provo a modificare un po' qualcosa...
Con alcuni valori dei parametri noti c'è convergenza, con quelli che vedete nel codice che ho postato, NO.
Purtroppo questo codice, è solo una piccola parte del mio lavoro. Non posso dedicarmi nel dettaglio, come necessario, a questo aspetto.
Ecco perché speravo di risolvere provando un po' con qualche tolleranza più alta o variando qualche altra option.
Non voglio modificare il codice, ad esemio modificando le equazioni, laddove possibile. visto che è un programma funzionante utilizzato con successo per gli stessi scopi che ho io.
Purtroppo con i valori dei parametri noti che ho io, non funziona bene.
Mi rendo conto che per
Provo a modificare un po' qualcosa...
7 messaggi
• Pagina 1 di 1
Torna a Programmi applicativi: simulatori, CAD ed altro
Chi c’è in linea
Visitano il forum: Nessuno e 3 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)

