Interrompere il grafico ad un valore di y

di il
2 risposte

Interrompere il grafico ad un valore di y

Ciao a tutti, mi scuso per non aver descritto il precedente problema con esattezza.
Ho un numero molto elevato di curve 2d ottenute attraverso 4 diversi parametri (4 cicli for)
Per ciascuna curva devo individuare 2 punti corrispondenti a dei valori di y rispetto al valore max di y (ad esempio punto1 con y=0.60*ymax e punto2 con y=0.75*ymax) ed interrompere il plottaggio di ciascun grafico quando il valore raggiunge y=0.75 (ovviamente nel tratto decrescente, dopo aver raggiunto il valore massimo).
Quali comandi posso utilizzare?

% Script per la post-processione 

clear
close all

MainDir = 'C:\Users\User\Desktop\OpenSees\bin\';
OutputDir = strcat(MainDir,'POST-PROCESSIONE\FIGURE\');
mkdir(OutputDir)

% Lettura dei parametri
param_Alpha=strcat(MainDir,'PARAMETRI\angolo.txt');
param_Alpha=load(param_Alpha);

param_p=strcat(MainDir,'PARAMETRI\armatura_longitudinale.txt');
param_p=load(param_p);

param_v=strcat(MainDir,'PARAMETRI\sforzo_assiale.txt');
param_v=load(param_v);

param_w=strcat(MainDir,'PARAMETRI\armatura_trasversale.txt');
param_w=load(param_w);

% importazione risultati
for x=1:length(param_Alpha)       
    for i=1:length(param_p)
        for j=1:length(param_v)
            for k=1:length(param_w)
               inputDir=strcat("C:\Users\User\Desktop\OpenSees\bin\PARAMETRIZZAZIONE_",num2str(param_Alpha(x)),"\",num2str(param_p(i)),"\",num2str(param_v(j)),"\",num2str(param_w(k)));
               F_BASE=load(strcat("C:\Users\User\Desktop\OpenSees\bin\PARAMETRIZZAZIONE_",num2str(param_Alpha(x)),"\",num2str(param_p(i)),"\",num2str(param_v(j)),"\",num2str(param_w(k)),'\TaglioBase.txt'));
               F_BASE([1,2,3,4,5,6,7,8,9,10],:)=[]
               F_BASE(:,[1,3,4,6,7,9,10,12,13])=[]
               sum(F_BASE, 2)
               
               DISP=load(strcat("C:\Users\User\Desktop\OpenSees\bin\PARAMETRIZZAZIONE_",num2str(param_Alpha(x)),"\",num2str(param_p(i)),"\",num2str(param_v(j)),"\",num2str(param_w(k)),'\DFree1141.txt'));
               DISP([1,2,3,4,5,6,7,8,9,10],:)=[]

               pushover_curve{x,i,j,k}=[1000*DISP(:,2),-0.001*sum(F_BASE,2)];
            end
        end
    end
 end

% plottaggio
fig = figure('InvertHardcopy','off','Color',[1 1 1],'Renderer','painters','Position', [10 10 900 900]);
axes1 = axes('Parent',fig,'FontSize',12,'FontName','times new roman','OuterPosition',[0 0 1 1]);
axis square 
axis ([0 180 0 1000])  
ylabel('Reaction [KN]','FontSize',12,'FontName','times new roman');
xlabel(' Displacement [m]','FontSize',12,'FontName','times new roman');
title(strcat('Curva Pushover - modello M-P2 '));


for x=1:length(param_Alpha)       
    for i=1:length(param_p)
        for j=1:length(param_v)
            for k=1:length(param_w)

axis ([0 180 0 1200])     
curve2plot=pushover_curve{x,i,j,k};
plot(curve2plot(:,1),curve2plot(:,2),'LineStyle','-','LineWidth',0.8,'Color',rand(1,3));
legenda_curva=char(strcat('alpha= ', num2str(param_Alpha(x)), '-p =', num2str(param_p(i)),'-v =' ,num2str(param_v(j)),'-w =',num2str(param_w(k))));
legend(legenda_curva,'Location','southoutside','Orientation', 'horizontal' ,'Interpreter','none','FontSize',12,'FontName','times new roman');

grid on
hold off
axis square 
axis ([0 180 0 1000])  
ylabel('Reaction [KN]','FontSize',12,'FontName','times new roman');
xlabel(' Displacement [m]','FontSize',12,'FontName','times new roman');
title(strcat('Curva Pushover - modello M-P2 '));
outputfilename=strcat(OutputDir,'pushover',num2str(param_Alpha(x)),"-",num2str(param_p(i)),"-",num2str(param_v(j)),"-",num2str(param_w(k)),'.png');
saveas(gcf,outputfilename);

            end
        end
    end
end
[/size]

2 Risposte

  • Re: Interrompere il grafico ad un valore di y

    Non è chiaro come sono distribuiti i valori: ovviamente nel tratto decrescente, dopo aver raggiunto il valore massimo
    Il valore massimo è sempre compreso nell'intervallo?
    Ci possono essere più punti che soddisfano le condizioni y=0.60*ymax e punto2 con y=0.75*ymax?
    Dovresti pubblicare un set di dati di esempio e la descrizione del grafico che intendi creare.
  • Re: Interrompere il grafico ad un valore di y

    Allego il link per visualizzare l'immagine.
    https://drive.google.com/drive/folders/1yv30E08DmbaBLyrgiLVL7hVKSCU8lIwk?usp=sharing

    In pratica vorrei cercare di selezionare il punto contraddistinto nella figura in maniera automatica.
    Eventualmente troncare il grafico in corrispondenza di quel punto (per poi calcolarne l'area sottesa).
    Dovendo svolgere numerose analisi parametriche non potrei selezionarle manualmente
Devi accedere o registrarti per scrivere nel forum
2 risposte