2016-07-28 6 views
4

Ich habe dieses kleine Stück Code, das ich von Matlab nach C++ verschiebe.Portierungscode von Matlab nach C++

Allerdings gibt es eine große Änderung der Werte und Laufzeitfehler, wenn ich versuche, Werte von meinem resultierenden Array anzuzeigen.

XR2 und YR2 sind Arrays mit 7202 Elementen. Sie ändern sich nach dem Code in 3201 Elemente.

Matlab-Code:

XR = so(1,:); 
YR = so(2,:); 
XR2 = XR; 
YR2 = YR; 
i = 1; 
j = 1; 

while(i<=numel(YR2)) 
    if(i>1) 
     if(XR2(i)>0 && XR2(i-1)<0) 
      j = i; 
     end 
    end 
    if(YR2(i)<0.0) 
     YR2(i) = []; 
     XR2(i) = []; 
     i = i - 1; 
    end 
    i = i +1; 
end 

C++ Code:

#include <iostream> 
#include <fstream> 
void main() 
{ 

vector<double> XR2(7202); 
vector<double> YR2(7202); 
ifstream myReadFile1, myReadFile2; 
int h=0; 
myReadFile1.open("XR.txt"); 
myReadFile2.open("YR.txt"); 
while (!myReadFile1.eof()) 
{ 
    myReadFile1 >> XR2[h]; 
    ++h; 
} 
myReadFile1.close(); 
h=0; 
while (!myReadFile2.eof()) 
{ 
    myReadFile2 >> YR2[h]; 
    ++h; 
} 
myReadFile2.close(); 

int i = 0; 
int j = 0; 

while (i < XR2.size()) 
{ 
    if (i > 0) 
    { 
     if ((XR2[i]>0) && (XR2[i-1]<0)) 
     { 
      j = i; 
     } 
    } 
    if (YR2[i]<0.0) 
    { 
     YR2.erase(YR2.begin() + i); 
     XR2.erase(XR2.begin() + i); 
     --i; 
    } 
    ++i; 
} 
} 

Wenn ich versuche, die Werte von YR 2 in C++ angezeigt werden, bekomme ich Zeit fehlerfrei laufen und die Werte vor dem Fehler angezeigt unterscheiden sich auch von den erwarteten Ergebnissen.

Verknüpfung mit den Eingangsdaten (XR und YR) und den erwarteten Ausgangsdaten (XR2 und YR2). Die Daten befinden sich in Textdateien.

https://www.dropbox.com/sh/uy4cxi67rm9dspr/AAApawshcLxa1h0LfBC_rnLla?dl=0

+1

Sind Sie sicher, Thatt des MATLAB-Code tatsächlich relevant zu debuggen Dein C++ Code? Ich würde lieber die Zeit investieren, um einen [MCVE] für Ihren C++ - Code bereitzustellen (was Sie nicht getan haben). Dies ist viel wichtiger, um Ihnen zu helfen, anstatt den laufenden Matlab-Code zu sehen. –

+0

Ich kann vielleicht die Datendatei (es ist ein einfaches 1-dimensionales Array) vor und nach der Schleife in Matlab anhängen. Ich füge die gleichen Werte zu XR2 und YR2 vor der Schleife in C++ hinzu. –

+0

Hast du den Link gelesen, was wirklich benötigt wird, um einen MCVE zu erstellen? 1. aller Post-kompilierbaren Code, Eingabe und erwartete Ausgabe ist auch hilfreich. –

Antwort

1

den gebuchten Code Lesen, so scheint es mir, dass die OP einfach die endgültigen Vektoren on the fly schaffen könnte, nur die gewünschten Werte addiert.

Unter der Annahme, dass die entsandte Logik ist alles, was OP Bedarf, ein komplettes Programm, das die Original-Dateien liest und schreibt die getrimmten Ausgänge kann das sein:

#include <iostream> 
#include <vector> 
#include <string> 
#include <fstream> 
#include <iomanip> 

int main() 
{ 

    std::vector<double> XR2, 
         YR2; 

    std::ifstream ifile_xr("XR.txt"), 
        ifile_yr("YR.txt"); 
    if (!ifile_xr || !ifile_yr) { 
     std::cout << "Error: unable to open input files.\n"; 
     return EXIT_FAILURE; 
    } 

    double x, y; 
    while (ifile_xr >> x && ifile_yr >> y) 
    { 
     if (y >= 0.0) 
     { 
      XR2.push_back(x); 
      YR2.push_back(y); 
     } 
    } 

    std::ofstream ofile_xr("XR2.txt"), 
        ofile_yr("YR2.txt"); 
    if (!ofile_xr || !ofile_yr) { 
     std::cout << "Error: unable to open output files.\n"; 
     return EXIT_FAILURE; 
    } 

    for (size_t i = 0; i < XR2.size(); ++i) { 
     ofile_xr << std::setprecision(15) << XR2[i] << '\n'; 
     ofile_yr << std::setprecision(15) << YR2[i] << '\n'; 
    } 

    return EXIT_SUCCESS; 
}