タグ付けされた質問 「accuracy」

17
Python用の高品質な非線形プログラミングソルバーはありますか?
解決すべきいくつかの挑戦的な非凸のグローバル最適化問題があります。現在、MATLABのOptimization Toolbox(特にfmincon()algorithm ='sqp'を使用)を使用していますが、これは非常に効果的です。ただし、私のコードのほとんどはPythonで作成されているため、Pythonでも最適化を行いたいと考えています。競合できるPythonバインディングを備えたNLPソルバーはありfmincon()ますか?ちがいない 非線形等式および不等式の制約を処理できる ユーザーがヤコビアンを提供する必要はありません。 グローバルな最適化を保証していなくても構いません(保証fmincon()しません)。私は、困難な問題や、それよりもわずかに遅い場合でも、ローカル最適にロバストに収束するものを探していfmincon()ます。 OpenOptで利用できるソルバーをいくつか試しましたが、MATLABのソルバーより劣っていfmincon/sqpます。 強調するために、私はすでに扱いやすい定式化と優れたソルバーを持っています。私の目標は、ワークフローをより合理化するために、単に言語を変更することです。 Geoffは、問題のいくつかの特性が関連している可能性があると指摘しています。彼らです: 10-400の決定変数 4〜100の多項式等式制約(1〜8の範囲の多項式次数) 決定変数の数の約2倍に等しい合理的な不等式制約の数 目的関数は決定変数の1つです 不等式制約のヤコビアンと同様に、等式制約のヤコビアンは密です。

5
シンボリック式から数値的に正確な浮動小数点Cルーチンを自動生成できるソフトウェアはありますか?
実変数の実関数が与えられた場合、IEEE 754算術を搭載したマシンのすべての入力で関数を計算するための数値的に正確なコードを自動的に生成できるソフトウェアはありますか? たとえば、評価される実関数が次の場合: ソフトウェアは、致命的なキャンセルと、特定の入力セットの出力テーブル検索を考慮して、計算精度の低下を回避します。 あるいは、純粋なテーブルベースのルックアップルーチンを生成して、特定の関数を高精度で計算できるソフトウェアはありますか?


