Grazie
Adesso però ho un altro problema! Quando compilo questo
#include <iostream>
#include <cstdlib>
#include "Dividi.h"
using namespace std;
double y(const double x)
{
double y = pow((pow(x,3)-pow (x,2) - x - 1),3);
return y;
}
int main()
{
Dividi<double> Dividi(-1.0, 2.0, 1000);
cout << "Gli zeri della funzione sono nei seguenti intervalli: " << Dividi.Calcola(y) << endl;
return 0;
}
mi dice che nel .h (questo):
#include <limits>
#include <iostream>
#include <cstdlib>
#include <cmath>
#include "array1D.h"
#include "mathLib.h"
using namespace std;
template <typename TYPE>
class Dividi
{
public:
Dividi (TYPE left, TYPE right, int j)
{
this->left = left;
this->right = right;
this->j = j;
toll = std::numeric_limits<TYPE>::epsilon();
toll *= 100.;
double delta = toll;
double epsilon = toll;
}
TYPE get_left()
{
return left;
}
TYPE get_right()
{
return right;
}
private:
TYPE left;
TYPE right;
int j;
TYPE toll;
TYPE yleft;
TYPE yright;
TYPE intervallo;
TYPE Dx;
// dentro il vettore intervallo ci sono tanti valori quanti gli zeri della funzione
// intervallo contiene gli intervallini i cui estremi sono discordi
};
MyLib::Array1D<TYPE> Dividi<TYPE>::Calcola(TYPE y(const TYPE x))
{
intervallo = right - left;
Dx = intervallo/1000;
MyLib::Array1D<TYPE> intervallini;
for ( j = 0; j < 1000; j++)
{
cout << "!! j = " << j << endl;
yleft = y(left);
right = left + Dx;
yright = y(right);
cout << "!! left = " << left << "! f(left) = " << yleft << endl;
cout << "!! right = " << right << "! f(right) = " << yright << endl;
if (yleft*yright < (TYPE) 0)
{
intervallini.push_back(left);
intervallini.push_back(right);
// return 0;
// fa parte del vettore intervallo
//inseriamo qui l'algoritmo della bisezione
for (int k = 1; k < 20; k++)
{
intervallo = intervallo/2.0;
centro = left + intervallo;
centroFcn = y(centro);
if (intervallo < delta || abs(centroFcn) < epsilon)
{
return centro;
cout << "Lo zero della funzione e': " << centro << endl;
}
if (y(left) * y(centro) < 0)
{
right = centro;
rightFcn = centroFcn;
}
else
{
left = centro;
leftFcn = centroFcn;
}
}
} // qui finisce l'algoritmo di bisezione
else
{
// non fa parte del vettore intervallo
cout << " !!! NON ESISTONO ZERI IN QUESTO INTERVALLO !!! " << endl;
}
left = left + Dx;
// right = right + Dx;
right = left + Dx;
}
}
return (intervallini);
}
mi dà gli errori nell'allegato
Non so più cosa fare...
Allegati: