-1から1までの単一の正弦波値が与えられ、正弦波周期が与えられた場合、ベクトルの最後の値が与えられた正弦波である周期長の正弦波ベクトルを返す、Octaveの.oct関数を書き込もうとしています。波の値。これまでの私のコードは次のとおりです。
#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;
}
しかし、斑点のある結果を与えています。これは、正弦波を非常に正確に再現する場合もあれば、かなり離れている場合もあることを意味します。これは、特定の正弦波を作成し、時間の最後の値を取得し、これを関数に接続して時間の経過とともに正弦波を逆方向に再作成し、2つのプロットを比較するだけで決定しました。明らかに私は何か間違ったことをしているが、何を特定できないようだ。