2
マトリックスを反転することが良くない理由の実際的な例
行列を反転して線形システムを解くことは、システムを直接解くか、LU、Cholesky、またはQR分解を使用するほど正確で効率的ではないため、お勧めできません。 しかし、実際の例ではこれを確認できませんでした。このコードを試しました(MATLABで) M = 500; A = rand(M,M); A = real(expm(1i*(A+A.'))); b = rand(M,1); x1 = A\b; x2 = inv(A)*b; disp(norm(b-A*x1)) disp(norm(b-A*x2)) 残差は常に同じ次数(10 ^ -13)です。 inv(A)* bがA \ bよりもはるかに不正確ではない実用的な例を提供できますか? ------質問の更新------ ご回答ありがとうございます。ただし、システム倍を解く必要があるとします。ここで、は常に同じ行列です。それを考慮してくださいnnnA x = bAバツ=bAx = bAAA -満杯であるため、と同じメモリ・ストレージが必要。AAAA− 1A−1A^{-1}AAA 条件数が小さいため、を正確に計算できます。AAAA− 1A−1A^{-1} その場合、LU分解を使用するよりもを計算する方が効率的ではないでしょうか?たとえば、私はこのMatlabコードを試しました:A− 1A−1A^{-1} %Set A and b: M = 1000; A …

1
計算方法が改善されていますか?
ほとんどの数学ライブラリには、対数関数の多数のバージョンがあります。ほとんどの場合、それらは完璧であると仮定しますが、実際にはかなりの数の精度が一定の桁数で提供されています。 一部の関数には、数値的に安定したバリアントがあります。たとえば、Fortran、R、Java、Cの両方にはMath.log1p、計算用にlog(1.0+x)(xの小さな値に対してより高い精度を提供する)と、対応するがありexpm1ます。ここで、数値の問題は精度の低下から発生します- x本当に小さい場合1.0 + x、先頭の1を保持するために桁が失われます。 私は、多くの状況で精度を高めるためのそのような関数を見てきました。これは、高い数値精度で分布関数(ガンマ、ベータ、ポアソンなど)を実装する場合によくあるようです。たとえば、ガンマ関数はほとんどの場合、として使用されlogGammaます。一般に、「ログスペース」に移動すると精度が大幅に向上する可能性があるため、ほとんどの関数にはRに「ログスペース」フラグが設定されているようです。 別の例では、Rは、存在log1mexpのためにlog(1 - exp(p)): http://cran.r-project.org/web/packages/Rmpfr/vignettes/log1mexp-note.pdf エントロピーと情報理論的手段で遊んでいます。非常に一般的な用語があります p * -log(p) 通常、対数の底はeではなく2になります。しかし、これは多くの場合、これは線形要因に過ぎず、自然対数も使用できます(したがって、これは私にとって重要ではありません)。とにかく、この用語をより速く/より直接的に/より正確に計算する方法があるかどうか知っていますか?私はあちこちでそれを持っているので、それをもう少し正確かつ高速にするために本当に成果を上げることができます(通常の「時期尚早な最適化」のものをありがとう、ありがとう)。 精度の低下を引き起こす明白な理由は見当たりません。そのため、この計算を高速化するための素晴らしいトリックがあるかどうかに主に興味があります。それはおそらく私がp=0コーナーケースを処理することを節約することもあります(これは存在し0ますlog(0)が、存在しませんが)、ベース2を無料で提供します(ただし、定数との単一の乗算は明らかに高価ではありません)。ありがとう。

2
特異線形ODEの固有システムを見つけるための有限差分法の精度をどのように改善しますか
私はタイプの方程式を解こうとしています: ( - ∂2∂バツ2− f(X )) ψ(X)=λψ(X)(−∂2∂x2−f(x))ψ(x)=λψ(x) \left( -\tfrac{\partial^2}{\partial x^2} - f\left(x\right) \right) \psi(x) = \lambda \psi(x) ここで、f(x )f(x)f(x)は、最小のN個の固有値と固有ベクトルに対して、000に単純な極を持ちます。境界条件は以下のとおりですψ (0 )= 0とψ (R )= 0、と私はオーバー機能で探しています(0 、R ]。NNNψ (0 )= 0ψ(0)=0\psi(0) = 0ψ (R )= 0ψ(R)=0\psi(R)=0(0 、R ](0,R](0,R] ただし、非常に単純な等間隔の有限差分法を実行すると、最小の固有値は非常に不正確になります(「偽」の固有値が存在することがわかっているものよりも数桁大きい「最初の固有値」が2番目になりますが、まだ不十分です。 そのような有限差分スキームの精度に影響を与えるものは何ですか?特異点が問題の原因であり、不等間隔のグリッドが物事を大幅に改善すると思いますが、良い不均一な有限差分法に向けて私を指すことができる論文はありますか?しかし、おそらく高階差分スキームはそれをさらに改善するでしょうか?どのように決定しますか(または単に「両方試してみてください」) 注:私の有限差分スキームは、3つの対角線が次の対称三重対角です。 ( − 12 Δ2、1△2− f(x )、− 12 Δ2)(−12Δ2,1Δ2−f(x),−12Δ2)\left( -\frac{1}{2 \Delta^2}, …

4
不完全でガンマ関数の高速かつ正確な倍精度実装
倍精度特殊関数を実装する最新の方法は何ですか?:私は、次の積分必要 ため、M=0、1、2、。。。そして、t>0で、これは下側の不完全ガンマ関数で書くことができます。これが私のFortranとCの実装です。Fm(t)=∫10u2me−tu2du=γ(m+12,t)2 トンm + 12Fメートル(t)=∫01あなた2メートルe−tあなた2dあなた=γ(メートル+12、t)2tメートル+12 F_m(t) = \int_0^1 u^{2m} e^{-tu^2} d u = {\gamma(m+{1\over 2}, t)\over 2 t^{m+{1\over 2}}} M = 0 、1 、2 、。。。メートル=0、1、2、。。。m=0, 1, 2, ...t > 0t>0t>0 https://gist.github.com/3764427 これは級数展開を使用し、指定された精度になるまで項を合計し、再帰関係を使用してより低い値を効率的に取得します。私はそれをうまくテストし、必要なすべてのパラメーター値に対して1e-15の精度を取得しました。詳細については、Fortranバージョンのコメントを参照してください。メートルメートルm それを実装するより良い方法はありますか?以下は、gfortranでのガンマ関数の実装です。 https://github.com/mirrors/gcc/blob/master/libgfortran/intrinsics/c99_functions.c#L1781 私がしている無限級数を合計する代わりに、有理関数近似を使用しています。均一な精度を得る必要があるので、これはより良いアプローチだと思います。これらのものにアプローチするためのいくつかの標準的な方法はありますか、または各特別な関数の特別なアルゴリズムを理解する必要がありますか? アップデート1: コメントに基づいて、SLATECを使用した実装を次に示します。 https://gist.github.com/3767621 おおよそ1e-15の精度で、私自身の関数の値を再現します。ただし、t = 1e-6およびm = 50の場合、項は1e-303に等しくなり、より高い "m"の場合は、誤った答えを出し始めます。Fmに直接級数展開/再帰関係を使用するため、関数にこの問題はありません。正しい値の例を次に示します。tm + 12tメートル+12t^{m+{1\over2}}FメートルFメートルF_m 、F100F100F_{100}(1e-6)=4.97511945200351715E-003 しかし、分母が爆発するため、SLATECを使用してこれを取得することはできません。ご覧のとおり、実際の値は小さく、小さくなっています。FメートルFメートルF_m アップデート2: 上記の問題を回避するために、1機能を使用することができますdgamit(Tricomiの不完全ガンマ関数)を、そしてF(m, …

2
2次の六面体有限要素には8ガウスポイントが必要ですか?
非物理モードを導入せずに、8ガウスポイント未満の六面体有限要素の2次精度を取得することは可能ですか?単一の中央ガウスポイントは非物理的なせん断モードを導入し、8ガウスポイントの標準的な対称配置は、四面体の離散化と比較して高価です。 編集:誰かが方程式を求めました。私が興味を持っている方程式は、動的または準静的な非線形弾性です。準静的方程式は ∇⋅P(∇ϕ)=0∇⋅P(∇ϕ)=0\nabla \cdot P\left(\nabla \phi \right) = 0 ϕ:Ω→R3ϕ:Ω→R3\phi : \Omega \to \mathbf{R}^3Ω⊂R3Ω⊂R3\Omega \subset \mathbf{R}^3P:R3×3→R3×3P:R3×3→R3×3P : \mathbf{R}^{3 \times 3} \to \mathbf{R}^{3 \times 3}P(F)=μ(F−F−T)+λF−TlogdetFP(F)=μ(F−F−T)+λF−Tlog⁡detF P(F) = \mu (F - F^{-T}) +\lambda F^{-T} \log \det F

2
「ゼロ」による除算が可能な数値積分
統合しようとしています ∫10t2 n + 2exp(α R0t) dt∫01t2ん+2exp⁡(αr0t)dt\int^1_0 t^{2n+2}\exp\left({\frac{\alpha r_0}{t}}\right)dt これはの単純な変換です ∫∞1バツ2 nexp(- α R0x )dバツ∫1∞バツ2んexp⁡(−αr0バツ)dバツ\int^{\infty}_1 x^{2n}\exp(-\alpha r_0 x)dx 不適切な積分を数値で近似することが難しいため、を使用します。ただし、これは新しい被積分関数をゼロに近い値で評価するという問題につながります。間隔は長さ1しかないため、適切な数の直交ノードを取得するのは非常に簡単です(したがって、比較可能なを非常に小さくすることができます)。t = 1バツt=1バツt = \frac1{x}dtdtdt あるレベルでは、単にをとることは、がいくつかの小さな数である場合に良い考えだと思います。しかし、何を選ぶべきですか?マシンイプシロンにする必要がありますか?マシンイプシロンによる除算は十分に数値化された数ですか?さらに、私のマシンのイプシロン(またはそれに近い)の除算が信じられないほど大きな数を与える場合、取得はさらに大きくなります。∫1εt2 n + 2exp(α R0t) dt∫ε1t2ん+2exp⁡(αr0t)dt\int^1_\epsilon t^{2n+2}\exp({\frac{\alpha r_0} {t}})dtεε\epsilonexp(1ε)exp⁡(1ε)\exp(\frac{1}{\epsilon}) これをどのように説明する必要がありますか?この関数の数値積分を明確に定義する方法はありますか?そうでない場合、機能を統合する最良の方法は何ですか?


1
自動ステップサイズ選択を使用したコードで、時間ステップサイズが十分に小さいことを示す
私は最近、非常に固い一時的な問題を解決する多数のレガシーコードを継承しました。計算されたソリューションの質的性質が減少しても変化しないように、空間的および時間的ステップサイズが十分に小さいことを示したいと思います。つまり、定性的には「収束」していることを示したいと思います。空間メッシュサイズを明示的に設定できるため、その部分は簡単です。ただし、コードでは自動タイムステップサイズ制御を使用しているため、タイムステップサイズを直接設定することはできません。 アルゴリズムは、最後のタイムステップ中に許容誤差に到達するために必要なヤコビの反復回数に基づいて、2つの境界間のタイムステップを変更します。ヤコビアン反復法を使用しているという事実は、それが何らかの暗黙のスキームであることをかなり確信させますが、私は絶対的に確信することはできません。現在のタイムステップで発生しているエラーが考慮されていないため、場合によっては反復制限に達します(数千のタイムステップの間に数​​十回、ほとんどの場合、最も動的な部分で発生します)。シミュレーション)。現在実行中の実行タイムステップの境界を2桁半の間隔(から)で設定しています。 nnn10−1310−1310^{-13}5⋅10−115⋅10−115 \cdot 10^{-11} 実行では、時間ステップの境界、現在の時間ステップを選択するために監視する過去の時間ステップの数、時間ステップの最大変化(比率)、ヤコビアン反復の目標数、最大反復回数、およびエラー限界。誰かが私をタイムステップの独立性を分析するための正しい道に導いてくれるか、少なくとも使用されているアルゴリズムを理解することができればいいのですが。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.