如何修复包含函数调用的do-while循环

时间:2017-03-28 16:21:59

标签: c++

我的do-while循环似乎有问题。抛开我现在所具有的函数的任何物理定义,用户应该输入三次函数的系数,I.E。 abPT。然后,用户将输入初始猜测v1

现在在循环中,我会将v1存储到v,然后按公式计算v1的新值:v1 = v - (fv/fv1) 其中fvfv1的值是从函数调用中确定的。结果令人不安。

请帮我们循环!另外,请评论我的功能定义。我在阅读基本教程之后就做了这件事。

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

const double R = 0.082054;
double f(double a,double b,double P,double T,double v);
double f(double a,double b,double P,double T,double v)
{
    double q =P*pow(v,3)-(P*b+R*T)*pow(v,2)+a*v-a*b;
    return q;
}
double fPrime(double a,double b,double P,double T,double v);
double fPrime(double a,double b,double P,double T,double v)
{
    double s =3*P*pow(v,2)-2*(P*b+R*T)*pow(v,1)+a;
    return s;
}
int main()
{
//INPUT STAGE!
cout << "Use gas constant, R: " << R << endl;

double a,b,P,T,Tc;
cout << "\nUse test value, a: ";
cin >> a;
cout << "\nUse test value, b: ";
cin >> b;
cout << "\nUse pressure, P (atm): ";
cin >> P;
cout << "\nUse absolute temperature, T (K): ";
cin >> T;

double v,v1,fv,fv1,N,e;
int iteration = 0;
cout << "\nUse initial guess for molal volume, v: ";
cin >> v;
cout << "\nUse maximum number of iterations, N: ";
cin >> N;
cout << "\nUse tolerance, e: ";
cin >> e;
cout << "\n";

do
{
    v = v1;
    fv = f(a,b,P,T,v);
    fv1 = fPrime(a,b,P,T,v);
    v1 = v-(fv/fv1);
    cout << iteration+1 << setw(12) << v << setw(16) << v1 << setw(16) << abs(v1-v) << endl;
    iteration++;
}
while(iteration<N && abs(v1-v)>e);

return 0;
}

以下是我收到的不需要的结果(标题仅用于格式化输出):

enter image description here

在图片上,我设置了最大迭代次数,N = 5.因此它打印(循环)5次。但是我得到了不想要的结果。

更新:我设法通过初始化v1 = 0来解决这个问题。感谢UnholySheep先生。

0 个答案:

没有答案