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;)