I got a code in Python that I will write it again in Matlab and get the same plot:
The code is :
npts = 1000 # number of points in uncorrelated data set
Emax = 10. # energy goes from zero to Emax
Ec = 0.1 # correlation energy
kT = 0.25
# create discrete values of Energy
E = np.linspace(0, Emax, npts)
E_extra = np.linspace(0, Emax, 2*npts-1) #sometimes we need this size to convolve
#PLOT 1: Tbar correlated
Tbar = np.random.normal(loc=0., scale=1.0, size=2*npts-1 )
y = np.exp(- ((E-Emax/2.)/Ec)**2)
#convolution between Tbar and correlation energy
Tbar_c = np.convolve(y, Tbar, mode='valid') #valid = no edge effects
# normalize the data (maximum=1, minimum=0)
Tbar_c = Tbar_c - Tbar_c.min()
Tbar_c = Tbar_c/Tbar_c.max()
# plot the correlated data set
ax1.plot(E, Tbar_c)
The plot is (I need the first plot (the one at the top T(E)))
Here is what I have done yet:
clc
clear all
Emax=10;
Ec=0.01;
E=0:0.01:10;
g=exp(-0.5.*((E-Emax).^2)./Ec);
y=rand(1,length(E));
%y=rand(size(E))
T1=conv(y,g,'same');
T=T1./norm(T1);
subplot(3,1,1);
plot(E,T)
The problem is for me here:
Draw random samples from a normal (Gaussian) distribution. in Python we can do it by :
Tbar = np.random.normal(loc=0., scale=1.0, size=2*npts-1 )

4 Kommentare

dpb
dpb am 14 Nov. 2018
Tbar=randn(1,2*npts-1); % base ML function is N(0,1)
Nour Sd
Nour Sd am 7 Dez. 2018
Hello Pouyan,
I'm facing almost the same task which is writing again a python code with matlab. In my code I have the ndimage.filters.convolve(u, Kx) function, so could you please tell me how could I convert it? Thank you in advance :)
Adam Danz
Adam Danz am 8 Dez. 2018
Bearbeitet: Adam Danz am 8 Dez. 2018
Check out the convolution weight function convwf(). Carefully read the documentation to make sure this is doing what your python function does and that inputs are the same and in the same order (or not).
If this isn't want you're looking for, I suggest you open a new question. I'd rather not this thread turn into a Python --> Matlab conversion forum.
Nour Sd
Nour Sd am 8 Dez. 2018
Okay thank you very much :)

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Adam Danz
Adam Danz am 14 Nov. 2018
Bearbeitet: Adam Danz am 14 Nov. 2018

1 Stimme

I can't run your code right now in python so I can't compare the results but most of these lines should be the correct conversion.
See help normrnd to pull numbers from a given gaussian distribution.
npts = 1000; % number of points in uncorrelated data set
Emax = 10; % energy goes from zero to Emax
Ec = 0.1; % correlation energy
kT = 0.25;
% create discrete values of Energy
E = linspace(0, Emax, npts);
E_extra = linspace(0, Emax, 2*npts-1); %sometimes we need this size to convolve
%PLOT 1: Tbar correlated
Tbar = normrnd(0, 1, 1, 2*npts-1)
y = exp(- ((E-Emax/2.)/Ec).*2);
%convolution between Tbar and correlation energy
Tbar_c = conv(y, Tbar, 'same'); %valid = no edge effects
% normalize the data (maximum=1, minimum=0)
Tbar_c = Tbar_c - min(Tbar_c);
Tbar_c = Tbar_c/max(Tbar_c);
% plot the correlated data set
plot(E, Tbar_c)

4 Kommentare

Pouyan Msgn
Pouyan Msgn am 14 Nov. 2018
I use Spyder to run it
dpb
dpb am 14 Nov. 2018
NB: normrnd requires Statistics TB; randn is included in base Matlab
Pouyan Msgn
Pouyan Msgn am 14 Nov. 2018
Thank you very much but one thing: y = np.exp(- ((E-Emax/2.)/Ec)**2) means exp(-((E-Emax/2)./Ec).^2)
Adam Danz
Adam Danz am 14 Nov. 2018
good catch!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

dpb
dpb am 14 Nov. 2018

0 Stimmen

See
doc randn
When looking for something you don't know function name but have a clue about what is,
lookfor keyword
is useful; in this case either
lookfor random
lookfor normal
would lead you there...also just the venerable old
help
can show you what areas are in base Matlab plus the installed toolboxes available...

Kategorien

Produkte

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by