C ++使用割线方法解决功能

时间:2010-09-24 04:17:55

标签: c++ math cmath

我有学校问题,但我不明白它究竟是什么问题。你们中的任何人都知道它真正需要什么?我不需要代码,我只需要理解它。

这是问题所在: 构建一个使用Secant方法解决问题的计算机程序: f(x)=(1 + x)cos(sin(x)3) - 1.4 = 0 从x = 2.0和x = 2.1的初始猜测开始,获得x的近似值,使得| f(x)| < 0.0000001。

这是我理解的代码,但我认为我不能正确理解这个问题。

#include <iostream>
#include <cmath>

double secant(double x);

using namespace std;

int main()
{
    double x = 2.0;
    double r = 0.0;
    int counter = 0;

    while( r < 0 && counter <= 40)
    {
        r =secant(x);
        cout << "x: " << x << ", f(x): " << r << endl;
        counter++;
        x += 0.1;
    }



    return 0;
}

double secant(double x)
{
    double r;
    r = (1+x) * cos(pow(sin(x), 3.0)) - 1.4;
    return r;
}

1 个答案:

答案 0 :(得分:5)

您应该使用正割方法:http://en.wikipedia.org/wiki/Secant_method

按照文章中描述的方法进行操作。这是一种与Netwon方法非常相似的迭代方法。您需要创建一个函数来评估给定x(n)的x(n + 1)并迭代它,直到误差范围小于指定值。

只要您知道割线方法是什么,编码方面可能会相当简单。此外,该页面还有一个代码示例。这应该证明非常有用。 :)