|
|
Matrixelemente sinnvoll entfernen (Filterfunktion) |
|
Max24 |

Forum-Fortgeschrittener
|
 |
Beiträge: 60
|
 |
|
 |
Anmeldedatum: 29.06.14
|
 |
|
 |
Wohnort: Deutschland
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.08.2014, 14:40
Titel: Matrixelemente sinnvoll entfernen (Filterfunktion)
|
 |
Hi!
Folgendes soll mein Programm tun:
Eine fertige Zeichenfunktion, mit der sich eine Linie freihand ziehen lässt, gibt eine Reihe von x und y-Werte in zwei Vektoren aus und plottet die Linie.
Eine weitere Funktion macht aus der Linie eine dreidimensionale Röhre (Tube).
Mein Problem ist, dass wenn man beim Zeichnen mit der Maus zu langsam ist, die Tube nicht mehr gleichmäßig sondern stückweise fehlerhaft ist.
Es sammeln sich also an bestimmten Koordinaten zu viele Messwerte.
Wie kann ich es nun schaffen, dass ich nur in einem gewissen Abstand Werte eintrage, bzw die falschen lösche/korrigiere? Ab ca. 0.01 Abstand kommt es zu Fehlern beim Plotten der Tube.
Hier mein Versuch den Code zu optimieren:
Klappt leider so nicht.
Grüße,
Max
|
|
|
|
|
PinkySan |

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 28.05.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.08.2014, 14:58
Titel:
|
 |
Moin.
Coole Idee mit der Freihandzeichnung. Würde das gerne mal in Aktion sehen.
Meine Idee wäre einerseits über den Befehl
alle doppelten Werte zu entfernen.
Eine andere Möglichkeit (vllt auch darauf aufbauend ) ist über
Befehle das ganze auf das von dir gewünschte raster zu legen.
|
|
|
Max24 |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 60
|
 |
|
 |
Anmeldedatum: 29.06.14
|
 |
|
 |
Wohnort: Deutschland
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.08.2014, 15:06
Titel:
|
 |
interp2 funktioniert leider (noch) nicht richtig.
Welches interp ist denn das der Wahl in diesem Fall?
So gehts leider nicht...
Die Werte sind leider auch nicht doppelt, sondern nur nahe beieinander.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 18.08.2014, 15:23
Titel:
|
 |
Hallo,
was klappt denn an deinem ersten Ansatz nicht?
Das Problem könnte darin liegen, dass der Vektor durch das Löschen von Elementen kürzer wird und das in der for-Schleife nicht berücksichtigt wird.
Alternative wäre sowas:
Grüße,
Harald
|
|
|
Max24 |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 60
|
 |
|
 |
Anmeldedatum: 29.06.14
|
 |
|
 |
Wohnort: Deutschland
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.08.2014, 15:26
Titel:
|
 |
Er ruft in meinem Codebeispiel nicht mehr die tube-funktion auf.
Die Spline-Interpolation klang sehr vielversprechend, ich erhalte aber:
Error using griddedInterpolant
Interpolation requires at least two sample points in each dimension.
mit interpn
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 18.08.2014, 15:46
Titel:
|
 |
Hallo,
Zitat: |
Er ruft in meinem Codebeispiel nicht mehr die tube-funktion auf. |
Das sollte nicht weiter überraschend sein, da im Code von so einem Aufruf nichts zu sehen ist...
Wenn x, y, und xs Vektoren sind, dann wäre interp1 deutlich sinnvoller.
Grüße,
Harald
|
|
|
Max24 |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 60
|
 |
|
 |
Anmeldedatum: 29.06.14
|
 |
|
 |
Wohnort: Deutschland
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.08.2014, 16:06
Titel:
|
 |
Habe ich probiert, bekomme die Fehlermeldung, dass meine Werte nicht streng monoton sind.
Im Internet habe ich gelesen dass ich doppelt vorhandene Werte eliminieren muss, davon gibt es komischerweise aber keine. :/
|
|
|
PinkySan |

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 28.05.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.08.2014, 16:22
Titel:
|
 |
