我正在尝试为 Octave 编写一个 .oct 函数,给定一个介于 -1 和 1 之间的正弦波值和正弦波周期,返回一个周期长度的正弦波向量,向量中的最后一个值是给定的正弦波波值。到目前为止,我的代码是:
#include <octave/oct.h>
#include <octave/dColVector.h>
#include <math.h>
#define PI 3.14159265
DEFUN_DLD (sinewave_recreate, args, , "args(0) sinewave value, args(1) is period")
{
octave_value_list retval;
double sinewave_value = args(0).double_value ();
double period = args(1).double_value ();
ColumnVector output_sinewave(period);
double degrees_inc = 360 / period;
double output_sinewave_degrees;
output_sinewave_degrees = asin( sinewave_value ) * 180 / PI;
output_sinewave(period-1) = sin( output_sinewave_degrees * PI / 180 );
for (octave_idx_type ii (1); ii < period; ii++) // Start the loop
{
output_sinewave_degrees = output_sinewave_degrees - degrees_inc;
if ( output_sinewave_degrees < 0 )
{
output_sinewave_degrees += 360 ;
}
output_sinewave( period-1-ii ) = sin( output_sinewave_degrees * PI / 180 );
}
retval(0) = output_sinewave;
return retval;
}
但给出了不完整的结果。我的意思是它有时会非常准确地重新创建正弦波,而其他时候则很遥远。我通过创建一个给定的正弦波来确定这一点,及时获取最后一个值并将其插入函数中以通过时间向后重新创建正弦波,然后比较两者的图。显然我做错了什么,但我似乎无法确定是什么。