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

Schrittweise Faltung für beliebige Funktionen

 

enc
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 25.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.10.2011, 21:37     Titel: Schrittweise Faltung für beliebige Funktionen
  Antworten mit Zitat      
Hallo,
habe eine Funktion zur schrittweisen Faltung (Animation) zweier Funktionen geschrieben, wobei eine immer die rect-Funktion ist.
Bei den Versuchen die Faltung für beliebige Funktionen zu verallgemeinern scheitert's aber immer bei der "schrittweisen" Durchführung.

Code:

t = -10 : 0.1 : 10;
faltung(rect(t, 1, 0),  t);

function y = rect(t, Tp, To) % Zeitachse, Impulsbreite, Verschiebung
    y = double(abs(t-To) <= Tp/2);
end

function faltung(X1, t)
    subplot(3,1,1), stem(t, X1);

    for i = t
        X2 = fliplr(rect(t, 1, -i));
        subplot(3,1,2), stem(t, X2);

        X3 = trapz(t, X1.*X2);
        subplot(3,1,3), stem(i, X3); hold on; axis([-10 10 0 inf]);
        drawnow; %pause
    end
end
 
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: 27.10.2011, 10:11     Titel: Re: Schrittweise Faltung für beliebige Funktionen
  Antworten mit Zitat      
Hallo enc,

Was genau scheitert wo und mit welcher Fehlermeldung oder welchem unerwarteten Ergenbis? Ist der gezeigte Code in Ordnung? Wenn ja, was möchtest Du genau verändern?

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 25.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2011, 10:52     Titel:
  Antworten mit Zitat      
Hallo Jan,
der angegebene Code funktioniert und soll nur veranschaulichen wie das Ergebnis aussehen soll. Die Faltung ist in der for-Schleife implementiert, wobei der Index bei jedem Durchlauf an die rect-Funktion als Verschiebungsfaktor übergeben wird.
Nun möchte ich die schrittweise Faltungsoperation nicht nur für rect(), sondern für beliebige Funktionen verallgemeinern. Allerdings finde ich keinen funktionierenden Ansatz.

Am liebsten würde ich den Ausdruck
Code:
X2 = fliplr(rect(t, 1, -i));

durch sowas wie
Code:
X2 = fliplr(X1(t, 1, -i));
ersetzen, wobei X1 die übergebene Funktion ist.
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: 27.10.2011, 12:02     Titel:
  Antworten mit Zitat      
Hallo enc,

Funktioniert das, wenn X1 ein function handle ist und du die Parameter einzeln übergibst?
Code:
X1 = @rect;
X1Data = {t, 1, -i};
X2 = fliplr(X1(X1Data{:}));

Das ist nur ein Versuch, der wohl noch weiter ausgefeilt werden muss.

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 25.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2011, 21:45     Titel:
  Antworten mit Zitat      
Hallo Jan,
die Lösung mit function-handle funktioniert leider nicht.
Es kommt die Fehlermeldung
Code:
??? Undefined function or method 'times' for input arguments of type 'function_handle'.

Auch wenn es funktioniert hätte, würde es nichts am Problem ändern, da bei
Code:
X1 = @rect;

wieder direkt auf rect() zugegriffen wird, was wiederum nicht zur Verallgemeinerung der Faltungsfunktion führt.

Gruß
enc
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: 28.10.2011, 11:59     Titel:
  Antworten mit Zitat      
Hallo enc,

Bitte zeige noch die Zeile, in der der Fehler auftritt. Natürlich muss nicht der Function-Handle selbst multipliziert werden, sondern der Output nach dem Aufruf des Function-Handles als Funktion. Also ist noch etwas Feinarbeit am Programm nötig.

Man kann statt @rect natürlich auch beliebiege andere Funktionen übergeben, z.B. auch anonyme. Wenn das mit allen Integratoren, Nullstellen-Findern, Optimierern, ARRAYFUN, CELLFUN etc funktioniert, sollte das auch für Dein Problem machbar sein.

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