시컨트 루트 찾기 방법을 사용할 학교용 프로그램을 wirte하려고합니다. 방정식은 다음시컨트 루트 찾기 문제 C++
-q와 난 TS를 찾을 수있다.(V/B)^2sin (알파) = KR * TS^4 + UC * TS가
불행히도 내베이스가 나를 위해 작동하지 않기 때문에 예제를 사용하고 있습니다. 그것이 제공하는 루트 -1.QNAN 또는 그 라인을 따라 무언가 어딘가에 secant 방법에 실수를 가지고, 나는 C에서 초보자입니다 + + 그래서 나는이 문제를 해결하는 데 많은 문제가 있습니다. 코드를 쉽게 게시 할 수 있도록 누군가에게 코드를 말할 수 있다면 어떤 도움도 받으실 것입니다. 감사합니다 여기까지 내 코드입니다 :
#include <iostream>
#include <cmath>
#include <fstream>
#include <iomanip>
using namespace std;
void secant (double, double, 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 for convergence
const int max_iter=50; // Maximum iterations allowed
int main()
{
double kr, uc, q, b, radians, Ts, x0, x1, root;
int iteration;
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;
for (int velocity = 16000; velocity <= 17500; velocity += 500) {
for (int angle = 10; angle <= 70; angle += 15) {
radians= angle * PI/180 ;
cout << velocity << endl;
cout << radians << endl;
cout << angle << endl;
secant (angle, radians, velocity, kr, uc, q, b, Ts, x0, x1, root, iteration);
}
}
system("pause");
return 0;
}
void secant(double angle, double radians, double velocity, double kr, double uc, double q, double b, double Ts, double x0, double x1, double root, int iteration)
{
double xnminus1, xnplus1, xn;
iteration=0;
xnminus1=x0;
xn=x1;
do
{
++iteration;
xnplus1 = xn - fx(kr, uc, Ts, q, velocity, radians, xn)*(xn-xnminus1)/
(fx(kr, uc, Ts, q, velocity, radians,xn)-fx(kr, uc, Ts, q, velocity, radians,xnminus1));
cout<<"x"<<iteration+1<<" = "<<xnplus1<<endl;
xnminus1 = xn;
xn=xnplus1;
}
while ((fabs(fx(kr, uc, Ts, q, velocity, radians, xnplus1)) >= tol)&& (iteration < max_iter))
;
root=xnplus1;
cout<<"\nThe root is = "<<root<<endl;
cout<<"The number of iterations was = "<<iteration<<endl;
cout<<"The value of f(x) at the root = "<<fx(kr, uc, Ts, q, velocity, radians, root) <<endl<<endl;
}
double fx(double kr, double uc, double Ts, double q, double velocity, double b, double radians)
{
return kr * pow(Ts, 4.0) + uc * Ts - q - pow(velocity/b, 2.0) * sin(radians);
}
질문에 코드를 포맷하려면 다음을 읽어보십시오 : http://meta.stackexchange.com/questions/ 22186/how-do-i-format-my-code-blocks – rlc
... 귀하의 질문은 무엇입니까? –
나는 내 시컨트 방식이 작동하지 않고 무엇이 잘못되었는지 모르기 때문에 내 코드에 문제가 생기지 않도록 도와 줄 사람을 찾고있다. – Brian