ich stehe vor dem Problem, dass ich eine anhand von Messwerten erstellte Kurve mit einer Funktion beschreiben möchte. Über ein Polynom (auch 10.Grades) ist dies leider zu ungenau. Über das Basic fitting Tool habe ich gesehen, dass aber eine Spline sehr gut passen würde. Gibt es hier auch die Möglichkeit sich wie beim Polynom die Funktion ausgeben zu lassen und im anschluss ähnlich Polyval dann entsprechend der Werte plotten zu lassen? Ich konnte leider bisher nichts eindeutiges hier im Forum finden.
bisher habe ich die Näherungsfunktion über polyfit erstellt, dies war aber zu ungenau. Mir geht es nun darum ob es mit spline möglich ist für vorhandenen Messwerte (x,y) eine Näherungsfunktion y=..... zu erhalten mit welcher im weiteren Verlauf auch gerechnet werden kann.
Ja das habe ich, funktioniert auch soweit, nur habe ich das Problem, dass die Koeffizienten usw, nur im Workspace zu finden sind und nich im Command Window ausgegeben werden. Wo könnte da der Fehler liegen?
Gibt es die Möglichkeit die Koeffizienten usw. für jeden Spline gesondert zu bezeichnen? Denn ich möchte mehrere Splines zu verschiedenen Wertepaaren erstellen.
Im weiteren Verlauf möchte ich mit den Splines "rechnen".
In Kurzfassung möchte ich das Spline eines Wertepaares erstellen, die einzelnen Punkte vom Spline von denen eines Splines eines anderen Wertepaares subtrahieren und letztendlich die Differenz zum einen grafisch darstellen und zum anderen wieder einen Spline davon bilden.
Ist die so möglich? Ich bin leider noch recht frisch was Matlab angeht.
wenn du dir die daten angucken willst kannst du im workspace doppelklick drauf machen. die ausgabe im command ist nur zur information und nicht um damit zu arbeiten. sie wird normalerweise mit ; unterdrückt. was auch sinnvoll ist.
Zitat:
Gibt es die Möglichkeit die Koeffizienten usw. für jeden Spline gesondert zu bezeichnen? Denn ich möchte mehrere Splines zu verschiedenen Wertepaaren erstellen.
wären unterschiedliche namen. du könntest sie auch in einer struktur ablegen. das wäre einfacher um es automatisch zu bearbeiten.
vieleicht ist es hilfreicher wenn du ein minimalbeispiel zur verfügung stellst. hier nochmal der hinweis auf den thread aus meiner signatur.
grüße
_________________
Hierzu wäre meine Idee die Funktionswerte von pp und pp2 jeweils in eine Matrix schreiben zu lassen um anschließend die Differenz zu bilden. Dieses "Offset" möchte ich dann anschließend ploten und eine Näherungsfunktion über Spline davon bilden.
Meine Frage ist ob das grundsätzlich so oder so ähnlich möglich ist? Für andere Vorschläge bin ich natürlich offen:)
hab das mal ein wenig angepasst um das problem zu verdeutlichen.
polynome neigen dazu zu überschwingen. grade wenn du jetzt versuchst werte weit außerhhalb des gewitteten bereiches zu erstellen kann es da zu stark abweichenden ergebnissen kommen; bei extrapolation muss man da also bei polynomen sehr vorsichtig sein. einfacher wäre es wenn du eine vorstellung vom funktionalem zusammenhang der daten hast. dann kannst du eine spezielle funktion fitten.
_________________
Mir geht es darum das Offset spline1_TK-spline1_TE zu erzeugen um dieses wieder als Spline plotten zu können. Wenn ich dies aber nun mit meinem Code Versuche besteht das Problem, dass ich Aufgrund der unterschiedlichen Matrixdimensionen von spline1_TE und spline1_TK (was auf die Matrixdimensionen von Y_TE und y_TK zurückzuführen ist) folgende Fehlermeldung erhalte:
Code:
??? Error using ==> minus
Matrix dimensions must
agree.
Error in ==> Plot_TE_TK at
104
delta_y=spline1_TK-spline1_TE
>>
Ich habe nun versucht über den folgenden Code die Dimensionen anzupassen, leider gelingt mir das nicht. Ich hätte gerne von Zeile 1 bis Zeile 875 alles in y_TE abgespeichert.
Mit meinem Code bekomme ich allerdings nur Zeile 875 ausgegeben. Wahrscheinlich wieder ein dummer Fehler....aber ich bin in Matlab eben noch blutiger Anfänger.
da ist komma und punkt vertauscht.
dann verstehe ich noch nicht ganz wozu unbedingt der zeit vektor gebraucht wird wenn ehr eh äquidistant ist und bei beiden gleich kannst du auch einfach 1:size nehmen denke ich.
und ich verstehe dann nicht warum du überhaubt das ganze mit splines fitten willst. wenn du davon ausgehst das die messungen von tk und te zur selben zeit sind... was ja durch deinen zeit vektor gegeben ist kannst du die auch einfach gleich voneinandern abzihen. der spline interpolant macht das ganze ehr schlechter. wenn du unterschiedliche zeitgrundlagen hättest müsstest du interpolieren.. aber selbst dann wäre bei den gegebenen daten lineare interpolation viel besser.
das het eh nur eine dimmension. die angabe von beiden ist damit hinfällig.
Zitat:
ch habe nun versucht über den folgenden Code die Dimensionen anzupassen, leider gelingt mir das nicht. Ich hätte gerne von Zeile 1 bis Zeile 875 alles in y_TE abgespeichert.
zu 1) Hier wollte ich die Dimensionen angleichen, so wie der Code dasteht bringt er nichts, das ist klar. Ich habe es quasi "leer" gelassen weil mir die Idee fehlt wie ich 875 Zeilen über alle Spalten einlese.
2) Ich habe aus einer Messung die Temperaturwerte in Kelvin und aus der anderen in °C, damit habe ich die Umrechnung realisiert, bei mir geht das auch so..funktionierte das bei dir etwa nicht?
Ich verstehe nicht ganz wo Komma und Punkt vertauscht ist?
Mit den Splines hast du recht, da lag bei mir ein Denkfehler vor, Vielen Dank!
Für die lineare interpolation müsste ich aber die Messwerte zeitlich splitten oder sehe ich das falsch?
Abschließend ein riesen Dankeschön an dich für deine Mühe:)
zu 1) Hier wollte ich die Dimensionen angleichen, so wie der Code dasteht bringt er nichts, das ist klar. Ich habe es quasi "leer" gelassen weil mir die Idee fehlt wie ich 875 Zeilen über alle Spalten einlese.
das sind absolute grundlagen ich kann dir nur ans herz legen das getting startet von matlab durchzuarbeiten. das kostet nicht viel zeit sondern erspaart dir ne menge.
Zitat:
2) Ich habe aus einer Messung die Temperaturwerte in Kelvin und aus der anderen in °C, damit habe ich die Umrechnung realisiert, bei mir geht das auch so..funktionierte das bei dir etwa nicht?
Ich verstehe nicht ganz wo Komma und Punkt vertauscht ist?
falls du nicht von allen werten 273 abzihen willst und dann noch irgendwo sinnlos ne 15 rumstehen haben willst muss da ein punkt hin.
das dezimaltrennzeichen in matlab ist ein punkt und kein komma.
Zitat:
Für die lineare interpolation müsste ich aber die Messwerte zeitlich splitten oder sehe ich das falsch?
wie gesagt ich verstehe nicht warum du überhaubt da irgendwas mit der zeit machst wenn du eh bei beiden die selbe zeitachse verwendest.
du kannst einfach die werte voneinander abziehen. ich weis nicht ob du da den sinn von interpolation mit iregndwas vertauscht. du brauchst die interpolation wenn du zwei unterschiedliche zeitgrundlagen hättest.
sonst rechnest du da ja im kreis.
dann hast du x1 an t1 und versuchst das auf t1 zu interpolieren... den hast du doch schon...
hmm ok ich kann mich nur immer und immer wiederholen... bitte guck dir das grundlagen kapitel von matlab an. grade was das adressieren von matrizen angeht. du vertauscht immer dimensionen. deine fehler kann man sehr leicht mit dem debugger nachverfolgen.
delta_y hat die diemenson 875x1 und nicht andersrum.
und ich versteh immernoch nicht warum du versuchst das mit nem spline zu interpolieren.
jetzt berechnest du einen neuen offset auf der selben datenbasis die du schon hast.... du ersetzt deine berechneten werde duch komsiche werte die nicht passen.....
wo ist da der sinn?
wozu machst du das?
_________________
Du hast zunächst auf der untersten Hierarchie die Symbole 1, 1:875, : und 1. Mit denen muss alles in Ordnung sein. Eine Stufe höher ist time und delta_y. Die können so einen Fehler auch nicht erzeugen, aber schaue Dir sicherheitshalber die Werte im Debugger an:
Und läuft das noch? Woran kann es dann liegen? Das letzte Symbol ist "spline". Nun, das ist ja eine Funktion - es sei denn, Du hast vorher den Namen für eine Variable verwendet. Aha!
Wenn spline als Variable verwendet wird, sind die Werte von time(1, 1:875) und/oder delta_y(:,1) nicht ganzzahlig positiv, und damit keine regulären Indices.
Lösung: clear spline.
Und dann keine Namen von Matlab-Funktionen mehr als Variablen verwenden. Der editor sollte bei sowas eine Warnung ausgeben!
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
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.