Kennen Sie irgendeine C-Implementierung der Matlab interp1-Funktion (nur 'linear')? Ich kenne einen für Java .
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
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%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.
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%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.
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.
@ 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).
Tags und Links c matlab interpolation linear