Questo è un programma che risolve le equazioni di qualunque grado con il metodo di bisezione, cioè ogni volta si prende un intervallo a-b, si prende il numero che si trova in mezzo tra a e b chiamato m e si controlla se sostituendo all'equazione la x con la a, poi con la m e poi con la b, si vedono i risultati, e per esempio se i risultati sono
a negativo, m negativo e b positivo
significa che il risultato si trova tra m e b, si scarta l'intervallo a-m e la m si trasforma nella nuova in a e quindi si ricomincia da capo trovando il numero che si trova in mezzo, risostituendo etc...
questo fino a che b-a non è minore della nostra precisione che immettiamo all'inizio (es. 0.0001 cioè 4 cifre dopo la virgola)
questa è la spiegazione del metodo di wikipedia
http://it.wikipedia.org/wiki/Metodo_della_bisezione
ecco il codice
codice:
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
long double equazione (long double);
void trova (long double[],int &);
int main()
{
long double radici[20];
int quante;
long double a,b,m,pre;
long double ris[3];
cout<<"Decidi la precisione \n";
cin>>pre;
trova(radici,quante);
cout<<quante;
for(int i=0;i<=quante;i++)
{
a=radici[i]+1;
b=radici[i]-1;
m=(a+b)/2;
do
{
ris[0]=equazione(a);
ris[1]=equazione(m);
ris[2]=equazione(b);
if(ris[1]<0)
a=m;
else
b=m;
if(b-a<pre)
break;
if(fabs(a)>fabs(b))
{
cout<<"Una radice e' "<<b<<endl;
}
else
{
cout<<"Una radice e' "<<a<<endl;
}
}while(1);
}
return 0;
}
long double equazione (long double x)
{
long double ris;
//parte modificabile
ris=2*pow(sin(x),4)-3*pow(sin(x),2)+1;
return ris;
}
void trova (long double ris[],int & iter)
{
iter=0;
long double temp1,temp2;
temp1=equazione(-1000);
for(int i=-1000;i<1000;i++)
{
temp2=equazione(i+1);
if((temp1<0 && temp2>0) || (temp1>0 && temp2<0))
{
ris[iter]=i;
iter++;
}
if(temp2==0)
{
cout<<"Una radice e' "<<i+1<<endl;
}
temp1=temp2;
}
return;
}
il problema è che nel runtime mi dice che c'è un accesso violento ad una locazione di memoria... ma errori sintattici nessuno e credo pure errori logici, dategli un'occhiata, il prof di matematica ce li ha lasciati oggi da fare e entro domani li vuole fatti!!!!!
Grazie a tutti per l'aiuto che mi state dando.