assert_comparecomplex
許容誤差を指定して複素数を比較する.
呼び出し手順
order = assert_comparecomplex ( a , b ) order = assert_comparecomplex ( a , b , reltol ) order = assert_comparecomplex ( a , b , reltol , abstol )
パラメータ
- a :
1行1列のdouble行列,比較する最初の値
- b :
1行1列のdouble行列,比較する2番目の値
- reltol :
1行1列のdouble行列,相対許容誤差 (デフォルト: reltol=sqrt(%eps)).
- abstol :
1行1列のdouble行列,絶対許容誤差 (デフォルト: abstol=0).
- order :
1行1列のdouble行列,整数値,順番. aがbにほぼ等しい場合にorder=0, a < bの場合に order=-1, a > bの場合に order=+1.
説明
まず実部,次に虚部を比較します. 相対および絶対許容誤差による判定を組み合わせることで 数値的な問題を考慮します.
オプションの入力引数が空の行列に等しい場合, そのデフォルト値に置換されます.
以下のアルゴリズムを使用します.
まず実部を比較します.それが等しい場合, 虚部を比較します.
IEEE値を処理し,順番を選択します: -%inf < 0 < %inf < %nan. どの値も特殊な値でない場合, 以下の条件を使用します:
このアルゴリズムはソート用アルゴリズムの中で使用される よう設計されています. これにより, 複素数のdoubleの行列を出力する関数の出力に関連した 移植性の問題を考慮することができます. このアルゴリズムがソート用関数に組み込まれた場合, 順番をオペレーティング・システム,コンパイラまたは (値ではなく)順番を変更する他の問題に依存させずに, 一貫してソートされた行列を出力することができるようになります.
例
// 実数値を比較 assert_comparecomplex ( 1 , -1 ) // 1 assert_comparecomplex ( -1 , 1 ) // -1 assert_comparecomplex ( 1 , 1 ) // 0 // 複素数を比較 #1 assert_comparecomplex ( 1+2*%i , 1+3*%i ) // -1 assert_comparecomplex ( 1+3*%i , 1+2*%i ) // 1 assert_comparecomplex ( 1+2*%i , 1+2*%i ) // 0 // 複素数を比較 #2 assert_comparecomplex ( 1+%i , -1+%i ) // 1 assert_comparecomplex ( -1+%i , 1+%i ) // -1 assert_comparecomplex ( 1+%i , 1+%i ) // 0 [order,msg] = assert_comparecomplex ( 1+%i , 1+%i ) // 許容誤差を指定して比較: 等号の場合 assert_comparecomplex ( 1.2345+%i , 1.2346+%i , %eps , 1.e-3 ) // 0 assert_comparecomplex ( 1.2345+%i , 1.2346+%i , 1.e12*%eps , 0 ) // 0 assert_comparecomplex ( 1+1.2345*%i , 1+1.2347*%i , %eps , 1.e-3 ) // 0 assert_comparecomplex ( 1+1.2345*%i , 1+1.2347*%i , 1.e12*%eps , 0 ) // 0 // より実際的なデータの比較 x = [ -0.123452 - 0.123454 * %i -0.123451 + 0.123453 * %i 0.123458 - 0.123459 * %i 0.123456 + 0.123457 * %i ]; // 上位4桁以下を考慮 for i = 1 : size(x,"*")-1 order = assert_comparecomplex ( x(i) , x(i+1) , 1.e-4 ); mprintf("compare(x(%d),x(%d))=%d\n",i,i+1,order) end // バグ#415からのデータを比較 x = [ -1.9914145 -1.895889 -1.6923826 -1.4815461 -1.1302576 -0.5652256 - 0.0655080 * %i -0.5652256 + 0.0655080 * %i 0.3354023 - 0.1602902 * %i 0.3354023 + 0.1602902 * %i 1.3468911 1.5040136 1.846668 1.9736772 1.9798866 ]; // 上位4桁以下を考慮 for i = 1 : size(x,"*")-1 order = assert_comparecomplex ( x(i) , x(i+1) , 1.e-5 ); mprintf("compare(x(%d),x(%d))=%d\n",i,i+1,order) end
履歴
バージョン | 記述 |
5.4.0 | 関数が導入されました |
参考文献
https://gitlab.com/scilab/scilab/-/blob/81a9cc049332de0c712cf56da585fcd25c8e59e3/scilab/modules/polynomials/tests/nonreg_tests/bug_415.tst
https://gitlab.com/scilab/scilab/-/blob/4ce3d4109dd752fce5f763be71ea639e09a12630/scilab/modules/cacsd/tests/nonreg_tests/bug_68.tst
Report an issue | ||
<< assert_checktrue | Assert | assert_computedigits >> |