Dev C ++问题中的定点迭代

时间:2016-04-03 18:46:44

标签: c++ numerical-methods

需要一些有关此代码的帮助。我一直试图找出代码是否有错误,因为cos x - x的近似解是-1.57,而不是0.739。感谢

double f(double x)
{
  double y;
  y = cos(x) - x;
  return y;
}

int main()
{
  double p,p0;
  int i=1,N;
  cout<<"p0 = ";
  cin>>p0;
  cout<<"N = ";
  cin>>N;  
  while(i <= N)
  {
    p = f(p0);
    if(fabs(p-p0) < eps)
    {
      cout<<p<<endl;
      break;
    }
    cout<<"Iteration "<<i<<": p = "<<p<<endl;
    i++;
    p0 = p;
    cout<<"The solution is "<<p<<endl;
    if(i>N)
    {
      cout<<"Solution not found (method diverges)"<<endl;;
      break;
    }
  }
  cout<<"The approximated solution is x = "<<p<<" in the iteration "<<i-1<<endl;
  system("PAUSE");
  return 0;
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

简单迭代的方法是替换x = F(x)。对于你的等式x = cos(x)。

Ideone

#include <iostream>
#include <cmath>
using namespace std;

double f(double x)
{
  return cos(x);
}

int main()
{
  double p,p0=1,eps = 0.001;
  int i=1,N=1000;

  while(i <= N)
  {
    p = f(p0);
    if(fabs(p-p0) < eps)
    {
      cout<<p<<endl;
      break;
    }
    cout<<"Iteration "<<i<<": p = "<<p<<endl;
    i++;
    p0 = p;
    cout<<"The solution is "<<p<<endl;
    if(i>N)
    {
      cout<<"Solution not found (method diverges)"<<endl;;
      break;
    }
  }
  cout<<"The approximated solution is x = "<<p<<" in the iteration "<<i-1<<endl;

  return 0;
}