C Implementierung der Matlab interp1 Funktion (lineare Interpolation)

8

Kennen Sie irgendeine C-Implementierung der Matlab interp1-Funktion (nur 'linear')? Ich kenne einen für Java .

    
Luis Andrés García 22.02.2012, 12:35
quelle

9 Antworten

8

Ich habe diese lineare Interpolation selbst implementiert (einige davon sind in Spanisch geschrieben, sorry). Die Funktion encuentraValorMasProximo findet nur den nächsten Wert (elementoMasProximo) und den Index (indiceEnVector) in einem Array (xD) zu einem anderen (xx [i]).

%Vor%

Die Funktion test könnte lauten:

%Vor%

Und sein Ergebnis :

1 2.000000

2 4.000000

3 6.000000

4 8.000000

5 10.000000

6 12.000000

7 14.000000

8 16.000000

9 18.000000

10 20.000000

    
Luis Andrés García 22.02.2012, 21:52
quelle
10

Ich habe Luis 'Code nach C ++ portiert. Es scheint zu funktionieren, aber ich habe es nicht viel überprüft, also seien Sie vorsichtig und überprüfen Sie Ihre Ergebnisse erneut.

%Vor%     
Nikita Rokotyan 04.02.2013 16:38
quelle
6

Ausgezeichnete Implementierungen häufig verwendeter Funktionen finden Sie in dem Buch Numerische Rezepte in C , das angezeigt werden kann kostenlos online. Kapitel 3.1.2 hat ein lineares Interpolationsrezept, der Rest des Kapitels umfasst erweiterte.

Ich kann dieses Buch wärmstens empfehlen, es ist sehr gut geschrieben und deckt eine große Anzahl von Algorithmen ab, die ebenfalls sehr effizient und verständlich umgesetzt werden.

    
jupp0r 22.02.2012 13:39
quelle
5

Es gab Probleme mit dem von Luis vorgelegten C-Code. Zuerst fehlte das encuentraValorMasProximo. Zweitens ist die Array-Reservierung eine Nummer kurz. Ich habe auch die Funktion aufgeräumt. Unten ist der funktionale C-Code mit der Funktion encuentraValorMasProximo (findNearestNeighbourIndex umbenannt).

%Vor%     
user1097111 15.01.2015 20:30
quelle
2

Sie können sich die GSL (Numerical Scientific Library) anschauen. Es gibt viele Matlab-ähnliche Funktionen, darunter auch eindimensionale Interpolation.

Ich bin jetzt an meinem Telefon, tut mir leid, kann keinen Link bereitstellen.

    
Ivan Angelov 22.02.2012 12:51
quelle
2

Ist Ihnen der Matlab Coder bekannt? Es generiert automatisch c / c ++ Code aus Matlab-Code. Wenn Sie das als Teil Ihres Matlab-Pakets haben, könnten Sie einfach die interp1-Funktion ausführen und sehen, was Matlab ausspuckt.

    
prototoast 22.02.2012 13:28
quelle
2

@ user1097111, Ihr Code existiert als Fehler, in der Funktion findNearestNeighbourIndex sollte er if (newDist & gt; = 0 & amp; & amp; newDist & lt; dist) sein, nicht if (newDist & gt; 0 & amp; & amp; newDist & lt; dist).

    
Haiwei Liu 18.06.2015 09:32
quelle
1

siehe lininterp1f in Dateiaustausch.

    
Felipe G. Nievinski 22.10.2013 23:49
quelle
0

Wenn das jemandem in der Zukunft hilft, ist dies eine Version ohne temporäre Arrays und ohne den 0-Bug.

%Vor%     
canesin 23.09.2016 18:22
quelle

Tags und Links