7

行列を 4 倍精度で対角化し、対数をとろうとしています。組み込み関数を使用してこれを達成できる言語はありますか?

タグ内の言語/パッケージは不十分であり、次の欠陥があることに注意してください。

Matlab: 4 倍精度をサポートしていません。

Python/NumPy/SciPy: dtype float128 の行列は float64 で固有ベクトルを生成します。

Sage: GP/PARI を介したインターフェイスで不可解なエラー メッセージが表示されます。

誰かが対角化と行列対数を 4 倍精度で実行したことがありますか? もしそうなら、どのように?

4

3 に答える 3

8

@Matlab:四倍精度をサポートしていません。

MATLAB用のMultiprecisionComputingToolboxは、任意精度の線形代数計算のためのルーチンを提供します。

それは他の多くの分野をカバーしています-基本的な数学、数値的方法(積分、常微分方程式、最適化)、特殊関数と基本的なデータ分析。

さらに、既存のMatlabのプログラムを、ソースコードに最小限の(またはまったく)変更を加えることなく、任意の精度で実行できます。

更新(2013年3月27日):ツールボックスには、他の方法と比較してほぼ100倍高速な高速四倍精度モードも含まれています。比較と詳細については、MATLABでの高速四倍精度計算を参照してください。


提案された代替案に関する批評家:

記号計算を対象としたMathworksの記号数学ツールボックス(MATLAB)。そのため、任意精度の数値計算に必要な多くの重要な機能が欠けています。

たとえば、2つのvpa()数値は(設計上)「シンボリック」タイプであるため、比較することさえできません。この唯一の制限により、99%のアルゴリズムが数値解析から除外されます。

SymbolicMathToolboxにないその他の基本的な線形代数関数は次のとおりnorm, cond, max, min, sort, lu, qr, chol, schurです。

無料のMultiplePrecisionToolbox(MATLAB)。

非常に遅く(すべての算術演算でオペランドの数値から文字列への変換を実行します:)、+, -, ...本質的な機能(eig, det, cond, \, ...)がないことに加えて、それが持つ関数で間違った結果をもたらします。

たとえば、svd関数によって提供された誤った結果は、ある時点で私の研究を無意味にし、エラーを見つけるのは苦痛でした。

mpmath(Python)

主に特殊関数コンピューティング(特に超幾何ファミリー)を対象としています。また、多かれ少なかれ高度な数値アルゴリズムをサポートしていません。行列はほとんどサポートされていません。最新バージョンで探している行列の対数があるようですが。


実際、これらすべての欠点により、MATLABの独自の拡張機能を開発して、任意精度の計算を可能にするようになりました(冒頭で参照-MATLABのMultiprecision Computing Toolbox)。仕事に必要なだけです。

それは活発な開発中です(しかし、他の選択肢でリストされたすべての問題をすでに修正しています)-フィードバックをいただければ幸いです。

于 2012-03-07T02:00:02.200 に答える
3

対角化に関しては、これが役立つかもしれません(彼は、与えた場所で2倍になり、4倍精度を使用するよりも正確な固有値も必要でした)。

彼はFortranを使用しています。クワッドに変更するには、整数を8ではなく16に定義し、「-fdefault-real-8」を使用してLAPACKをgfortranで再コンパイルし、ダブルをクワッドにプロモートする必要がありました。¿たぶん、このようにLAPACKを構築して、NumPyから使用できますか?知らない。

もちろん、この精度は実際にシミュレートされているため、プログラムは10倍遅くなりました。

具体的ではないことをお詫びします。私はこのようなことは試していませんが、ブログの投稿を覚えていて、少なくとも始めるには十分かもしれません。

于 2012-02-29T20:04:53.033 に答える
1

両方とも MATLAB 用のSymbolic Math Toolboxまたは無料で入手できるMultiple Precision Toolboxは、ニーズを満たしますか? Multiple Precision Toolbox には に相当するものはないようですが、eigはありますsvd

于 2012-03-01T11:54:37.320 に答える