C++ 割线根查找c++;

C++ 割线根查找c++;,c++,methods,C++,Methods,我正在尝试为学校编写一个程序,该程序将使用割线根查找方法。方程式为: (v/b)^2sin(alpha)=kr*Ts^4+Uc*Ts-q 我必须找到Ts 不幸的是,我一直使用的作为基础的示例对我不起作用:。它给出的根是-1.qNa或沿着这些线的东西,所以我在割线方法中有一个错误,我是C++新手,所以我很难修复这个。任何帮助将不胜感激,如果有人能告诉我的代码,使其更容易张贴代码,我将不胜感激。谢谢 以下是我目前的代码: #include <iostream> #include <

我正在尝试为学校编写一个程序,该程序将使用割线根查找方法。方程式为:

(v/b)^2sin(alpha)=kr*Ts^4+Uc*Ts-q

我必须找到Ts

不幸的是,我一直使用的作为基础的示例对我不起作用:。它给出的根是-1.qNa或沿着这些线的东西,所以我在割线方法中有一个错误,我是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);
}
#包括
#包括
#包括
#包括
使用名称空间std;
空正割(双,双,双,双,双,双,双,双,双,双,双,双,双,双,双,整数);
双外汇(双,双,双,双,双,双,双,双);
常数双tol=0.0001;//收敛容忍度
常数int max_iter=50;//允许的最大迭代次数
int main()
{
双kr,uc,q,b,弧度,Ts,x0,x1,根;
整数迭代;
常数双π=4.0*atan(1.0);
ifstream数据输入(“shuttle.txt”);
流数据输出(“results.txt”);
datain>>kr>>uc>>q>>b;
积分速度=16000;
双角度=10;
x0=1000;
x1=200;

对于(int velocity=16000;velocity您使用Ts时没有定义它。有趣的是,它以蓝色突出显示…我想有一位高级SO用户在某处暗自发笑…

要在一个问题中格式化代码,请阅读以下内容:…您的问题是?我正在找人帮助我找出我的代码有什么问题,因为我的割线方法不起作用我不知道出了什么问题。你还没有问过这个问题吗?是的,但那是如何格式化的,现在我在调试它时遇到了问题。我正在尝试解决Ts的问题,所以如果我只是将Ts改为x,它应该可以正常工作?@Brian这个名字与它无关。只要从你声明它的那一刻起遵循“Ts”的用法。你将它传递给value到割线(),然后通过值将其传递给fx()。它在“pow”(Ts,4.0)中计算没有先定义每一个。而且,因为你从来没有给Ts分配过任何东西,所以根本不清楚你是如何解决它的。如果我不知道它是什么,我该如何定义它?@Brian:在代数上下文中思考这个问题,你可能会意识到它听起来有多么愚蠢;-]@Brian我明白了……你需要从猜测开始,保持tr确认预测错误,并在每次迭代中调整Ts,以便不断将错误向下推,直到其低于tol。不过,你应该真的需要就这一点咨询你的指导老师或阅读这本书,尽可能多地完成使程序按预期运行所需的工作是有点过分的。