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

interp2als Funktion in ode45

 

Ahnungslos

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2014, 13:03     Titel: interp2als Funktion in ode45
  Antworten mit Zitat      
Hallo,

ich versuche seit einiger Zeit den interp2-Befehl in die ode45-Funktion einzubinden.
Im 1-D Fall klappt es auch wunderbar, aber im 2-D Fall bekomme ich folgende Fehlermeldung:
Code:

??? Subscript indices must either be real positive integers or logicals.

Error in ==> interp2>linear at 344
    F =  ( arg3(ndx).*(onemt) + arg3(ndx+1).*t ).*(1-s) + ...

Error in ==> interp2 at 220
    zi = linear(ExtrapVal,x,y,z,xi,yi);

Error in ==> @(aq,bq)interp2(i,j,gij,aq,bq)


Error in ==> @(i,j)g(i,j)


Error in ==> ode45 at 324
    f(:,2) = feval(odeFcn,t+hA(1),y+f*hB(:,1),odeArgs{:});

Error in ==> Strainlines at 158
gout = ode45(@(i,j)g(i,j),tspan, g0);
 

Hier ist mein Code, einmal 1-D (funktioniert) und mein Problemfall 2-D:
Code:

%%%% Interpolation und ODE %%%%
% Bsp 1-Dim:
fh = [1 2 3 4 5 6 7 8 9 10];
h = 1:10;
f = @(hq)interp1(h,fh,hq);
tspan = [0 1];
h0 = 2;
hout = ode45(@(t,h)f(h),tspan,h0);

% Bsp 2-Dim
gij = [10 9 8 7 6 5 4 3 2 1; 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
i = 1:10;
j = 1:2;
g0 = 1;
tspan = [0 1];
g = @(aq,bq)interp2(i,j,gij,aq,bq);
gout = ode45(@(i,j)g(i,j),tspan, g0);
 


Bin für jede Hilfe dankbar, weil ich seit einer Woche daran hänge und es einfach nicht begreife.


Harald
Forum-Meister

Forum-Meister


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

mit welcher MATLAB-Version arbeitest du?
Bei mir läuft dein Code unter R2014a durch.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2014, 15:15     Titel:
  Antworten mit Zitat      
Ich benutze matlab 2010b.

Gibt es eine Möglichkeit den Code irgendwie 2010 konform anzupassen?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.03.2014, 17:51     Titel:
  Antworten mit Zitat      
Hallo,

ich würde erwarten, dass griddata hier das gleiche macht, also
Code:
g = @(aq,bq)griddata(i,j,gij,aq,bq);

sollte funktionieren.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2014, 11:07     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine Hilfe. Es funktioniert jetzt.

Kannst du mir auch erklären, wieso es mit griddata funktioniert (matlab merkt hier übrigens an: "not recommended, use TriScatteredinterp instead") und mit interp2 zu Problemen kommt?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.03.2014, 11:26     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
(matlab merkt hier übrigens an: "not recommended, use TriScatteredinterp instead")

Du kannst ja mal TriScatteredInterp versuchen.

Zitat:
Kannst du mir auch erklären, wieso es [...] interp2 zu Problemen kommt?

Ist mir auch nicht klar, insbesondere da es ja in neueren Releases möglich ist.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2014, 12:21     Titel:
  Antworten mit Zitat      
Dann nochmals vielen Dank!
Ich werde mich dann an griddata, bzw. TriScatteredInterp halten.
 
Ahnungslos

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.03.2014, 13:15     Titel:
  Antworten mit Zitat      
Hallo,

noch eine Anmerkung von mir:

Mit griddata funktioniert der ode-Befehl jetzt zwar, jedoch ist die Interpolation nicht sinnvoll für meinen Fall.
Liegt vermutlich daran, dass ich keine verteilten Datenpunkte habe, sondern gleichverteilte.
So wie ich die Dokumentation von griddata verstanden habe nutzt dieser eine Delaunay-Triangulation, die bei einem gleichverteilten Gitter von Werten so richtig anwendbar ist.
 
Ahnungslos

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.03.2014, 15:13     Titel:
  Antworten mit Zitat      
Hallo,

habe den Fehler mitlerweile gefunden.
Es lag daran, dass kein Extrapolationswert in interp2 angegeben war. Daher erzeugte das Programm innerhalb von ode45 den Wert NaN, sobald er das Gebiet verlassen hat.
Mit einer extrapval-Angabe läuft es durch.

Nun das nächste Rätsel:

Gebe ich Matlab eine 2x2 Matrix mit 4 beliebigen Einträgen auf dem Gebiet x = 1:2, y = 1:2, lasse ihn mit interp2 (mit dem Extrapolationswert 10) in 0.5-Schritten die Werte auf dem Gebiet 0.5 bis 2 bestimmen und lasse es diese mit ode45 integrieren bekomme ich die "Wege" von meinen Startkoordinaten bis zu diesem Extrapolationswert. Vollkommen unabhängig von meiner gegeben Matrix.

Was mache ich diesmal falsch? Rolling Eyes

Ich bin dankbar dür jede Hilfe!!

hier mal mein Programm:
Code:
clear all;
close all;
clc;

A = rand(2, 2);
x = 1:2;
y = x;
[X, Y] = meshgrid(x, y);
xi = 0.5:0.5:2;
yi = xi;
[Xi, Yi] = meshgrid(xi, yi);

tspan = 0:0.2:1;

B = @(xq,yq)interp2(X, Y, A, xq, yq, 'linear', 10);

[T,C] = ode45(B, tspan, [Xi,Yi]);
 
 
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.