binwidth is not working

Hi;
%statistical parameters
STD_Strain = 25;
Mean_strain = 150;
AN=1000;
Stress = 210000*(STD_Strain.*randn(AN,1) + Mean_strain)*10^-6;
%Stress range-rainflow counting
[c,hist,edges,rmm,idx]=rainflow(Stress)
BinWidth=2;
h=histogram('BinEdges',edges','BinCounts',sum(hist,2))
xlabel('Stress Range')
ylabel('Cycle Counts')
The target of this code is to conduct fatigue analysis.
I tried by many ways to specify the bin width. Still, the result is always bin width = 3.
h =
Histogram with properties:
Data: []
Values: [64 54.5000 67 47.5000 36 27 19 6.5000 5 1 1.5000]
NumBins: 11
BinEdges: [0 3 6 9 12 15 18 21 24 27 30 33]
BinWidth: 3
BinLimits: [0 33]
Normalization: 'count'
FaceColor: 'auto'
EdgeColor: [0 0 0]
What is wrong with my code?
Thank you in advance

3 comentarios

Voss
Voss el 3 de En. de 2023
It seems that the rainflow function does the histogram-binning of the Stress values you give it. (I say that because rainflow returns hist and edges.) Therefore, to modify how the binning is done (e.g., by using a specific bin width), you'll have to modify rainflow.
If you share the code for the rainflow function, then someone can probably show you how to be able to specify your own bin width.
Rik
Rik el 4 de En. de 2023
It is an internal function: rainflow doc page, so modifying it should be avoided. I can't see from the documentation how you can extract the actual values or force it to use a specific binning.
Voss
Voss el 4 de En. de 2023
My mistake. Thanks for pointing that out.

Iniciar sesión para comentar.

Respuestas (1)

Rik
Rik el 2 de En. de 2023
Editada: Rik el 3 de En. de 2023
You're just creating a variable. You do not use that variable as an input argument, or to modify the histogram object after you create it. How is Matlab supposed to know you meant that?
edit:
Below are the two possible ways you can change the code. However, neither will work, because you manually set the bin counts.
%statistical parameters
STD_Strain = 25;
Mean_strain = 150;
AN=1000;
Stress = 210000*(STD_Strain.*randn(AN,1) + Mean_strain)*10^-6;
%Stress range-rainflow counting
[c,hist,edges,rmm,idx]=rainflow(Stress);
BinWidth=2;
h=histogram('BinEdges',edges','BinCounts',sum(hist,2));
xlabel('Stress Range')
ylabel('Cycle Counts')
if false
% option 1:
h.BinWidth=BinWidth;
% option 2:
h=histogram('BinEdges',edges','BinCounts',sum(hist,2),'BinWidth',BinWidth);
end

3 comentarios

Mohamed Zied
Mohamed Zied el 3 de En. de 2023
Thank you for your answer.
I recognize that I am a beginner. can you give some hints how to fix my code? I want to specify bin width.
Thank you in advance.
Rik
Rik el 3 de En. de 2023
The fundamental problem is that you don't provide the original source data to the histogram function, so it can't split bins for you.
You need to explain what exactly the source data is. Then you can use the histogram function as it is intended to be used, instead of a fancier version of the bar function.
Mohamed Zied
Mohamed Zied el 4 de En. de 2023
thank you for you answer.
actually, I am preparing a code to conduct a fatigue analysis based on monitoring. That's why, I generated monitored strain data using the randn function just to verify the code. Later on my research, I intend to conduct monitoring on a real bridge.
I want to control the bin width (stress range) to easily use Miner's rule later.

Iniciar sesión para comentar.

Categorías

Productos

Versión

R2022b

Etiquetas

Preguntada:

el 2 de En. de 2023

Comentada:

el 4 de En. de 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by