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

Dringende Frage zur Integration von einem Signal

 

Lysop
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2011, 22:12     Titel: Dringende Frage zur Integration von einem Signal
  Antworten mit Zitat      
Hallo Leute...


folgendes Problem:

Ich habe ein Signal in Abhängigkeit von der Zeit.

Dieses Signal muss noch bearbeitet werden, nach folgender Formel:


folgendes habe ich in Matlab:

-Einen Vektor KB_t (in der Formel KB )mit den Ausgangswerten
-einen Zeitvektor t

-
Code:

function y = fkt( x, t,KB )

y=exp(-(t-x)/0.125).*KB.^2;
end

 


und dann den aufruf

Code:

KBF_t=quadl(@(x)Expo(x,t,KB_t),0,t); %hab die Wurzel erstmal weg gelassen
 


Ich möchte das ganze halt vektoriell lösen, weil mit einer forschleife bei über 4 millionen werten...besser nicht Smile

Der Fehler der jetzt immer kommt ist
Error using ==> mtimes
Inner Matrix dimensions must agree.

Das Problem sind ja anscheinend die Grenzen des Integrals...wie kann ich das richtig hinbiegen?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.01.2011, 22:25     Titel:
  Antworten mit Zitat      
Hallo,

dafür müsste KB eine von xi abhängige Funktion, es ist aber wohl ein Datenvektor. Dafür würde ich dann stattdessen CUMTRAPZ verwenden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Lysop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.01.2011, 14:30     Titel:
  Antworten mit Zitat      
Hallo, erstmal danke für die Antwort...

Aber ich habe mir jetzt mal cumtrapz angeguckt und wirklich weiter hilft es mir auch nicht.

Das problem, was sich mir stellt, ist, wie kann ich das ganze ohne forschleife für das t bewältigen?
Wenn er das vektoriell durcharbeitet, wie kann ich dann ein t an die integral-funktion durchgeben?

Ich hoffe, du weißt, was ich meine!



So langsam aber sicher verlier ich den durchblick!
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.01.2011, 15:58     Titel:
  Antworten mit Zitat      
Hallo Lysop,

Zitat:
Das problem, was sich mir stellt, ist, wie kann ich das ganze ohne forschleife für das t bewältigen?

Wenn Du es mit einer FOR-Schleife lösen kannst, poste dochmal den gesamten (relevanten) Code hier. Dann ist es viel einfacher, die nötigen Änderungen einzufügen.

In Deinem ersten Posting schriebst Du:
Zitat:
Der Fehler der jetzt immer kommt ist
Error using ==> mtimes
Inner Matrix dimensions must agree.

In welcher Zeile erscheint denn der Fehler? Hast Du versucht, diese Zeile zu verbessern? Wie?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Lysop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.01.2011, 16:44     Titel:
  Antworten mit Zitat      
Hab das mit einer for-schleife gestern nur teilweise hinbekommen, aber da hatte ich auch das Integral noch nicht dabei. quadl meckert irgendwie immer rum, egal wobei.

Das Problem an der ganzen Sache ist, dass ich aus Datenvektoren auslese.

In der Formel oben kommen zwar t und xsi vor, aber sie müssen unterschiedlich genutzt werden.

Bei dem Integral von xsi = 0 bis t sind es z.b. eigentlich ganzzahlige Werte von 1 - 4 millionen(laufvariablen), da ich 4 millionen messwerte habe.

Bei der Exp-Funktion sind es allerdings wirkliche Zeitwerte, die ich aus einem Zeitvektor auslesen muss.

Besser wäre die Formel wie ich sie im Anhang habe:

Ich habe nämich einmal den Datenvektor KB und einmal den Zeitvektor t
und die gehe ich halt mit der Laufvariablen i = 1: 4 Millionen durch

Ich versuche das ganze jetzt mal mit nested functions...

Formel.JPG
 Beschreibung:

Download
 Dateiname:  Formel.JPG
 Dateigröße:  14.17 KB
 Heruntergeladen:  425 mal
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.01.2011, 17:47     Titel:
  Antworten mit Zitat      
Hallo Lysop,

Zitat:
Hab das mit einer for-schleife gestern nur teilweise hinbekommen, aber da hatte ich auch das Integral noch nicht dabei. quadl meckert irgendwie immer rum, egal wobei.

Wenn Du den Source Code postest und die dazugehörige Fehlermeldung, könnten wir Dir wahrscheinlich viel leichter helfen.
Zitat:
Das Problem an der ganzen Sache ist, dass ich aus Datenvektoren auslese.

Darunter z.B. kann ich mir nämlich nichts konkretes vorstellen.
Zitat:
In der Formel oben kommen zwar t und xsi vor, aber sie müssen unterschiedlich genutzt werden.

Darunter auch nicht.
Zitat:
Bei dem Integral von xsi = 0 bis t sind es z.b. eigentlich ganzzahlige Werte von 1 - 4 millionen(laufvariablen), da ich 4 millionen messwerte habe.

Hier wird nicht klar, was "es" ist.

Wenn Du dagegen Dein Programm zeigst, wird vermutlich auf Anhieb klar, was Du eigentlich berechnest.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.01.2011, 18:04     Titel:
  Antworten mit Zitat      
Hallo,

ich meine, das Problem verstanden und auch korrekt umgesetzt zu haben. Ich meine zudem, dass du mit quadl Schwierigkeiten hast, weil es für dein Problem nicht geeignet ist.
Ich habe das mal für ein Beispielproblem umgesetzt, und wenn ich mich nicht irre, ist das die Lösung deines Problems:

