znaci sljedeci program je za njihalo s gusenjem,stvar je u tome da dok sam ga radio nisam vidio gresku i sad nisan siguran kako je ispraviti,greska je u crti gdje je sljedece : double yt[n],dy1[n],dy2[n],dy3[n]; te mi podcrtava n u zagradama i kaze "expresion must have a constant value".mozda je neka jednostavna greska al ja nemam pojma kako ovo rijesiti.zahvaljujem na odgovorima
// Matematičko njihalo s gušenjem i perodičnom vanjskom silom
#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
using namespace std;
double Q, A, w;
void Stuff (const double g, double m, double l, double wd, double a, double p, double *Tinit, double *Tfin)
{
double w0=pow(g/l,0.5);
w=wd/w0;
Q=m*g/(w0*p);
A=a/(m*g);
*Tinit*=w0;
*Tfin*=w0;
}
void Deriv (double t, double *y, double *dydt)
{
dydt[0]=y[1];
dydt[1]=-y[1]/Q-sin(y[0])+A*cos(w*t); //Q,A i w su globalne varijable
}
void RK4 (double *y, double *dydt, double t, int n, double h,
void (*Deriv)(double, double*, double*))
/*Runge-Kutta metoda, rjesava 1 korak za sustav n jednadzbi oblika dy/dt=f(t,y) preko relacije:
y(ti+h)=y(ti)+1/6*(k1+2*k2+2*k3+k4);
k1=h*f(ti,y(ti)),
k2=h*f(ti+h/2,y(ti)+k1/2),
k3=h*f(ti+h/2,y(ti)+k/2),
k4=h*f(ti+h,y(ti)+k3)
*/
{
double yt[n],dy1[n],dy2[n],dy3[n];
double half_h=h/2, sixth_h=h/6; //stedi procese za veliki broj jednadzbi
//treba izracunati i spremiti svaki k posebno da bi ga se moglo iskoristiti za sljedece derivacije koje cemo na kraju koristiti...zalosno...
for(int i=0; i<n; i++)
{ // racuna se yt koji treba uvrstiti da se dobije k2
yt[i]=y[i]+half_h*dydt[i]; // racuna yt+k1/2 koji je potreban za k2
}
(*Deriv)(t+half_h,yt,dy1); // dobiveni yt se ubacuje u funkciju koja racuna derivaciju (dy1) pomocu koje se dobije k2
for(int i=0; i<n; i++)
{ // yt za k3
yt[i]=y[i]+half_h*dy1[i];
}
(*Deriv)(t+half_h,yt,dy2); //k3
for(int i=0; i<n; i++)
{ //yt za k4
yt[i]=y[i]+h*dy2[i];
}
(*Deriv)(t+h,yt,dy3); //k4
for(int i=0; i<n; i++)
{ //izračunati k-ovi se koriste da se dobije y(ti+1) Simpsonovim pravilom
y[i]+=sixth_h*(dydt[i]+2*dy1[i]+2*dy2[i]+dy3[i]);
}
}
int main()
{
double t,x,v,m,l,wd,a,p;
const int n=2;
double Tinit=0, Tfin=25;
const int N=1000;
const double g=9.81;
double y[n], dydt[n];
cout << "Masa m=";
cin >> m;
cout << "Duljina njihala l=";
cin >> l;
cout << "Amplituda vanjske sile a=";
cin >> a;
cout << "Kutna frekvencija vanjske sile w=";
cin >> wd;
cout << "Koeficijent gusenja p=";
cin >> p;
Stuff(g,m,l,wd,a,p,&Tinit,&Tfin);
cout << "Pocetni kut: ";
cin >> x;
cout << "Pocetna kutna brzina: ";
cin >> v;
ofstream output;
output.open("izlaz.txt");
if(!output.is_open())
{
cout<<"Problem s otvaranjem"<<endl;
return 1;
}
y[0]=x;
y[1]=v;
t=Tinit;
output << "#" << setw(11) << "t" << setw(13) << "kut" << setw(13) << "w" <<endl;
output << setw(13) << t << setw(13) << x << setw(13) << v <<endl;
double h=(Tfin-Tinit)/N;
//int br=1;
while (t<Tfin)
{
Deriv(t,y,dydt);
RK4(y,dydt,t,n,h,&Deriv);
t+=h;
//if(br%5==0)
output<<setw(13) << t << setw(13) << y[0] << setw(13) << y[1] <<endl;
//br++;
}
output.close();
return 0;
}