/* -*- MaTX -*- * * 【名前】 * cond() - 条件数(2-ノルム) * * 【形式】 * c = cond(A) * Real c; * Matrix A; * * 【機能説明】 * cond()は,行列の2-ノルムに関する条件数を求める。条件数は, * 最大特異値と最小特異値の比で与えられ,1 以上である。 * * 【アルゴリズム】 * 特異値分解を利用する。 * * 【注意】 * 繰り返し計算で特異値が求まらない場合は,次のメッセージが表示される。 * * Solution will not converge * * 【例題】 * A = [[1 2 3][4 5 6]]; * k = cond(A) = 12.3022 * * 【関連項目】 * svd, rank, and singval */ Func Real cond(A) Matrix A; { Real c; Matrix sg; // 空行列 if (length(A) == 0) { warning("cond(): 空行列\n"); c = NaN; } else { sg = singval(A); // 特異行列 if (any(sg .== 0)) { warning("cond(): 条件数は無限大。\n"); c = Inf; } else { c = max(sg)/min(sg); } } return c; }