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

CONV() liefert falsches Ergebnis

 

Claudia2014

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2014, 18:54     Titel: CONV() liefert falsches Ergebnis
  Antworten mit Zitat      
Hallo,

ich möchte die beiden Funktionen

f = t^2
g = t

miteinander in MatLAB falten. Das Ergebnis ist eigentlich

y=1/12 * t^4

In MatLAB wird mir als Ergebnis jedoch etwas angegeben, was nicht 1/12 t^4 ist sondern etwas anderes.
Hier mein Code:

Code:

t1=[0:1:10];
t2=[0:0.5:10];

f = (t>0).*t.*t;
g = (t>0).*t;
y = conv(g,f);

subplot(2,2,1); plot(t1,f);
subplot(2,2,2); plot(t1,g);
subplot(2,2,3); plot(t2,y);
 


Hier das Ergebnisbild. Unten links ist die Faltungsfunktion, die nicht einer t^4-Funktion entspricht.

Woran liegt das? Was mache ich falsch? Ich finde bei google leider immer nur Beispiele für die diskrete Faltung (wo also Vektoren eingegeben werden). Ich möchte aber kontinuierliche Funktionen wie t^2 und t falten. Deswegen weiß ich auch nicht genau, warum der Vektor t2 für die Darstellung die doppelte Länge haben muss.

Liebe Grüße,

Claudia

conv.jpg
 Beschreibung:

Download
 Dateiname:  conv.jpg
 Dateigröße:  17.99 KB
 Heruntergeladen:  626 mal


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.04.2014, 19:10     Titel:
  Antworten mit Zitat      
Hallo,

hier wäre es doch sinnvoller, symbolisch zu arbeiten, siehe z.B.
http://www.mathworks.com/matlabcentral/answers/86136

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2014, 15:46     Titel:
  Antworten mit Zitat      
Das Beispiel hilft mir leider nicht weiter, da kommen bei mir nur Fehler. Ich kann die Funktionen noch nichtmal vernünftig definieren.

Code:

syms x;
f(x) = gaussmf(x,[3,0]);
h(x) = normpdf(x,0,4)


Zitat:
??? Error using ==> mupadmex
Error in MuPAD command: DOUBLE cannot convert the input
expression into a double array.

If the input expression contains a symbolic variable, use the
VPA function instead.

Error in ==> sym.sym>sym.double at 936
Xstr = mupadmex('symobj::double', S.s, 0);

Error in ==> sym.sym>privformatscalar at 2646
x = double(x);

Error in ==> sym.sym>privformat at 2631
s = privformatscalar(x);

Error in ==> sym.sym>sym.subsasgn at 1433
[inds{k},refs{k}] = privformat(inds{k});

Error in ==> Untitled2 at 3
f(x) = gaussmf(x,[3,0]);


Aber warum wird denn in meinem Beispiel was Falsches errechnet?

Ich habe mal dieses Beispiel versucht zu übertragen: http://www.mathworks.de/de/help/matlab/math/convolution.html

Aber da kommt auch wieder was falsches raus

Code:
f=[1 0 0];
g=[0 1 0];
y=conv(f,g)


liefert
Code:


Wenn ich den Vektor als Polynomkoeffizienten interpretiere, hieße das ja: y = t^3. richtig wäre aber 1/12 t^4.

Ich komm hier leider einfach nicht weiter.

Liebe Grüße,

Claudia
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.04.2014, 19:15     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Das Beispiel hilft mir leider nicht weiter, da kommen bei mir nur Fehler.

Weil du versuchst, Funktionen die für Doubles ausgelegt sind, mit symbolischen Variablen zu nutzen. Dass du so etwas vorhast, konnte ich aus deinem Beitrag nicht ahnen.

Zitat:
Wenn ich den Vektor als Polynomkoeffizienten interpretiere, hieße das ja: y = t^3. richtig wäre aber 1/12 t^4.

Sorry, aber nicht die Ergebnisse sind falsch sondern deine Interpretation der Ergebnisse. Im Link ist vom Produkt zweier Polynome die Rede, nicht von der Faltung. Und t^2 * t ist ja in der Tat t^3.

Wenn du die diskrete Faltung verwenden willst, um daraus die Faltung von Funktionen zu bestimmen, dann muss man sich überlegen, wie das sinnvoll möglich ist. CONVN ist jedenfalls eine Standardfunktion, und ich halte es für sehr unwahrscheinlich, dass sie falsche Ergebnisse liefert. Wahrscheinlicher dürfte sein, dass die Ergebnisse falsch interpretiert werden.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
vega1013
Forum-Century

Forum-Century


Beiträge: 162
Anmeldedatum: 26.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2014, 20:07     Titel:
  Antworten mit Zitat      
Hallo Harald und Claudia,

vielleicht kann ich ein wenig helfen. Wie Harald schon geschrieben hat handelt es sich beim conv Befehl um die diskrete Faltung. Bei deinem ersten (nicht lauffähigen!) Beispiel wolltest du zwei Funktionen falten, die nicht gleichmäßig "abgetastet" waren. t1 hatte eine Schrittweite von 1 und t2 von 0.5. Dies muss dann zu einem Fehler führen.

Ich habe das Beispiel mal angepasst und hoffe damit ein wenig Licht ins Dunkel bringen zu können:


Code:

t=[0:1:10];

f = t.*t;
g = t;
y = conv(g,f);
plot(t(1:length(t)),y(1:length(t)));
hold on,
plot(t,t.^4/12,'ro--')
 


Übrigens ist dein zweites Beispiel für eine diskrete Faltung völlig korrekt.
Code:

f=[1 0 0];
g=[0 1 0];
y=conv(f,g)

y =

     0     1     0     0     0
 



Vg
Vega
Private Nachricht senden Benutzer-Profile anzeigen
 
Claudia2014

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2014, 20:58     Titel:
  Antworten mit Zitat      
Besten Dank, das ist das Ergebnis, was ich mir gewünscht hatte.

Hatte mich ja schon im Startpost gewundert, warum der Lösungsvektor von conv eine andere Länge hat. So genau hab ich da bei der diskreten Betrachtung jetzt zwar noch nicht durchgeblickt, aber hiermit kann ich schonmal weiterarbeiten.

Liebe Grüße,

Claudia
 
vega1013
Forum-Century

Forum-Century


Beiträge: 162
Anmeldedatum: 26.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2014, 08:23     Titel:
  Antworten mit Zitat      
Ja genau, schau dir nochmal die diskrete Faltung an, auch im Zusammenhang mit der Ergebnislänge. Hier gibts gute Beispiele im Netz. Dann sollte es klar werden.

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