[MatLab] area di un ciclo di isteresi
ciao a tutti.
devo calcolare l'area di un ciclo di isteresi come questo: http://img13.imageshack.us/img13/1554/29017740.jpg
so che è molto irregolare e allora per limitare l'errore (che comunque ci sarà) ho pensato di considerare i quattro punti notevoli:
il punto che presenta la minore delle sigma positive
il punto ad epsilon massima
il punto che presenta la maggiore delle sigma negative
il punto ad epsilon minima.
E chiamiamo questi punti, rispettivamente, S' - emax - S'' - emin.
Se il "delta area" è uguale a [("epsilon con i" - "epsilon con i-1") * ("sigma con i" + "sigma con i-1")/2 ], allora per il computo dell'area totale bisognerà sommare i valori assoluti "delta area" per i punti compresi tra (S' ed emax) e per quelli tra (S'' ed emin), mentre bisognerà sottrarre i valori assoluti "delta area" per i punti compresi tra (emax ed S'') e per quelli tra (emin ed S').
i 4 punti li ho trovati. ora non so come dire mettere comporre i 4 delta area.
in precedenza per calcolare aree composte da segmenti avevo usato questo
la struttura è identica a quella che voglio usare adesso, ma non so come comportarmi con gli estremi di $q$
devo calcolare l'area di un ciclo di isteresi come questo: http://img13.imageshack.us/img13/1554/29017740.jpg
so che è molto irregolare e allora per limitare l'errore (che comunque ci sarà) ho pensato di considerare i quattro punti notevoli:
il punto che presenta la minore delle sigma positive
il punto ad epsilon massima
il punto che presenta la maggiore delle sigma negative
il punto ad epsilon minima.
E chiamiamo questi punti, rispettivamente, S' - emax - S'' - emin.
Se il "delta area" è uguale a [("epsilon con i" - "epsilon con i-1") * ("sigma con i" + "sigma con i-1")/2 ], allora per il computo dell'area totale bisognerà sommare i valori assoluti "delta area" per i punti compresi tra (S' ed emax) e per quelli tra (S'' ed emin), mentre bisognerà sottrarre i valori assoluti "delta area" per i punti compresi tra (emax ed S'') e per quelli tra (emin ed S').
i 4 punti li ho trovati. ora non so come dire mettere comporre i 4 delta area.
in precedenza per calcolare aree composte da segmenti avevo usato questo
k=numel(x); for q=1:k-1 v(q)=(x(q+1)-x(q))*(y(q+1)+y(q))/2;end r=sum(v);
la struttura è identica a quella che voglio usare adesso, ma non so come comportarmi con gli estremi di $q$
Risposte
"apatriarca":
Senza vedere il tuo codice è molto difficile capire cosa stai facendo e cosa ci sia di sbagliato nel tuo metodo.
ho aperto un nuovo post in cui, usando un po' il rasoio di Occam, penso di aver semplificato la trattazione senza però arrivare ad una conclusione

[xdom="apatriarca"]Ho riunito tutte le tue discussioni sullo stesso argomento. Ti invito a evitare di aprire una nuova discussione sullo stesso problema ogni volta che si presenta una qualche leggera differenza. Diventa molto difficile seguire quello che stai facendo o hai capito di nuovo. Inoltre potrebbe essere utile vedere cosa ti è già stato proposto e le tue risposte.[/xdom]
beh adesso il problema è ben delineato nel primo post di questa pagina
Se ho capito bene il tuo problema, vuoi estrarre dalla matrice le righe che soddisfano una qualche condizione (essere uguali ad uno specifico valore nel tuo caso). Un metodo potrebbe essere il seguente (non ho modo di verificarlo in matlab):
cycles = unique( A(:,7) ); for c = cycles rows = cycles( cycles(:,7) == c , : ); % lavora su rows.. end
"apatriarca":
Se ho capito bene il tuo problema, vuoi estrarre dalla matrice le righe che soddisfano una qualche condizione (essere uguali ad uno specifico valore nel tuo caso). Un metodo potrebbe essere il seguente (non ho modo di verificarlo in matlab):
cycles = unique( A(:,7) ); for c = cycles rows = cycles( cycles(:,7) == c , : ); % lavora su rows.. end
$polyarea$ ha bisogno di 2 vettori in input $(x,y)$.
In questa immagine ho selezionato le $y$ del ciclo $6$ ad esempio; la stessa selezione ma nella colonna 3 mi avrebbe dato le $x$. http://img856.imageshack.us/img856/7946/immaginesp.jpg
per ogni ciclo devo avere un risultato da $polyarea$, e plottarlo in un grafico $N_(ciclo),Area$. mi aspetto di trovare questo: http://img5.imageshack.us/img5/2122/wp000014p.jpg
Se vuoi estrarre due colonne separate puoi scrivere le colonne che ti interessano invece dei due punti in cycles( cycles(:,7) == c , : ). Qualcosa tipo cycles( cycles(:,7), 3 ).
prendendo spunto dalla func
C = unique(A)ho provato una cosa del genere. mi da errore plottando però mi sembra che ci fossi vicino
function [] = Diagramma_Area_Isteresi() %UNTITLED2 Summary of this function goes here % Detailed explanation goes here clc, clear all, close all % la matrice M viene creata qui M=xlsread ('esempio.xls'); Nciclo=unique(M(:,7));% vettore riga con tutti gli ID dei cicli Area=zeros(1,length(Nciclo));% inizializzo il vettore riga delle aree for jjj=1:length(Nciclo) qualirighe=find( M(:,7)==Nciclo(jjj) ); % cerco le righe di M in cui sono presenti i dati % relativi al ciclo attualmente considerato. Area(jjj)=polyarea( M(qualirighe,3) , M(qualirighe,4) ); end plot(Nciclo,Area);% plotto il grafico end
Se fai il plot dei singoli cicli, vedi quelli corretti? Se sicuro che polyarea dia alla fine il risultato corretto. Mi sembra avessimo dei dubbi all'inizio di questa discussione..
"apatriarca":in che senso? l'area del singolo ciclo?
Se fai il plot dei singoli cicli, vedi quelli corretti?
"apatriarca":
Se sicuro che polyarea dia alla fine il risultato corretto. Mi sembra avessimo dei dubbi all'inizio di questa discussione..
diciamo che quadra con quello a cui voglio arrivare. è un lavoro per una tesi triennale di ingegneria meccanica. non ho le competenze informatiche vaste e tempo per acquisirle. quindi in accordo con la relatrice mi aggiusto un po' per volta. purtroppo conoscendo solo pochi comandi basilari (for, while....) ogni volta che faccio un passo in avanti scopro che esiste un comando che fa al caso mio. ovviamente dopo un minimo di ragionamento.
mi da errore plottando però mi sembra che ci fossi vicino
Non avevo capito il significato di questa tua frase.. Cosa non va con la tua ultima soluzione?
erroraccio di scrittura. adesso ho risolto; mi da i risultati che mi aspettavo.
bene. vediamo ora la mia relatrice cosa si inventa di nuovo da farmi fare
bene. vediamo ora la mia relatrice cosa si inventa di nuovo da farmi fare
