Dev C++问题中的不动点迭代

Fixed point iteration in Dev C++ problems

本文关键字:迭代 C++ 问题 Dev      更新时间:2023-10-16

需要一些有关此代码的帮助。我一直在试图找出代码是否有错误,因为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;
}

谢谢你的帮助!

简单迭代的方法是替换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;
}