|
|
Mehrmaliges Ausführen, jedes Mal verschiedene Werte?? |
|
Jools |
Forum-Newbie
|
|
Beiträge: 2
|
|
|
|
Anmeldedatum: 05.09.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.09.2012, 09:34
Titel: Mehrmaliges Ausführen, jedes Mal verschiedene Werte??
|
|
Hallo ihr Lieben,
ich bin leider nicht so bewandert im programmieren aber wie kann das sein: ich habe ein Programm geschrieben, und jedes Mal wenn ich es aufrufe liefert Matlab mir andere Werte-woran kann das liegen?? Rundet Matlab jedes Mal anders?! Ich verstehe die Welt nicht mehr...
Achja, mein Programm beginnt mit
clc
clf
clear all
Am überschreiben kanns also nicht liegen oder?!
Danke für eure Hilfe!
|
|
|
|
|
tschun |
Forum-Fortgeschrittener
|
|
Beiträge: 73
|
|
|
|
Anmeldedatum: 05.04.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.09.2012, 09:43
Titel:
|
|
Hi,
Matlab rundet nicht jedesmal anders.
Aber vielleicht postest du dein Programm? Einfach ins Blaue raten ist nicht so toll.
|
|
|
Jools |
Themenstarter
Forum-Newbie
|
|
Beiträge: 2
|
|
|
|
Anmeldedatum: 05.09.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.09.2012, 09:48
Titel:
|
|
|
|
|
Hallo Tschun,
es ist bestimmt nicht schön programmiert aber hier ist das Programm:
% Definition dreier Testsignale und Berechnung des überlagerten
% Eingangssignals nach Zeitverzögerung
% Reidentifizierung des Time-Delay anhand von Least-Squares-Schätzung
%Entscheidungsregel1: Identifizieren die 3 Parameter als Delays mit
%geringster Abweichung von 1
clc
clf
clear all
noise=1 % Ist Wert auf 1 gesetzt --> Noise
%------------------Definition der Input-Signale--------------------------
n=10; % Anzahl der Messdaten (entspricht diskreten Zeitpunkten)
tol=0.1;
x=linspace(0,100,101); % diskrete Zeitsprünge
y1=40*sigmoid(x,1,2);
y2=20*sigmoid((x-20),1,1);
y3=60*sigmoid(x,1,1);
gesamt = length(y1);
if length(y1) ~= length(y2) ~length(y3)
display('Achtung: Eingangssignale müssen von gleicher Länge sein!')
break
end
%-------------- Bestimmung des überlagerten Signals ----------------------
Tau1 = 7; %Annahme einer Zeitverzögerung von Tau1 von Signal 1
Tau2 = 20;
Tau3 = 15;
str = ['Tatsächlichen Time-Delays: Tau 1=' num2str(Tau1), ' Tau 2=' num2str(Tau2) ' Tau 3=' num2str(Tau3)];
disp(str)
Tau_max = max([Tau1,Tau2,Tau3]);
for t=1:length(y1)+Tau_max
if (t-Tau1 <= 0 && t-Tau2 <= 0 && t-Tau3 <= 0) | (t-Tau1 > length(y1) && t-Tau2 > length(y1) && t-Tau3 > length(y1))
Y_out(t) = 0 ;
elseif (t-Tau1 <= 0 | t-Tau1 > length(y1)) && (t-Tau2 <= 0| t-Tau2 > length(y1)) && (t-Tau3 > 0& t-Tau3 <= length(y1))
Y_out(t) = y3(t-Tau3);
elseif (t-Tau2 <= 0 | t-Tau2 > length(y1)) && (t-Tau3 <= 0| t-Tau3 > length(y1)) && (t-Tau1 > 0& t-Tau1 <= length(y1))
Y_out(t) = y1(t-Tau1);
elseif (t-Tau1 <= 0 | t-Tau1 > length(y1)) && (t-Tau3 <= 0| t-Tau3 > length(y1)) && (t-Tau2 > 0& t-Tau2 <= length(y1))
Y_out(t) = y2(t-Tau2);
elseif (t-Tau1 <= 0 | t-Tau1 > length(y1)) && (t-Tau2 > 0& t-Tau2 <= length(y1)) && (t-Tau3 > 0& t-Tau3 <= length(y1))
Y_out(t) = y2(t-Tau2)+y3(t-Tau3);
elseif (t-Tau2 <= 0 | t-Tau2 > length(y1)) && (t-Tau1 > 0& t-Tau1 <= length(y1)) && (t-Tau3 > 0& t-Tau3 <= length(y1))
Y_out(t) = y1(t-Tau1)+y3(t-Tau3);
elseif (t-Tau3 <= 0 | t-Tau3 > length(y1)) && (t-Tau2 > 0& t-Tau2 <= length(y1)) && (t-Tau1 > 0& t-Tau1 <= length(y1))
Y_out(t) = y1(t-Tau1)+y2(t-Tau2);
else
Y_out(t) = y1(t-Tau1)+y2(t-Tau2)+y3(t-Tau3); % Annahme des linearen Zusammenhangs
end
end
if noise==1
for i=1:length(Y_out)
Y_out(i)=Y_out(i) +randn;
end
end
%--------------------------------Plot ----------------------------------
subplot(1,2,1)
plot(x,y1,'r')
hold on
plot (x,y2,'m')
hold on
plot (x,y3,'y')
hold on
y=linspace(0,length(Y_out),length(Y_out));
plot(y,Y_out,'b')
xlabel ('Zeit')
ylabel ('Signal')
legend ('Signal1','Signal2','Signal3','überlagertes Signal')
hold off
%-----------------Aufstellen der Systemmatrix für Least-Squares-----------
y1=[y1';zeros(length(Y_out)-length(y1),1)]; % Auffüllen des Eingangssignals bis zur Länge des
y2=[y2';zeros(length(Y_out)-length(y2),1)]; % des Ausgangssignals
y3=[y3';zeros(length(Y_out)-length(y3),1)];
Y_out=Y_out';
%--------------------Implementierung der "many delays"--------------------
%----------------------------alle Delays----------------------------------
Y=y1;
for Tau=1:gesamt
y1=[zeros(1);y1(1:length(y1)-1)];
Y=[Y y1];
end
[Zeilen1,Spalten1] = size(Y);
AnzahlderParametervonSignal1 = Spalten1
Y=[Y,y2];
for Tau=1:gesamt
y2=[zeros(1);y2(1:length(y2)-1)];
Y=[Y y2];
end
[Zeilen2,Spalten2] = size(Y);
AnzahlderParametervonSignal2 = Spalten2-Spalten1
Y=[Y,y3];
for Tau=1:gesamt
y3=[zeros(1);y3(1:length(y3)-1)];
Y=[Y y3];
end
[Zeilen3,Spalten3] = size(Y);
AnzahlderParametervonSignal3 = Spalten3-Spalten2
b=lsqnonneg(Y,Y_out);
%Identifiziere wahrscheinlichsten Delays
b_identifiziert=b;
for i=1:length(b)
bnormiert (i)= norm(b(i)-1);
end
for i=1:3 % Anzahl der Delays % Finde die Stellen im Parametervektor
[Wert,Stelle]=min(bnormiert); % die am nächsten an 1 sind und identi
b_identifiziert(Stelle)=1; % fiziere sie mit 1
bnormiert(Stelle)=1;
end
for i=1:length(b)
if b_identifiziert(i)~=1
b_identifiziert(i)=0;
end
end
b_identifiziert
length(b_identifiziert)
%Ablesen der numerischen Werte von Tau
for i=1:AnzahlderParametervonSignal1
if b_identifiziert(i)==1
Tau1_identifiziert=i-1;
end
end
for i=(AnzahlderParametervonSignal1+1):(AnzahlderParametervonSignal1+AnzahlderParametervonSignal2)
if b_identifiziert(i)==1
Tau2_identifiziert=i-AnzahlderParametervonSignal1-1;
end
end
for i=(AnzahlderParametervonSignal1+AnzahlderParametervonSignal2+1):length(b_identifiziert)
if b_identifiziert(i)==1
Tau3_identifiziert=i-(AnzahlderParametervonSignal1+AnzahlderParametervonSignal2)-1;
end
end
Tau1_identifiziert
Tau2_identifiziert
Tau3_identifiziert
% Vergleich
Delayvektor = [linspace(0,gesamt,gesamt+1) linspace(0,gesamt,gesamt+1) linspace(0,gesamt,gesamt+1)]';
[Delayvektor b b_identifiziert]
%Vergleich mit "richtigen" Taus
if Tau1_identifiziert==Tau1
str=['Tau1 eindeutig identifiziert: ' num2str(Tau1)];
disp(str)
else
str=['Tau1 nicht eindeutig identifiziert! Geschätzter Wert: ' num2str(Tau1_identifiziert) 'Tatsächlicher Wert': num2str(Tau1)];
disp(str)
end
if Tau2_identifiziert==Tau2
str=['Tau2 eindeutig identifiziert: ' num2str(Tau2)];
disp(str)
else
str=['Tau2 nicht eindeutig identifiziert! Geschätzter Wert: ' num2str(Tau2_identifiziert) 'Tatsächlicher Wert': num2str(Tau2)];
disp(str)
end
if Tau3_identifiziert==Tau3
str=['Tau3 eindeutig identifiziert: ' num2str(Tau3)];
disp(str)
else
str=['Tau3 nicht eindeutig identifiziert! Geschätzter Wert: ' num2str(Tau3_identifiziert) 'Tatsächlicher Wert': num2str(Tau3)];
disp(str)
end
%Erfolgstest
if Tau1_identifiziert==Tau1 && Tau2_identifiziert==Tau2 && Tau3_identifiziert==Tau3
display('-------> Alle Taus erfolgreich identifiziert!')
end
%Test auf Fehler
norm(Y*b_identifiziert-Y_out)
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 05.09.2012, 14:24
Titel: Re: Mehrmaliges Ausführen, jedes Mal verschiedene Werte??
|
|
Hallo Jools,
Es ist nicht verwunderlich, dass das Programm jedesmal andere Werte ergibt, wenn die daten mit zufälligen Zahlen verrauscht werden:
.
Das löschen aller geladenen Funktionen aus dem Speicher mit "clear all" ist übrigens reine Zeitverschwendung. Es bringt gar nichts, alle M-Files erneut von der Platte lesen und parsen zu müssen. Wenn Du unbedingt alle Variablen löschen möchtest (was ich aber auch schon für wenig effizient halte), benutze "clear variables".
Gruß, Jan
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|