La ricerca per bisezione è impostata in modo errato.
Bisogna assicurarsi sempre che agli estremi vi siano risultati opposti.
Quì ho riportato il programma:
#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double a,b,c,errore=0.00005;
double sena,senb,senc;
int n;
cout<<"inserisci a:"<<endl;//inserimento degli intervalli:[a,b] e del numero di volte che devo eseguire la bisezione
cin>>a;
cout<<"inserisci b:"<<endl;
cin>>b;
cout<<"inserisci n:"<<endl;
cin>>n;
sena=sin(a);
senb=sin(b);
for(int i=0;i<n;i++)
{
c=(a+b)/2.0;
senc=sin(c);
if (i==n-1) cout<<"Limite di "<<n<<" iterazioni superato!\na= "<<a<<" b= "<<b<<endl;
if (sena*senb>0)
{
cout<<"\nNon esistono radici in questo intervallo!\n\n";
i=n; // uscita dal ciclo.
}
if(fabs(senc)<errore)
{
cout<<"la radice cercata è="<<c<<endl;
i=n; // uscita dal ciclo.
}
else
{
if(sena*senc<0)
{
b=c;
senb=senc;
}
else
{
a=c;
sena=senc;
}
}
}
system("pause");
return 0;
}
Ultima modifica effettuata da il 28/12/2009 alle 14:59 |