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

Interpolation zwischen mehreren Graphen

 

Jens123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.01.2012, 16:28     Titel: Interpolation zwischen mehreren Graphen
  Antworten mit Zitat      
Hallo,

ist es generell möglich zwischen mehreren Graphen zu interpolieren?
Ich habe mal 3 importierte Kurven geplottet (s.h. Anhang), denen Werte zugeordnet sind. Wenn ich die Kurven jetzt mit a10, a20 und a30 benenne, ist es dann möglich Werte von a15 oder a25 zubekommen durch Interpolation?? Sodass sozusagen die gesamte Fläche zwischen den Kurven gedeckt ist. Im Endeffekt möchte ich dann auch z.B: auf a15(80) oder a21(243) zugreifen können.

Vielen Dank schonmal Smile

Graph.jpg
 Beschreibung:

Download
 Dateiname:  Graph.jpg
 Dateigröße:  74.95 KB
 Heruntergeladen:  886 mal


Jens123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.01.2012, 15:34     Titel:
  Antworten mit Zitat      
zumindest zwischen stetig-differenzierbaren Funktionen muss das doch gehen!?
 
Harald
Forum-Meister

Forum-Meister


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

sind die Funktionswerte zu den gleichen x-Werten bekannt, oder sind die Funktionen unterschiedlich gesamplet?

Hast du es selbst schon mit INTERP1 versucht?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.01.2012, 17:41     Titel:
  Antworten mit Zitat      
Hallo Harald,

geht interp1 nicht nur zwischen punkten?

Ich habe jetzt mal aus 2 den Kurven gemittelte Funktionen gemacht (s.h. Anhang). Eine Funktion in y-RIchtung existiert leider nicht, ich habe nur die importierte Wertetabelle. cR50 und cR150 sind die beiden Funktionen im Anhang:

Code:

fops = fitoptions('METHOD','NonlinearLeastSquares');
g = fittype(@(a,b,c,x) a*0.0001*exp(-b*0.05*x)+c,'coefficients',{'a','b','c'},'independent','x','options',fops);
cR50 = fit(t_50,cR_50,g,'StartPoint',[0;max(cR_50);0]);
cR90 = fit(t_90,cR_90,g,'StartPoint',[0;20*max(cR_90);0]);  
cR120 = fit(t_120,cR_120,g,'StartPoint',[0;20*max(cR_120);0]);
cR150 = fit(t_150,cR_150,g,'StartPoint',[0;max(cR_150);0]);
 


t_50,t_70,.. etc. und cR_50 etc. sind importiert aus Tabellen.

Bei den Funktionen cR90 und cR120 habe ich ein Problem. Ich muss ja nen 'StartPoint' angeben. Dachte das wäre ein Punkt durch den die genäherte Funktion geht, bzw. bei dem die Funktion beginnt. Ich bekomme auf jeden Fall eine sehr schlecht angenäherte Funktion für cR90 und cR120 (deshalb 20*max(cR_90)).
Was hat es mit dem 'StartPoint' auf sich bzw. wie bekomme ich das besser hin?? Habe es auch schon erfolglos über die Option 'DiffMaxChange' probiert.
Außerdem muss ich im fittype a*0.0001 und b*0.05 schreiben, damit die Funktion hinkommt. Dachte er sucht sich selber Werte für die Koeffizienten raus!??

Grüße Jens
 
Jens123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.01.2012, 17:42     Titel:
  Antworten mit Zitat      
der Anhang

Unbenannt.jpg
 Beschreibung:

Download
 Dateiname:  Unbenannt.jpg
 Dateigröße:  32.44 KB
 Heruntergeladen:  815 mal
 
Harald
Forum-Meister

Forum-Meister


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

du solltest dich schon entscheiden, ob du interpolieren oder fitten willst.

Ob alle Kurven die gleichen x-Werte haben, weiß ich nun immer noch nicht.

Bei einer Regression sollten die Startpunkte Näherungswerte für die gesuchten Parameter sein.

Wenn du dir das ohnehin als Fläche vorstellst, hätte ich noch einen Vorschlag:

Verwende GRIDDATA oder TRISCATTEREDINTERP, stecke alle Daten da rein und halte dich dabei an die Doku, und nimm
- als x-Werte die gesammelten x-Werte der Kurven
- als y-Werte die jeweiligen a-Werte (z.B. 10, 20, 30) aus dem ersten Beitrag. Hier hilft wohl REPMAT, um die vielen 10er, 20er etc. zu erzeugen, die du brauchst.
- als z-Werte die gesammelten x-Werte der Kurven

Dann sollte das funktionieren.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.01.2012, 20:48     Titel:
  Antworten mit Zitat      
Hallo Harald,

ohne mich auf eins von beidem festzulegen versuche die Werte zwischen den Kurven so aufzufüllen, dass ich die Differenz der beiden Graphen an jeder Stellen beispielsweise in 10 Abschnitte aufteile (s.h. Anhang) und dann auch auf cR70 oder cR80 zugreifen und z.B. cR80(400) abrufen kann.

Ich weiß nicht genau was du mit gleichem x-Wert meinst, cR50 und cR150 sind ja Funktionen. Aber das importierte t_50 und t_150 ist nicht gleich, da stimmen die x-Werte also nicht überein.

