【问题标题】:Variable values don't change in for loop [duplicate]for循环中的变量值不会改变[重复]
【发布时间】:2015-04-08 21:19:04
【问题描述】:

所以我正在尝试编写一个程序来为二阶 ODE 执行四阶 Runge-Kutta。我的 for 循环有问题。 v 和 x 的值不会从初始化值改变,我不知道如何修复它。

double dv (double v, double x)
{
double r = -4/5*v-x;
return r;
}

double dx (double v)
{
return v;
}

int main()
{
double kx1, kx2, kx3, kx4;
double kv1, kv2, kv3, kv4;
double tf = 10;
int n;
double h;

cout << "Number of iterations: ";
cin >> n;

// Create two vectors to store the iteration values
vector<double> x;
vector<double> v;
vector<double> t;

// Initialize the vectors
x.push_back(0.3);
v.push_back(0);
t.push_back(0);

h = tf/n;

for(int i=0; i<n; i++)
{ 
    // Establish all the k values
    kx1 = dx(v[i]);
    kv1 = dv(x[i],v[i]);

    kx2 = dx(v[i]+h/2*kx1);
    kv2 = dv(x[i]+h/2*kx1,v[i]+h/2*kv1);

    kx3 = dx(v[i]+h/2*kx2);
    kv3 = dv(x[i]+h/2*kx2,v[i]+h/2*kv2);

    kx4 = dx(v[i]+h*kx3);
    kv4 = dv(x[i]+h*kx3,v[i]+h*kv3);

    double fx = x[i] + h/6*(kx1+2*kx1+2*kx3+kx4);
    double fv = v[i] + h/6*(kv1+2*kv1+2*kv3+kv4);

    x.push_back(fx);
    v.push_back(fv);
}


system("pause");
return 0;
}

【问题讨论】:

    标签: c++ for-loop numerical-methods


    【解决方案1】:

    你的错误在于函数 dv。 4/5进行整数除法,结果为0。变化

    double dv (double v, double x)
    {
        double r = -4/5*v-x;
        return r;
    }
    

    到

    double dv (double v, double x)
    {
        double r = (-4.0/5.0)*v-x;
        return r;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多