c++ - loop is not working with secant method -
my program wrote find roots of equation finished, have run in small problem. nested loop using assign varying values of velocity , angle equations not working. somewhere either in loop or in call secant of fx there mistake missing. keeps giving me same numbers root, number of iterations , f(x). if me find mistake appreciate :)
#include<iostream> #include<cmath> #include<iomanip> #include<fstream> using namespace std; // declaration of functions used void secant(double, double, double, double, double, double, double, double, double&, int& ); double fx( double, double, double, double, double, double, double); const double tol=0.0001; // tolerance convergence const int max_iter=50; // maximum iterations allowed // main program int main() { int iteration; // number of iterations double kr, uc, q, b, radians; double x0, x1; // starting values x double root; // root found secant method const double pi = 4.0*atan(1.0); ifstream datain ("shuttle.txt"); ofstream dataout ("results.txt"); datain >> kr >> uc >> q >> b; int velocity = 16000; double angle =10; x0= 1000; x1 = 200; (int velocity = 16000; velocity <= 17500; velocity += 500) { (int angle = 10; angle <= 70; angle += 15) { radians= angle * pi/180 ; cout << velocity << endl; cout << radians << endl; cout << angle << endl; secant (radians, velocity, kr, uc, q, b, x0, x1, root, iteration); } } system("pause"); } // definition of function "secant" // receives a, b, c, d , x0 values main program // returns root , iterations required void secant(double radians,double velocity, double kr, double uc, double q, double b, double x0, double x1, double& root, int& iteration) { double xnminus1, xnplus1, xn; // local variables iteration=0; // initialize iterations xnminus1=x0; xn=x1; { ++iteration; xnplus1 = xn - fx(radians, velocity, kr, uc, q, b, xn)*(xn-xnminus1)/(fx(radians, velocity, kr, uc, q, b, xn)-fx(radians, velocity, kr, uc, q, b, xnminus1)); cout<<"x"<<iteration+1<<" = "<<xnplus1<<endl; xnminus1 = xn; xn=xnplus1; } while ((fabs(fx(radians, velocity, kr, uc, q, b, xnplus1)) >= tol )&& (iteration < max_iter)); root=xnplus1; cout<<"\nthe root = "<<root<<endl; cout<<"the number of iterations = "<<iteration<<endl; cout<<"the value of f(x) @ root = "<<fx(radians, velocity, kr, uc, q, b, root)<<endl<<endl; } // defines "fx" double fx(double radians,double velocity, double kr, double uc, double q, double b, double ts) { return kr * pow(ts,4.0) + uc * ts - q - pow(velocity / b, 2.0) * sin(radians); }
you have multiple defined variables, try removing outer velocity , angle in main:
int velocity = 16000; // remove 1 double angle =10; // , 1 x0= 1000; x1 = 200; (int velocity = 16000; velocity <= 17500; velocity += 500) { (int angle = 10; angle <= 70; angle += 15) {
Comments
Post a Comment