Ich meine, dass bedeutet, dass deine x-Werte monoton steigen müssen!!!
Ansonsten versteht der Algorithmus die Werte nicht, auf der einen Seite (dein "ziel-X" ist stetig steigend) auf der anderen Seite (dein "ursprungs-x" ist nicht unbedingt steigend). Wenn nun dein Ziel steigt und dein Original fällt, weiß der Algorithmus nicht, wie er damit umzugehen hat.
Dadurch, dass deine x-Werte ja an einigen Stellen quasi aufeinanderliegen, bedeutet es, dass die Werte um den Punkt schwanken.
1. x-sortieren (sort-Befehl mit index übergeben lassen, damit du auch deine y-Werte in die gleiche Reihenfolge bringen kannst (zu jedem x-gehört ja ein y)
2. danach interpolieren
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 18.08.2014, 20:59
Titel: Re: Matrixelemente sinnvoll entfernen (Filterfunktion)
|
 |
Hallo Max24,
"Klappt nicht" ist nicht hilfreich, um das Problem zu erklären.
Was klappt nicht?
In deinem Code fehlt z.B. ein END oder das zweite IF sollte eigentlich ein ELSEIF sein.
Das Verkürzen während der Schleife ist aber auch ein Fehler.
Wie wäre dies:
Gruß, Jan
|
|
|
Max24 |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 60
|
 |
|
 |
Anmeldedatum: 29.06.14
|
 |
|
 |
Wohnort: Deutschland
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.08.2014, 13:35
Titel:
|
 |
Okay, hi nochmal!
Also die eine hier verbesserte Funktion läuft ganz gut.
Auf jeden Fall treten weitaus weniger Fehler auf.
Nun passiert es aber gerne, dass zu viele Werte abgeschnitten werden, bzw. es treten immer noch Fehler auf, wenn man die Maus zu langsam bewegt.
Gibt es vielleicht eine Alternatividee, wie das Problem zu lösen ist?
Bei der Interpolation bin ich mir nicht sicher.
|
|
|
alsastar112 |

Forum-Fortgeschrittener
|
 |
Beiträge: 54
|
 |
|
 |
Anmeldedatum: 18.12.13
|
 |
|
 |
Wohnort: München
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.08.2014, 14:41
Titel: fspecial
|
 |
Ich habe auch das gleiche problem. ich weiß es nicht wie ich die Ausreißerwerte ausblenden kann. kann man nicht mit Gausian-filter für Bildbearbeitung was machen ! schau mal fspecial in help. Leider habe ich fspecial nicht mit diesem Matlab-Version.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 21.08.2014, 15:20
Titel:
|
 |
Hallo,
Zitat: |
Gibt es vielleicht eine Alternatividee, wie das Problem zu lösen ist? |
Alternativen wird's viele geben, aber nur du wirst sagen können, was da sinnvoll ist. Wir können bestenfalls bei der Implementierung helfen.
Was ich mir noch vorstellen könnte:
- die Distanz aufeinanderfolgender Werte ausrechnen und cumsum darauf anwenden--> Vektor d. Man könnte das als Zeitvektor verstehen.
- Interpolieren mit d als x- und deinen Datenpunkten (x- und y-Werte getrennt voneinander) als y-Werten. xi sollte äquidistant sein, und du bekommst neue x- bzw. y-Werte.
Grüße,
Harald
|
|
|
Max24 |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 60
|
 |
|
 |
Anmeldedatum: 29.06.14
|
 |
|
 |
Wohnort: Deutschland
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.09.2014, 09:59
Titel:
|
 |
Hallo!
Nochmal eine Rückfrage, bzgl. der Sortierung.
Man muss die Daten ja sortieren, bevor man interpoliert.
Also gegeben ist ein Datensatz [x,y].
Mein Code:
Leider erhalte ich auch hier die Fehlermeldung, dass meine Daten unsortiert seien.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 04.09.2014, 10:10
Titel:
|
 |
Hallo,
bitte die Fehlermeldung kopieren, nicht interpretieren, und einen Beispieldatensatz zur Verfügung stellen.
Grüße,
Harald
|
|
|
Max24 |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 60
|
 |
|
 |
Anmeldedatum: 29.06.14
|
 |
|
 |
Wohnort: Deutschland
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.09.2014, 10:37
Titel:
|
 |
Der Datensatz ist ziemlich groß! Das wird ziemlich unübersichtlich!
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
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.
|
|