WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Mehrmaliges Ausführen, jedes Mal verschiedene Werte??

 

Jools
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 05.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2012, 09:34     Titel: Mehrmaliges Ausführen, jedes Mal verschiedene Werte??
  Antworten mit Zitat      
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!
Private Nachricht senden Benutzer-Profile anzeigen


tschun
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 73
Anmeldedatum: 05.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2012, 09:43     Titel:
  Antworten mit Zitat      
Hi,

Matlab rundet nicht jedesmal anders.
Aber vielleicht postest du dein Programm? Einfach ins Blaue raten ist nicht so toll.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jools
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 05.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2012, 09:48     Titel:
  Antworten mit Zitat      
Hallo Tschun,

es ist bestimmt nicht schön programmiert Sad 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)
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 05.09.2012, 14:24     Titel: Re: Mehrmaliges Ausführen, jedes Mal verschiedene Werte??
  Antworten mit Zitat      
Hallo Jools,

Es ist nicht verwunderlich, dass das Programm jedesmal andere Werte ergibt, wenn die daten mit zufälligen Zahlen verrauscht werden:
Code:
Y_out(i)=Y_out(i) +randn;
.

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.