Code:
xi = 0:0.01:1;
t = xi;
KB = xi.*(1-xi);
tau = 125;
KBF = sqrt(1/tau * exp(-t/tau) .* cumtrapz(xi, exp(xi/tau) .* (KB.^2)));
plot(t, KBF)

Hinweis: exp(-t/tau) hängt nicht von der Integrationsvariable ab und wurde daher vorgezogen; das vereinfacht das ganze.

Dies wäre die Lösung des gesamten Problems. Selbst wenn es nicht korrekt ist, sollte nur die eine oder andere kleine Modifikation notwendig sein.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Lysop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.01.2011, 18:20     Titel:
  Antworten mit Zitat      
Ok, das ist alles etwas wirsch.

Ich versuch das ganze jetzt nochmal von ganz vorne:


Ich habe einen Vektor KB (4000000*1 double) da sind meine Messwerte drin
Ich habe einen Zeitvektor t (1*4000000 double) da sind meine Zeitschritte drin (0-3600 sekunden => schrittweite also 1/1200 sekunde)

Ich muss einen neuen Vektor erzeugen- KBF- ,der dementsprechend auch (4000000*1 double) haben muss.

Dieser Vektor wird nach der Formel, die im ersten Beitrag und im vorletzten Beitrag nochmal modifiziert steht!

hätte ich eine forschleife würde das ganze erstmal so aussehen
Code:

for i = 1:4000000
KBF(i) = sqrt(1/0.125*Integral(i));
end;
 


Jetzt muss ich aber bevor ich KBF erzeugen will vorher noch einen Vektor "Integral" erzeugen.

Integral wäre also auch wieder ein< 4000000*1 double> Vektor und dementsprechend:


Code:

Integral(i) = quadl(@(x)Fkt(x,t,i,KB), 1,i);
 


jetzt bräuchte ich also eine Funktion "Fkt* mit den Inputs: x, der Zählvariablen i , dem Zeitvektor t und dem Datenvektor KB

In dieser Funktion sollte stehen:

Code:


function y = Fkt(x,t,i,KB);

y = exp(-(t(i)-t(x))/0.125)*KB(x);
end
 



möchte ich jetzt erstmal testen, ob er Integral erstellt, teste ich es mit der for-schleife mit i

Code:

for i=1:4320000
Integral(i) = quadl(@(x)Fkt(x,t,i,KB_t), 1,i);
end;
 


und erhalte folgende Fehlermeldung:

??? Attempted to access y(13); index out of bounds because numel(y)=1.

Error in ==> quadl at 78
if ~isfinite(y(13))

Was sagt mir das?[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.01.2011, 18:30     Titel:
  Antworten mit Zitat      
Hallo,

hast du meinen Beitrag davor gelesen? Wenn nicht, bitte nachholen.
In deinem Fall wirst du t oder KB transponieren müssen, damit sie die gleichen Dimensionen haben.
Im übrigen integrierst du in deinem Code von 1 ab, in der Formel steht von 0 ab.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Lysop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.01.2011, 20:24     Titel:
  Antworten mit Zitat      
Hallo Harald, ich werd das morgen früh mal ausprobieren...

hab jetzt nur schnell drüber geguckt...dein xsi geht in 0.01 schritten von 0 bis 1...was hat es damit auf sich?


Ich weiß, dass ich von 1 an integriere...aber das problem ist, dass es nicht von 0 an geht.
ich lese ja aus einem Vektor aus mit dem Wert und ein "nulltes Element" existiert ja nicht!

mein erster wert in den vektoren entspricht also dementsprechend dem wert bei t = 0
Private Nachricht senden Benutzer-Profile anzeigen
 
Lysop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.01.2011, 20:52     Titel:
  Antworten mit Zitat      
ok, habs jetzt nochmal schnell ausprobiert...

Ich hoffe, ich habe es richtig gecheckt...xi ist meine Zeitvariable...also bei mir 0:1/1200:3600

wenn ich KB' noch transformiere bekomme ich zum ersten mal einen graphen, der sogar recht passabel aussieht.

Ob die Werte jetzt so stimmen, muss ichmal nachprüfen.

Aber vielen vielen vielen vielen Dank schon mal für die Hilfe. Bin da echt dran verzweifelt!

Auf die Idee, die Exp-Funktion mit t einfach aus der Integration rauszuziehen wäre ich auch nie gekommen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.01.2011, 21:23     Titel:
  Antworten mit Zitat      
Hallo,

ich habe 0:0.01:1 als Testvektor genommen; dafür (und für KB) musst du natürlich deine eigenen Werte verwenden.

xi und t sind beides das Gleiche - ich hatte das xi genannt, weil bei dir die Integrationsvariable so heißt... dieser griechische Buchstabe.

Auf die Idee, das exp mit t herauszuziehen kam ich auch erst, als es mich unter dem Integral "gestört" hat.

Grüße,
Harald

P.S.: Nochmal eine Erklärung zum Unterschied zwischen quadl (sowie allen quad-Funktionen) und (cum)trapz: erstere sind für den Fall gedacht, dass Funktionen gegeben sind, die an beliebigen Stellen ausgewertet werden können. Letztere sind für den Fall diskreter Daten gedacht, wie du sie vorliegen hast.
Private Nachricht senden Benutzer-Profile anzeigen
 
Lysop
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.01.2011, 02:04     Titel:
  Antworten mit Zitat      
ja perfekt, vielen dank!

die werte die dabei rauskommen sind zwar um einiges kleiner als ich gedacht hätte, aber die verläufe sehen insgesamt sehr gut aus...

Jetzt kann ich endlich weiter auswerten. Hab da nämlich 3 * 24h Messungen mit jeweils 4millionen werten pro Stunde....das ist nen ordentlicher datenwulst Very Happy
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 - 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.