我正在开发一种使用 Runge Kutta 方法计算新数据点的算法。这是实现此方法的参考 - http://calculuslab.deltacollege.edu/ODE/7-C-3/7-C-3-h.html。这是我的代码:
#include<iostream>
#include<math.h>
class Runge_Kutta
{
public:
float x[100];
float y[200];
float h; // step size
float K_1,K_2,K_3,K_4;
float compute(); // function to compute data point
float data(); //function to generate data signal
Runge_Kutta();
~Runge_Kutaa();
}
Runge_Kutta::Runge_Kutta()
{
x[100] = 0; // input signal
y[200] = 0; // output accumulator
h = 0.2;
K_1 = K_2 = K_3 = K_4 = 0;
}
~Runge_Kutta::Runga_Kutta(){}
float Runge_Kutta::data()
{
int i = 0;
for(i=0 ; i<100 ; i++)
{
x[i] = 5*sin((2*3.14*5*i)*0.01); /*x[i] = A*sin(2*Pi*f*i*Ts)
} Ts-sampling period, A-amplitude,
return x[i]; f-frequency*/
}
float Runge_Kutta::compute()
{
int j = 0;
int i = 0;
for(i = 0 ; i<100 ; i++) // indexing through the input samples
{
for(j = 0 ; j<i+1 ; j++) // compute data points btw i and i+1
{
K_1 = h*x[i];
K_2 = h*((x[i]+(h/2) + K_1/2);
K_3 = h*((x[i]+(h/2) + K_2/2);
K_4 = h* ((x[i] + h) + K_3);
}
y[i] = (1/6)*(K_1 + 2*K_2 + 2*K_3 + K_4); //new data value
}
return y[i];
}
int main()
{
Runga_Kutta Interpolate;
Interpolate.data();
Interpolate.compute();
return 0;
}
问题是:y[i] 没有存储新的数据值并显示“0”或一些垃圾值。第二个问题是,在这种情况下,我不可能将浮点数的循环索引值(x 轴)增加为“h = 0.2”。我使用断点来查找问题,但我无法弄清楚,需要一些帮助或指导才能克服这个问题。我有一种感觉,这是由于我的逻辑和实现中的一些问题。请查看我的代码和有关如何修复它的建议,这将有很大帮助。提前致谢。