行列演算においては行列の条件数が非常に重要になることが知られている。例えば行列が実対称行列ならば、最大固有値の絶対値を最小固有値の絶対値で割った比になる。実対称半正定値行列ならば、全ての固有値が0以上なので、単純に最大固有値と最小固有値の比になる。条件数の最小値は1であるが(最小固有値が0より大きければ)、1に近いほど数値誤差が少なくアルゴリズムの収束性も良い。
SDP において中心パスに近いほど条件数が良くなるが、実際には最適解に近づくにつれて変数行列 X と Z の条件数が悪化していく。X と Z の条件数が悪化すれば当然 X と Z から計算される行列の条件数も悪化する。ただし反復法なので X と Z の条件数が悪化するというよりも前の反復において正しく X や Z の計算が行われていないと言った方が正しい。特に Z の逆行列をコレスキー分解を用いて計算しているが特にこの部分が危険である。Z の逆行列を多倍長計算を用いて計算すると精度が良くなるという結果がある。個人的には多倍長計算+Iterative Refinement でもっと精度が良くなると思っているが。
IEEE 754-1985 の倍精度計算では有効数字は16桁なので現在の行列の条件数では現在得られている精度で限界ということだろう。多倍長計算と条件数を減らす工夫等が必要になる。
SDP において中心パスに近いほど条件数が良くなるが、実際には最適解に近づくにつれて変数行列 X と Z の条件数が悪化していく。X と Z の条件数が悪化すれば当然 X と Z から計算される行列の条件数も悪化する。ただし反復法なので X と Z の条件数が悪化するというよりも前の反復において正しく X や Z の計算が行われていないと言った方が正しい。特に Z の逆行列をコレスキー分解を用いて計算しているが特にこの部分が危険である。Z の逆行列を多倍長計算を用いて計算すると精度が良くなるという結果がある。個人的には多倍長計算+Iterative Refinement でもっと精度が良くなると思っているが。
IEEE 754-1985 の倍精度計算では有効数字は16桁なので現在の行列の条件数では現在得られている精度で限界ということだろう。多倍長計算と条件数を減らす工夫等が必要になる。