#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int i;
    const int N = 5;
    for (i = 1; i <= N; i++){
        double Yn = (1.0 / 2) * (Yn - 1) +  (1.0 / 3) * (Yn - 2);
        std::cout << i << " " << "= "<< " " << Yn;
    std::cout << std::endl;
    }

    return 0;
}


我有一个方程和一个序列表。

方程

Y[n] = 1/2*(Y[n-1]) + 1/3*(Y[n-2])

Y[1] = 0.5, Y[2] = 0.4


下表所示的表格应使用for循环进行打印。

N -- Yn
1 -- 0.5
2 -- 0.4
3 -- 0.366667
4 -- 0.316667
5 -- 0.280556


我要做的就是打印上表。

最佳答案

您将顺序记错了。

你有:


  Yn = 1/2 *(Yn-1)+ 1/3 *(Yn-2)


但是应该是:


  Yn = 1/2 *(Yn-1)+ 1/3 *(Yn-2)


因此,您需要跟踪序列中的前两个数字以计算下一个:

int i=1;
const int N = 5;
double Y_prev1 = 0.4;
double Y_prev2 = 0.5;
std::cout << i++ << " " << "= "<< " " << Y_prev2 << std::endl;
std::cout << i++ << " " << "= "<< " " << Y_prev1 << std::endl;
for (; i <= N; i++){
    double Y = (1.0 / 2) * (Y_prev1) +  (1.0 / 3) * (Y_prev2);
    std::cout << i << " " << "= "<< " " << Y;
    std::cout << std::endl;
    Y_prev2 = Y_prev1;
    Y_prev1 = Y;
}


输出:

1 =  0.5
2 =  0.4
3 =  0.366667
4 =  0.316667
5 =  0.280556

09-06 22:28