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

Interpolieren für viele Werte auf Kurve

 

kerngehirn
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 17.11.15
Wohnort: ---
Version: MATLAB R2015a
     Beitrag Verfasst am: 23.11.2015, 14:05     Titel: Interpolieren für viele Werte auf Kurve
  Antworten mit Zitat      
Hallo zusammen,

ich bin neu hier, und werde in Zukunft vermutlich einige Anschläge auf die Community ausüben, da ich mich mit Matlab beschäftigen muss zwecks Studium.
Dafür bereits schon jetzt: Danke und Entschuldigung. Very Happy

Los gehts mit meiner ersten Frage:

Ich habe eine Reihe an X-Werten mit dazugehörigen Y-Werten in einer Excel Datei.
Diese Werte gehören zu einer Kurve, die allerdings nicht linear und nicht parabolisch o.ä. ist.
Nun muss ich im Rahmen eines Matlab Programms die Y-Werte zu gewissen X-Werten auf der Kurve finden. Diese X-Werte sind aber nicht unter den Werten, die ich in der Tabelle habe, sondern liegen dazwischen.

Folgende Tabelle:
Code:

X            Y
   
0,049899022   32,3992464
0,09990431    41,01572604
0,149914954   48,43370404
0,199931622   54,50336771
0,299988888   61,28689089
0,350021621   63,76104966
0,400056363   65,78577032
0,500128858   69,16105448
0,600201353   72,53633864
0,700276191   75,38727833
0,750312439   77,07492041
0,80034785    78,94982837
0,899795634   82,13781853
0,949834058   83,33856932
0,999873987   84,20224153
1,049914753   84,87864785
1,200037888   86,72060095
1,250076311   87,92135174
1,400197939   90,10038343
1,450245399   89,27866271
1,500297545   87,40825307
1,550349523   85,57529661
1,599773611   84,26665649
1,69986669    83,0352
1,74991415    82,21347929
1,799959435   81,87864986
1,850004719   81,54382044
1,950094619   81,02397429
2,000140572   80,53933216
2,150286969   77,1752938
2,200336102   75,97904132
2,25038055   75,83147778
2,34984189   75,98576068
2,399890856   74,82696139
2,449944507   72,61947316
2,500001004   69,77528094
2,550058338   66,74382285
2,600115671   63,71236475
2,649544445   61,35503571
2,799692347   57,65391876
2,849738134   57,2067298
2,949825188   57,32358765
2,999868966   57,32583681
3,09995736    57,14306924
3,150001138   57,1453184
3,200044916   57,14756756
3,350179263   56,48015787
3,399601176   55,65840904
3,449650309   54,46215657
3,499701618   52,77901281
3,599799718   50,42396104
3,649844165   50,27639749
3,749930216   50,61797439
3,7999755      50,28314497
3,850023797   49,27415837
3,900072094   48,26517178
3,95012039    47,25618519
4,000166511   46,73408988
4,050211796   46,39926046
4,149675981   45,91683937
4,199721265   45,58200994
4,299807148   45,96104002
4,349855612   44,91460025
4,449945511   44,39475411
4,499992302   43,7228461
4,550038758   43,12584444
4,600085046   42,56629596
4,650131837   41,89438795
4,750224079   40,85019734
4,899735724   39,54605554
 


Ich brauche nun beispielsweise für den X-Wert von 4,09 den zugehörigen Y-Wert.
Tatsächlich brauche ich eigentlich alle Werte von 0 bis 5 in im Abstand von 0,004.
Wie kann ich das in Matlab realisieren?
Ich weiß, das ist interpolieren. Aber ich komm damit noch nicht so klar.

Vielen Dank Smile
Private Nachricht senden Benutzer-Profile anzeigen


Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 24.11.2015, 09:39     Titel: Re: Interpolieren für viele Werte auf Kurve
  Antworten mit Zitat      
kerngehirn hat Folgendes geschrieben:
Wie kann ich das in Matlab realisieren?
Ich weiß, das ist interpolieren. Aber ich komm damit noch nicht so klar.


