Ciao a tutti! Sono ancora una principiante e sto cercando di creare un programma c++ che mi risolva le equazioni di Lotka-Volterra del modello preda predatore! Uso un algoritmo runge-kutta per risolvere le equazioni differenziali.
Ma il programma non sembra voler funzionare
Qualcuno mi saprebbe indicare gli errori?
#include <iostream>
#include <cmath>
using namespace std;
int N; double a,b,c,d;
double *predatore (double *y, double t)
{
double *z = new double [2];
z[0]=(a-(b*y[1]))*y[0];
z[1]=((c*y[0])-d)*y[1];
return z;
};
double *(*funzione)(double *,double)=predatore;
double *X (double H, double T_0, double *X_0, double *Y, int M)
{ double *K1,*K2,*K3,*K4;
double *k2 = new double [M];
double *k3 = new double [M];
double *k4 = new double [M];
K1 = funzione (X_0, T_0);
for (int i=0; i<M;i++) {k2[i]= X_0[i] + ((H/2)* K1[i]);};
K2 = funzione (k2 ,(T_0 + (H/2)));
for (int i=0; i<M;i++) {k3[i]= X_0[i] +((H/2)*K2[i]);};
K3 = funzione (k3 ,(T_0 + (H/2)));
for (int i=0; i<M;i++) {k4[i]= X_0[i] +(H*K3[i]);};
K4 = funzione (k4 ,(T_0 + H));
for (int i=0; i<M; i++) {Y[i] = X_0[i] + ((H/6) * (K1[i] + (2*(K2[i])) + (2*(K3[i])) + K4[i]));
if (Y[i]<0) Y[i]=0.0;
cout << Y[i]<< '\n'; };
}
int main () {
int i;
double t_0,o, h;
N=2;
cout << "a= ";cin >> a;cout<< "\nb= " ;cin>>b; cout <<"\nc= ";cin>> c;cout<<"\nd= "; cin >>d;
auto *x_0 = new double [N];
cout << " \n indicami le componenti (" << N << ") di x_0 \n";
for (i=0;i<N;i++) {cin >> o; x_0[i]=o;};
cout << "\n indicami h\n", cin >> h;
double *x = new double [N];
for (i=0; i<100; ++i ) { X(h, t_0, x_0, x, N);
double c= ((a*(log(x[1])))- (b*(x[1])) -(c*(x[0]))+(d*(log(x[0]))));
cout << "questo è c "<< c << '\n';
t_0+=h; x_0=x;}
}