Zamiana kodu z MatLab na C++

0

Witam,

Od dwóch dni spędza mi sen z powiek pewien problem, mianowicie nie mogę zamienić kodu z MatLab na c++ tak abym uzyskiwał takie same wyniki w obu przypadkach. Zakładam, że kod w MatLabie jest prawidłowy, sam próbuję coś naskrobać w c++.

Oto kod w MatLab:

clear all; 
clc;
R=1;            
L=.03;          
kb=1;           
ki=0.5;         
J=.001;         
nr=50;          
b=.1;           
x=[0;0;0;0];    
dt=4*10^-5;
tmax=10000*dt; 
maxit=tmax/dt;  
kp=50;
for i=1:maxit           
    U1=100*(sin(kp*i*dt));
    if (U1>0)
        U(1)=-12;
        U(2)=12;
    else
        U(1)=12;
        U(2)=-12;
    end;                                                           
    x(1)=x(1)+dt*x(2); 
    x(2)=x(2)+dt*(-kb*x(3)*sin(nr*x(1))+kb*x(4)*cos(nr*x(1))-(b)*x(2))/J; 
    x(3)=x(3)+dt*((-R/L)*x(3)+kb*(1/L)*x(2)*sin(nr*x(1))+(1/L)*U(1));
    x(4)=x(4)+dt*((-R/L)*x(4)+kb*(1/L)*x(2)*cos(nr*x(1))+(1/L)*U(2));     
end

A oto próba rozwiązania mojego problemu w c++:

#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

int main(int argc, char *argv[])
{
int i;
double R, L, kb, ki, J, nr, b, dt, tmax, maxit, kp, U1, U2, x1, x2 , x3, x4, U;     
R=1;            
L=0.03;          
kb=1;           
ki=0.5;         
J=0.001;         
nr=50;          
b=0.1;               
dt=4*pow(10, -5);
tmax=10000*dt; 
maxit=tmax/dt;  
kp=50;
x1=0;
x2=0;
x3=0;
x4=0;
U1=0;
U2=0;
for (i=0; i<maxit; i++)
{           
    U=100*(sin(kp*i*dt));
    if (U>0)
    {
    U1=12;
    U2=-12;
    }
    else
    {
    U1=-12;
    U2=12;
    }                                                              
    x1=x1+dt*x2; 
    x2=x2+dt*(-kb*x3*sin(nr*x1)+kb*x4*cos(nr*x1)-b*x2)/J;  
    x3=x3+dt*((-R/L)*x3+kb*(1/L)*x2*sin(nr*x1)+(1/L)*U1);
    x4=x4+dt*((-R/L)*x4+kb*(1/L)*x2*cos(nr*x1)+(1/L)*U2); 
     cout << x1<<"   "<<x2<<"   ";    
}
    system("PAUSE");
    return EXIT_SUCCESS;
}

Niestety program w c++ nie jest ekwiwalentem programu w MatLab tzn. podczas wykonywania programu zmienne x(1), x(2), x(3), x(4) nie równają się zmiennym x1, x2, x3, x4 w c++.

Dziękuję za wszelką pomoc i pozdrawiam;)

0

Może powiesz coś więcej albo użyjesz debuggera, żeby zobaczyć kiedy obliczenia się wykrzaczają?? Nie każdy ma ochotę na lekturę takiego spaghetti...

Albo zrobiłeś jakiś błąd, albo coś z liczbami. Podpowiem że częstym błędem jest dzielenie int/int i oczekiwania float na wyjściu - trzeba dzielić float(int)/float(int).

0

Dziękuje za odpowiedz:)

Jednocześnie chciałbym zamknąć temat. Kod w c++ wykonywał identyczny algorytm jak ten w MatLabie. Problem tkwił w metodyce.
Pozdrawiam;)

0

Jakiej metodyce??

1 użytkowników online, w tym zalogowanych: 0, gości: 1