Salve
sto svolgendo un compito riguardante l'integrazione numerica; il professore ci ha dato una traccia di cosa fare, ma in Fortran, sta a noi "tradurre" il tutto in c++:
ecco la traccia
PROGRAM intBox
IMPLICIT NONE
C
INTEGER i, maxDivis
INTEGER nint
REAL a, b, dx
REAL int, int_old
REAL box
C
a = 0.
b = 1.
maxDivis = 20
C
int_old = box( a, b, 1, nint, dx)
DO i = 2, maxDivis
int = box( a, b, i, nint, dx)
WRITE(*,100) i, nint, dx, int, (int-int_old)/int
int_old = int
END DO
STOP
100 FORMAT (I4,I10,3E15.7)
END
C
REAL FUNCTION box( a, b, n, numint, h)
IMPLICIT NONE
C
INTEGER n
REAL a, b
REAL func
C
INTEGER numint
REAL h
C
INTEGER i
REAL sum
C
numint = 2**n
h = (b-a)/numint
sum = func( a)
DO i = 1, numint-1
sum = sum + func(a + i*h)
END DO
box = sum * h
RETURN
END
C
REAL FUNCTION func( x)
IMPLICIT NONE
REAL x
func = x**3
RETURN
END
Quindi: nint è il numero di intervalli, int e int_old in c++ li ho chiamati integr e integr_old, a b sono gli estremi di integrazione e dx è la lunghezza dell'intervallo di integrazione (in fortran nella funzione box è h)
Considerando di integrare una funzione costante 1 (quindi func=1), ho ottenuto questo
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
using namespace std;
typedef float DP;
DP box (int i, int nint, int n, DP a, DP b, DP dx);
DP func (DP x);
int main ()
{
int i, maxDivis, nint;
DP a, b, dx;
DP integr, integr_old;
DP box (int i, int nint, DP a, DP b, DP dx);
a=0;
b=1;
maxDivis=20;
integr_old = box (a, b, 1, nint, dx);
for (i=2; i=maxDivis; i++);
integr= box (a, b, i, nint, dx);
cout << setw(8)<<"i= "<< setw(8) <<"nint= "<<setw(8) <<"dx= " <<setw(8) <<"intervallo= "<<setw(8) <<"Differenza = "<< endl;
cout << setw(8)<<i << setw(8) <<nint<<setw(8) <<dx <<setw(8) <<integr <<setw(8) <<(integr-integr_old)/integr <<endl;
return 0;
}
DP box (int i, int nint, int n, DP a, DP b, DP dx)
{
DP sum;
for (int k=1; k<=n; k++);
{nint=nint*2;}
dx = (b-a)/nint;
sum = func (a);
for (int g=1; nint-1; g++){
sum=sum+func (a+i*dx);
}
return (sum*dx);
}
DP func (DP x)
{
return (1);
}
Usando il compilatore su Macintosh (SL), ottengo questo errore nel terminale:
Undefined symbols:
"box(int, int, float, float, float)", referenced from:
_main in ccuo0eXE.o
_main in ccuo0eXE.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
Siccome non capisco il messaggio di errore, qualcuno può dirmi cosa ho sbagliato? grazie mille a tutti