Was genau hast du probiert, welche Fehlermeldungen kommen.
Hast du dir die Hilfe zur Funktion
Code:

durchgelesen?
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
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: 24.11.2015, 14:21     Titel: Re: Interpolieren für viele Werte auf Kurve
  Antworten mit Zitat      
Hallo kerngehirn,

Herzlich willkommen im Forum.
Fragen zu Matlab sind hier sehr gut aufgehoben. Auf Anschläge stehe ich persönlich weniger.

Kannst Du Excel-Tabelle bereits importieren? Siehe xlsread . Danach benötigst Du eine Interpolation mit interp1 :
Code:
xi = 4.09;
yi = interp1(x, y, xi)

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 17.11.15
Wohnort: ---
Version: MATLAB R2015a
     Beitrag Verfasst am: 29.11.2015, 11:17     Titel:
  Antworten mit Zitat      
Super. Vielen Dank euch beiden Smile
Habe folgendermaßen nun für einen x Wert den zugehörigen y Wert und plotte noch dazu die Werte:

Code:
function Zwischenwertinterpolation(Datei)
%% Laden der Excel-Datei
[num, txt] = xlsread(Datei);

%% Zuweisen der einzelnen Spalten
%
x = num(1:end,1);
y = num(1:end,2);

xi = 4.09;
yi = interp1(x, y, xi)

plot(x, y)


Jetzt benötige ich nur noch eine Möglichkeit, für einen ganzen Vektor xi den dazugehörigen Vektor yi zu erhalten.
Ich habe versucht

Code:
xi = num(1:end,4);
yi = interp1(x, y, xi)


wobei in Spalte 4 der Excel Datei der xi Vektor steht.
Klappt aber nicht. Was mache ich falsch?


Danke Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 29.11.2015, 12:12     Titel:
  Antworten mit Zitat      
Zitat:
Klappt aber nicht.
das ist keine sehr ausführliche fehlerbeschreibung. welche fehlermeldungen werden ausgegeben? wie weicht das ergebniss vom gewünschten ab?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
kerngehirn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 17.11.15
Wohnort: ---
Version: MATLAB R2015a
     Beitrag Verfasst am: 29.11.2015, 17:09     Titel:
  Antworten mit Zitat      
Tut mir leid, ich dachte mein Fehler ist sicher so offensichtlich, dass ich keine Error Meldung posten brauche. Sorry Embarassed

Code:
Error using griddedInterpolant
The coordinates of the input points must be finite values; Inf and NaN are not permitted.

Error in interp1 (line 169)
    F = griddedInterpolant(X,V(:,1),method);

Error in Zwischenwertinterpolation (line 19)
yi = interp1(x, y, xi);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 29.11.2015, 17:46     Titel:
  Antworten mit Zitat      
da steht doch genau was du falsch machst. deine vektoren enthalten inf und/oder nan und das dürfen sie nicht.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
kerngehirn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 17.11.15
Wohnort: ---
Version: MATLAB R2015a
     Beitrag Verfasst am: 30.11.2015, 13:50     Titel:
  Antworten mit Zitat      
ah okay. Hab nicht kapiert, dass xlsread nicht aufhört wenn keine werte mehr in der Spalte stehen. Somit wurden ab Zeile 78 nur noch leere Zellen eingelesen, was dann in NaN endet.
Gibt es eine Möglichkeit, nur bis zur letzten gefüllten Zelle einzulesen? Automatisch meine ich, ohne jedes mal in die Datei gucken zu müssen?
Habe schon was von isnan gelesen. Das scheint mir aber unnötig kompliziert zu sein, alles einzulesen und dann die NaNs zu löschen.

Danke & Grüße
Florian Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 30.11.2015, 14:13     Titel:
  Antworten mit Zitat      
Zitat:
Das scheint mir aber unnötig kompliziert zu sein, alles einzulesen und dann die NaNs zu löschen.
das sind zwei schritte. ich halte das nicht für sehr kompliziert. es ist viel schwieriger nur "benötigte" werte einzulesen denn um zu entscheiden ob sie benötigt sind muss man sie ja erstmal einlesen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
kerngehirn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 17.11.15
Wohnort: ---
Version: MATLAB R2015a
     Beitrag Verfasst am: 30.11.2015, 18:03     Titel:
  Antworten mit Zitat      
Okay. Ja ist nicht wirklich kompliziert, dachte nur da gibt es evtl. einen Befehl für.

Ich möchte nun das gleiche mit einer Matrix machen.

Ich möchte eine für eine Matrix

Code:

M =

1  2  3
2  3  4
3  4  5

 


die Werte zwischen den Spalten interpolieren. sodass am Ende eine Matrix mit 9 Spalten entsteht:

Code:

N =

1  x  x  2  x  x  3  x  x
2  x  x  3  x  x  4  x  x
3  x  x  4  x  x  5  x  x
 


Die x-Werte sollen interpoliert werden, dabei ist natürlich x nicht immer die gleiche Zahl, wollte nur nicht das halbe Alphabeth nehmen um die Variablen zu schreiben.

Als Referenz habe ich den Zeilenvektor

Code:

Z =

0,1  0,3  0,5  0,6  0,7  0,9  1,3  1,5  1,9


Ich hoffe es ist klar, was ich machen möchte.
Ich habe es mit interp1 versucht, aber komme mit Zeilen und Spalten irgendwie nicht klar.
Private Nachricht senden Benutzer-Profile anzeigen
 
kerngehirn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 17.11.15
Wohnort: ---
Version: MATLAB R2015a
     Beitrag Verfasst am: 30.11.2015, 18:40     Titel:
  Antworten mit Zitat      
Code:
function Zwischenwertinterpolation(Datei)
%% Laden der Excel-Datei
[num, txt] = xlsread(Datei);

%% Zuweisen der einzelnen Spalten
%
CTODab = (num(52-5:2827-5,7)+num(52-5:2827-5,8))/2;
COD1ab = (num(52-5:2827-5,9)+num(52-5:2827-5,10))/2;
COD2ab = (num(52-5:2827-5,11)+num(52-5:2827-5,12))/2;
COD3ab = (num(52-5:2827-5,13)+num(52-5:2827-5,14))/2;

Messpunkte = [0 31 62 93]

mm = linspace(0, 125, 2000) %[0 31 62 93 125]

M = [CTODab.'; COD1ab.'; COD2ab.'; COD3ab.'];
M = M.';

Mi = interp1(Messpunkte, M, mm, 'spline');

Mi


Zitat:
Error:
Code:
Error using griddedInterpolant
The grid vectors do not define a grid of points that match the given values.

Error in interp1 (line 183)
        F = griddedInterpolant(Xext,V,method);

Error in Zwischenwertinterpolation (line 19)
Mi = interp1(Messpunkte, M, mm, 'spline');


Ich komme nicht weiter..
Private Nachricht senden Benutzer-Profile anzeigen
 
kerngehirn
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 17.11.15
Wohnort: ---
Version: MATLAB R2015a
     Beitrag Verfasst am: 30.11.2015, 19:19     Titel:
  Antworten mit Zitat      
Ich habs. Die Matrix M so interpoliert und dann Mi Transponiert:

Code:
function Zwischenwertinterpolation(Datei)
%% Laden der Excel-Datei
[num, txt] = xlsread(Datei);

%% Zuweisen der einzelnen Spalten
%
CTODab = (num(52-5:2827-5,7)+num(52-5:2827-5,8))/2;
COD1ab = (num(52-5:2827-5,9)+num(52-5:2827-5,10))/2;
COD2ab = (num(52-5:2827-5,11)+num(52-5:2827-5,12))/2;
COD3ab = (num(52-5:2827-5,13)+num(52-5:2827-5,14))/2;

Messpunkte = [0 31 62 93];

mm = linspace(0, 125, 10); %[0 31 62 93 125]

M = [CTODab.'; COD1ab.'; COD2ab.'; COD3ab.'];
MT = M.';

Mi = interp1(Messpunkte, M, mm, 'spline');

Mi = Mi.';

MT
mm
Mi
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.