Signal- und Messdatenverarbeitung


Verteilungsfunktionen mit Gewichtung

Python Matlab/Octave
Vorbereitung (Laden von Modulen/Paketen)
from numpy import *
from numpy.random import *
from matplotlib.pyplot import *
%Octave: pkg load statistics
%Matlab: erfordert die Statistics and Machine Learning Toolbox
Generieren von N Werten xi mit i=0N1 einer stetigen Verteilung (normalverteilte Zufallsgröße als Beispiel, mit dem Erwartungswert μ=3 und der Standardabweichung σ=1) mit einer vom Wert abhängigen Annahmewahrscheinlichkeit (verschobene Sigmoidfunktion als Beispiel)
N=100
mu=3
sigma=1
x=zeros(N)
for i in range(0,N):
  x[i]=normal(mu,sigma)
  while random()>1/(1+exp(-(x[i]-mu))):
    x[i]=normal(mu,sigma)
  

plot(x,'o')
show()
N=100;
mu=3;
sigma=1;
x=zeros(1,N);
for i=1:N
x(i)=normrnd(mu,sigma);
while rand>1/(1+exp(-(x(i)-mu)))
x(i)=normrnd(mu,sigma);
end
end
plot(x,'o')
Generieren von N Gewichten gi mit i=0N1, passend zu den xi mit i=0N1 mit invertierter Annahmewahrscheinlichkeit (verschobene Sigmoidfunktion)
g=1+exp(-(x-mu))
plot(g,'o')
show()
g=1+exp(-(x-mu));
plot(g,'o')
Generieren von N Werten xi mit i=0N1 einer diskreten Verteilung (Poisson-verteilte Zufallsgröße als Beispiel, mit der Intensität λ=3) mit einer vom Wert abhängigen Annahmewahrscheinlichkeit (abnehmende Exponentialfunktion als Beispiel)
N=100
Lambda=3
x=poisson(Lambda,N)
x=zeros(N)
for i in range(0,N):
  x[i]=poisson(Lambda)
  while random()>exp(-x[i]/3.0):
    x[i]=poisson(Lambda)
  

plot(x,'o')
show()
N=100;
lambda=3;
x=zeros(1,N);
for i=1:N
x(i)=poissrnd(lambda);
while rand>exp(-x(i)/3)
x(i)=poissrnd(lambda);
end
end
plot(x,'o')
Generieren von N Gewichten gi mit i=0N1, passend zu den xi mit i=0N1 mit invertierter Annahmewahrscheinlichkeit (abnehmende Exponentialfunktion)
g=exp(x/3.0)
plot(g,'o')
show()
g=exp(x/3);
plot(g,'o')
Generieren von K gleichmäßig verteilten Werten ξk mit k=0K1 der Klassengrenzen
K=20
xi=0.5*arange(0,K)-2
plot(xi,'o')
show()
K=20;
xi=0.5*(0:K-1)-2;
plot(xi,'o')
Generieren von K ungleichmäßig verteilten Werten ξk mit k=0K1 der Klassengrenzen
K=20
xi=0.5*(1+arange(0,K)/float(5))**2-3
plot(xi,'o')
show()
K=20;
xi=0.5*(1+(0:K-1)/5).^2-3;
plot(xi,'o')
Kumulative Verteilungsfunktion (sowohl stetige als auch diskrete Verteilungen) linksseitige Stetigkeit:
F=zeros(len(xi))
for i in range(0,len(xi)):
  F[i]=sum((x<xi[i])*g)

F/=float(sum(g))
plot(xi,F,'o')
show()
rechtsseitige Stetigkeit:
F=zeros(len(xi))
for i in range(0,len(xi)):
  F[i]=sum((x<=xi[i])*g)

F/=float(sum(g))
plot(xi,F,'o')
show()
linksseitige Stetigkeit:
F=zeros(1,length(xi));
for i=1:length(xi)
F(i)=sum((x<xi(i)).*g);
end
F=F/sum(g);
plot(xi,F,'o')
rechtsseitige Stetigkeit:
F=zeros(1,length(xi));
for i=1:length(xi)
F(i)=sum((x<=xi(i)).*g);
end
F=F/sum(g);
plot(xi,F,'o')
Wahrscheinlichkeitsfunktion (nur für diskrete Verteilungen)
xi=arange(0,11)
#Bei histogram() werden im letzten Intervall alle Werte auch hinter dem letzten Abfragewert mitgezählt.
#Deshalb wird der letzte Abfragewert noch ein zweites Mal eingetragen, um die Werte genau am letzten Abfragewert und die darüber zu trennen.
P=histogram(x,bins=append(xi,xi[len(xi)-1]),weights=g)[0]/float(sum(g))
plot(xi,P,'o')
show()
xi=(0:10);
P=zeros(1,length(xi));
for i=1:length(xi)
P(i)=sum((x==xi(i)).*g);
end
P=P/sum(g);
plot(xi,P,'o')
Wahrscheinlichkeitsdichtefunktion (nur für stetige Verteilungen)
K=len(xi)
f=histogram(x,bins=xi,weights=g)[0][0:K-1]/float(sum(g))/(xi[1:K]-xi[0:K-1])
step(xi,append(0,f))
show()
f=zeros(1,length(xi));
for i=2:length(xi)
f(i)=sum((x<xi(i)).*(x>xi(i-1)).*g);
end
f=f(2:length(xi))/sum(g)./(xi(2:K)-xi(1:K-1));
stairs(xi,[f,0])