| 
|  
|  | 
| 
 
 
	
		|  | 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 - 2025
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.
 
 
 |  |