Das mit den Startwerten funktioniert auf jeden Fall, vielen Dank dafür!
Jetzt versuche ich den Vorschlag von dir anzuwenden.

Grüße Jens

neu.jpg
 Beschreibung:

Download
 Dateiname:  neu.jpg
 Dateigröße:  34.3 KB
 Heruntergeladen:  789 mal
 
Jens123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.01.2012, 21:05     Titel:
  Antworten mit Zitat      
Die x-Werte sind verschieden. Ich denke dass ich eher fitten will, weil ich nicht einfach die Fläche haben will sondern wie oben im Anhang (neu.jpg) beschrieben auch die Kurven zwischendrin. Gibt es da eine Möglichkeit über die Funktionen zu gehen und nicht über die importierten Datenpunkte?

Gruß Jens
 
Harald
Forum-Meister

Forum-Meister


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

du kannst natürlich an die einzelnen Datensätze Kurven fitten. Nur, wie willst du dann an deine Zwischenwerte kommen? Durch Interpolation der Parameter? Das wirkt mir etwas gewagt.

Falls es hier um ein Projekt oder so geht, vielleicht auch mal mit dem Betreuer besprechen, welche Strategie verfolgt werden soll. Bei der Umsetzung kann man dann eher helfen.

Grüße,
Harald


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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.01.2012, 13:01     Titel:
  Antworten mit Zitat      
Hallo Harald,

kann ich das Problem nicht irgendwie mit einer lookup table lösen? Wenn ich z.B. die erste Zeile mit den Funktionswerten von cR50 und die zweite mit denen von cR90 fülle und die Werte zwischendrin linear unterteile?

Gruß Jens
 
Harald
Forum-Meister

Forum-Meister


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

und genau für sowas könntest du in MATLAB die Funktionen GRIDDATA bzw. TRISCATTEREDINTERP anwenden.

Hast du das denn mal versucht?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.02.2012, 19:27     Titel:
  Antworten mit Zitat      
Ich versuche die gefitteten Funktionen in TRISCATTEREDINTERP einzubauen. Bzw. die Funktionswerte. Bin aber noch auf keinem grünen Zweig. So wie ich das verstanden habe ist das nur mit Datenpunkten möglich (also nicht mit Funktionen). Ich würde die oben erstellten Funktionen aber gerne verwenden und versuche es jetzt über einzelne Funktionswerte. Was mir Rapmat bringen soll verstehe ich nicht so ganz. Das füllt keine Lücken oder setzt Reihen fort sondern bildet sie einfach nochmal ab.
So hatte ich mir das irgendwie vorgestellt:
Code:

o = 1:1:50;
p = [cR50(1:50)';cR90(1:50)';cR120(1:50)';cR150(1:50)'];
data = TriScatteredInterp(o,p,o);


Error using TriScatteredInterp
Input data point locations have invalid dimension.

Gehen tut es bisher nur so:
o = (1:1:50)';
p = [cR50(1:50)];

Gruß Jens
 
Jens123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.02.2012, 18:25     Titel:
  Antworten mit Zitat      
Meinst du das könnte so klappen?
Ich bin nämlich mittlerweile dabei, eine manuelle Linearisierung zwischen den Funktionen zu machen. Also eine Funktion mit zwei Variablen (t und v). Das erweist sich aber auch als ziemlich problematisch. Mit dem TriScatteredInterp Befehl komme ich jedoch ohne Hilfe nicht weiter.

Wenn es denn darüber gehen sollte wäre ich über jede Hilfe dankbar!

Grüße Jens
 
Jens 123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.02.2012, 21:30     Titel:
  Antworten mit Zitat      
oder über fit surface?:

Code:
q = cR150(1:1180);
p = [cR50(1:1180) cR90(1:1180) cR120(1:1180)];
data = TriScatteredInterp(p,q);
a = 1:1:1180;
fopts = fitoptions('METHOD','BiharmonicInterpolant');
h = fittype(@(d,e,v,t) d/(90-50)*(v-t)+e,'coefficients',{'d','e'},'independent',{'v','t'},'options',fopts);
cR = fit(data,a',h,'StartPoint',[0.001;0]);


Fehler: X and Y must have the same number of rows.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.02.2012, 01:20     Titel:
  Antworten mit Zitat      
Hallo,

ich hatte oben an sich ausführlich beschrieben, wie ich das angehen würde. Mit einer kleinen Korrektur:

Hallo,

du solltest dich schon entscheiden, ob du interpolieren oder fitten willst.

Ob alle Kurven die gleichen x-Werte haben, weiß ich nun immer noch nicht.

Bei einer Regression sollten die Startpunkte Näherungswerte für die gesuchten Parameter sein.

Wenn du dir das ohnehin als Fläche vorstellst, hätte ich noch einen Vorschlag:

Zitat:
Verwende GRIDDATA oder TRISCATTEREDINTERP, stecke alle Daten da rein und halte dich dabei an die Doku, und nimm
- als x-Werte die gesammelten x-Werte der Kurven
- als y-Werte die jeweiligen a-Werte (z.B. 10, 20, 30) aus dem ersten Beitrag. Hier hilft wohl REPMAT, um die vielen 10er, 20er etc. zu erzeugen, die du brauchst.
- als z-Werte die gesammelten y-Werte der Kurven

Dann sollte das funktionieren.


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.