c ++序列计算器x_ {n + 1} = f(x_n),数学函数出现问题

时间:2019-03-23 23:17:27

标签: c++

代码示例

#include <iostream>
using namespace std;
//whitespace package
#include <iomanip>
#include <math.h>
using std::setw;

int main () {

    // n is an array of 101 integers
    double n[ 101 ];
    double exponent=3;
    double fraction=1/7;

    // initialize elements of array n to 0
    for ( int i = 1; i < 100; i++ ) {
        n[ i ] =  0;
    }

    //what is input 1?
    cout << "Enter x_1" << endl;
    cin >> n[1];

    //jam ni's into function and loop
    for ( int i = 1; i < 100; i++ ) {

        // set element at location i+1 to f(x)= (fraction)*((x)^exponent + 2)
        n[ i + 1 ] =  fraction*(pow( ((n[ i ]) ), exponent ) + 2);
    }

    //header
    cout << "Element" << setw( 13 ) << "Value" << endl;

    // output each array element's value
    for ( int j = 1; j < 100; j++ ) {
        cout << setw( 7 )<< j << setw( 13 ) << n[ j ] << endl;
    }

    return 0;
}

输出

Enter x_1
1
Element        Value
      1            1
      2            0
      3            0
      4            0
      5            0
      6            0
      7            0
      8            0
      9            0
     10            0

....

我的预期输出将是

Element        Value
      1            1
      2            0.42857142857
      3            0.29695960016
      4            0.2894553405
      5            0.28917883433
      6            0.28916891514
      7            0.28916855966

...

背景:我正在尝试编写一个简单的程序,询问您的\ $ x_1 \ $是什么,并在给定一些串行函数计算器的情况下将\ $ x_1 \ $报告给\ $ x_ {100} \ $ \\ $ x_ {n + 1} = f(x_n)\ $的计算器。在此示例中,我们的函数是(1/7)*((x)^ 3 + 2)。

你们都能提供一些编写其他功能的资源吗?我有\ $ x_ {n + 1} = f(x_n)=(1/7)*((x_n ^ 3)+ 2)\ $现在。

每当我查找c ++数学函数时,都会得到诸如如何使用绝对值函数或如何将cpp文件用作函数本身之类的信息,但是却没有像这样编写数学函数的信息。

1 个答案:

答案 0 :(得分:1)

要将x_1报告为x_100,您不需要由101个元素组成的数组,而是由100个元素组成的数组,索引范围从0(含0)到100(不含)。数组的索引比顺序的元素的顺序小1。

您可以使用值初始化在与声明相同的语句中将数组的所有元素设置为0。

在C ++中,两个整数相除的结果是一个整数,这就是为什么您的fraction数字为0的原因。因此,要获得一个不被截断的值,其中一个操作数应该是双精度的(另一个将被提升。在划分之前由编译器加倍)。

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

using namespace std;

constexpr size_t elems_len = 100;

int main()
{
    double n[elems_len]{}; // value initialization, all elements of n are set to 0                                               
    double exponent = 3;

    // one of the operands should be double to avoid integer division and truncation                                             
    double fraction = 1.0 / 7;

    cout << "Enter x_1" << endl;
    cin >> n[0];

    for (size_t i = 1; i < elems_len; i++) {
        n[i] = fraction * (pow(n[i-1], exponent) + 2);
    }

    cout << "Element" << setw(13) << "Value" << endl;

    cout << fixed << setprecision(11);
    for (size_t i = 0; i < elems_len; i++) {
        cout << setw(7) << i + 1 << setw(25) << n[i] << endl;
    }
}