計算科学

科学的問題を解決するためにコンピュータを使用する科学者のためのQ&A

4
Galerkin法で境界条件を組み込む方法
私はPDEを解くためのGalerkinの方法に関するウェブ上のいくつかのリソースを読んでいますが、何かについて明確ではありません。以下は、私が理解したことに関する私自身の説明です。 次の境界値問題(BVP)を検討してください。 L[u(x,y)]=0on(x,y)∈Ω,S[u]=0on(x,y)∈∂ΩL[u(x,y)]=0on(x,y)∈Ω,S[u]=0on(x,y)∈∂ΩL[u(x,y)]=0 \quad \text{on}\quad (x,y)\in\Omega, \qquad S[u]=0 \quad \text{on} \quad (x,y)\in\partial\Omega ここで、LLL微分演算子線形2次であり、Ω⊂R2Ω⊂R2\Omega\subset\mathbb{R}^2、BVPのドメインである∂Ω∂Ω\partial\Omegaドメインの境界であり、そしてSSS微分演算子線形1次です。次の形式の近似としてu(x,y)u(x,y)u(x,y)を期待します。 u(x,y)≈∑i=1Naigi(x,y)u(x,y)≈∑i=1Naigi(x,y)u(x,y)\approx \sum_{i=1}^N a_i g_i(x,y) ここで、はuを近似するために使用する関数のセットです。BVPに置き換える:gigig_iuuu ∑iaiL[gi(x,y)]=R(a1,...,aN,x,y)∑iaiL[gi(x,y)]=R(a1,...,aN,x,y)\sum_i a_i L[g_i(x,y)]=R(a_1,...,a_N,x,y) 近似は正確ではないため、残差は正確にゼロではありません。ガラーキン-リッツローリー法では、最小R必要とすることによって機能を近似のセットに対しての⟨ R 、G 、I ⟩ = 0。したがってRRRRRR⟨R,gi⟩=0⟨R,gi⟩=0\langle R,g_i \rangle = 0 ⟨R,gi⟩=∑j=1Naj⟨L[gj],gi⟩=0⟨R,gi⟩=∑j=1Naj⟨L[gj],gi⟩=0\langle R,g_i \rangle = \sum_{j=1}^N a_j \langle L[g_j],g_i \rangle = 0 したがって、係数を見つけるには、行列方程式を解く必要があります。aiaia_i ⎛⎝⎜⟨L[g1],g1⟩…⟨L[g1],gN⟩………⟨L[gN],g1⟩…⟨L[gN],gN⟩⎞⎠⎟⎛⎝⎜a1…aN⎞⎠⎟=0(⟨L[g1],g1⟩…⟨L[gN],g1⟩………⟨L[g1],gN⟩…⟨L[gN],gN⟩)(a1…aN)=0\left( \begin{array}{ccc} \left\langle L\left[g_1\right],g_1\right\rangle & \ldots …

2
多対多の一般化された割り当て問題のアルゴリズム
多対多の一般化された割り当て問題(GAP)を解決するために使用できるアルゴリズムに関する文献を見つけることができないようです。つまり、1つのエージェントに複数のタスクを割り当てることができるだけでなく、複数のエージェントを割り当てることができるモデル1つのタスクに割り当てられます(1対1および1対多のAPは、Penticoの論文で説明されています)。割り当ての問題はほとんどありませんが、調査中にこのような問題に遭遇しました。その解決方法について詳しく知りたいと思います。このような多対多のGAPが別の名前で知られている可能性はありますか、またはそれに関する文献がほとんど見つからない別の理由がありますか? Pentico、D。課題の問題:黄金周年記念調査。European Journal Of Operational Research(2007); 176(2):774-793。

10
次元に依存しないコード用の高速で軽量なC ++テンソルライブラリ
ディメンションに依存しないコードをサポートするC ++テンソルライブラリを探しています。具体的には、加重合計の計算など、各ディメンション(最大3)に沿って操作を実行する必要があります。次元はテンプレートパラメータです(したがって、コンパイル時の定数です)。別の制約として、ライブラリは比較的軽量である必要があるため、Trilinos / PETScよりもEigen / Boostスタイルが必要です。 助言がありますか? 注:私はEigenを見ており、2Dテンソルに限定されていなければ、プロファイルにほぼぴったり合っていると思います。これに間違えられたら、私を修正してください。
20 c++  libraries  tensor 

4
ブラックボックス関数の不連続性を見つける最良の方法は何ですか?
これは以前に尋ねた数学スタックエクスチェンジよりもこの質問の方が良い場所かもしれないと示唆されました。 指定された間隔どこでも(安価に)評価できるブラックボックス関数があり、ノイズがない(浮動小数点の粒度を除くなど)と仮定します。この機能の不連続性を見つける最良の方法は何でしょうか?不連続点がいくつあるかはわかりませんが、不連続点はないかもしれません。[a,b][a,b][a,b] いくつかの簡単な方法(均一なサンプリング、サンプル間に大きな違いがある場合の改良など)を考えることができますが、おそらくもっと良い方法がありますか? この関数は「合理的」で、高次微分の場合と同じように、最大​​で有限の多くの不連続があると仮定できます。小さな病理学的不連続が見落とされても構いません...(アプリケーションは1d関数の自動プロットです) 。 - 答えてくれたすべての人、特にペドロに感謝します。Pachón、Platte、およびTrefethenで説明されている方法が私にとって最良のアプローチであると思われるので、次に実装します

2
Pythonでカスタム確率密度関数を定義する
自分自身を定義するためにいくつかの確立Pythonパッケージ(例えばscipyのダウンロード)を使用しての方法があり、確率密度関数を(ただ、事前のデータなしでのような、私はそれで計算を行うことができるようには、()連続ランダム変数の分散を取得する)?もちろん、SymPyやSageなどを使用して、シンボリック関数を作成し、操作を行うこともできますが、この作業をすべて自分で行う代わりに、既に実装されているパッケージを利用できるのではないかと考えています。f(x ) = a x + bf(バツ)=aバツ+bf(x) = a x + b

9
形状関数の基本的な説明
私は、学部課程で行っていた方法と比較して、より構造化された方法でFEMの研究を始めました。私がこれを行っているのは、商用(およびその他の非商用)ソフトウェアで「FEM」を使用できるという事実にもかかわらず、この方法をサポートするアンダーグラウンドテクニックを本当に理解したいからです。だからこそ、少なくともこのテクニックの経験豊富なユーザーにとっては、基本的な質問があります。 今、私はZienkwiczの「Finite element method- The basics」という非常に人気のある(エンジニアに優しい)本を読んでいます。私はこの本を最初のページから読んでいますが、Zienkwiczが説明するように形状関数の概念をまだ理解できません。 私が読んだことから私が知っていることは、「剛性」行列、未知数と結果( in:A k = b)を関連付ける行列は、「ノード間の関係」からの成分を持っているということです。 、およびその「関係」が変更された場合(つまり、高次の補間に変更した場合)、ノード間の関係が変更されるため、その剛性マトリックスが変更されます。AAAAk=bAk=bAk=b しかし、この本では、定義はかなり曖昧です。ある時点で、関数を恒等行列として任意に選択できると言っているからです。 私が見つけた唯一の説明はこのブログにありますが、それは私にとってまだ明確ではありません。だから、誰かが私にシェイプ関数とは何か、そしてそれがスティフネスマトリックスに「置く」ためにどのように行われるかについて簡単な説明をすることができますか?

3
Scientific Pythonの有限差分法の推奨事項
私が取り組んでいるプロジェクト(双曲線PDEの場合)では、いくつかの数値を見て、動作の大まかなハンドルを取得したいと思います。しかし、私はあまり良いプログラマーではありません。 Scientific Pythonで有限差分スキームを効果的にコーディングする方法を学習するためのリソースをお勧めできますか(学習曲線が小さい他の言語も歓迎します)? この推奨事項の対象者(私)のアイデアを提供するには: 私は訓練によって純粋な数学者であり、有限差分スキームの理論的な側面にある程度精通しています 私が助けが必要なのは、コンピューターに計算したいものを計算させる方法です。特に、他の人がすでに行った労力をあまり重複させないように(車輪を再発明しないようにパッケージは既に利用可能です)。(私が避けたいもう一つのことは、目的に合ったデータ構造が確立されているときに、何かを手作業でコーディングすることです。) コーディングの経験があります。しかし、Pythonには何もありませんでした(したがって、別の言語を学習するための優れたリソースがあるかどうかは気にしません[たとえば、Octave])。 サンプルコードのコレクションと同様に、書籍とドキュメントの両方が役立ちます。

3
パラレルI / Oオプション、特にパラレルHDF5
簡単に並列化できるアプリケーションがありますが、そのパフォーマンスは大部分がI / Oバウンドです。アプリケーションは、通常2〜5 GBのサイズのファイルに格納されている単一の入力配列を読み取ります(ただし、この数値は将来的に増加する予定です)。典型的な計算では、その配列の各行または列に同じ操作が適用されます。CPUを大量に使用する操作では、約100プロセッサまで非常に優れたスケーリングが得られますが、遅い操作ではI / Oおよび関連する通信(NFSアクセス)が支配的であり、少数のプロセッサしか効率的に使用できません。 そのような状況で効率的でポータブルな(理想的には移植性の高い)オプションは何ですか?並列HDF5は有望なようです。誰かがそれを実際に体験したことがありますか? MPI-I / Oは検討する価値があるでしょうか?特定のファイルレイアウトで効率的に動作することはできますか、それともすべてを適応させる必要がありますか?

3
最適化において非凸性が問題になるのはなぜですか?
一般に非凸最適化について何かを読み始めたとき、私は非常に驚きました、そして、私はこのような声明を見ました: 重要な多くの実用的な問題は非凸であり、ほとんどの非凸の問題は、妥当な時間内に正確に解決するのが不可能ではないにしても困難です。(ソース) または 一般に、極小値を見つけるのはNP困難であり、多くのアルゴリズムは点でスタックする可能性があります。(ソース) 私は毎日、非凸最適化のようなものをやっています-すなわち、分子幾何学の緩和。私はそれを、トリッキーで遅く、行き詰まりやすいものとは決して考えませんでした。このコンテキストでは、明らかに多次元の非凸面(> 1000自由度)があります。FIREなどの最急降下および動的消光から派生した主に1次の手法を使用します。これは数百ステップで局所的な最小値(DOFの数未満)に収束します。確率的ノイズを追加すると、それは地獄のように堅牢でなければならないことを期待しています。(グローバル最適化は別の話です) これらの最適化手法を停滞させるか、ゆっくりと収束させるために、ポテンシャルエネルギーサーフェスがどのように見えるかを想像することはできません。例えば、非常に病理学的なPES(ただし、非凸性によるものではない)は、このらせんですが、それほど大きな問題ではありません。病理学的な非凸PESの実例を挙げていただけますか? それで、私は上記の引用と議論したくありません。むしろ、私はここで何かを見逃していると感じています。おそらくコンテキスト。

6
C ++関数の数値エラーの分析
入力として複数の浮動小数点値(単一または二重)を受け取り、何らかの計算を行い、出力浮動小数点値(単一または二重)を生成する関数があるとします。私は主にMSVC 2008で作業していますが、MinGW / GCCでも作業する予定です。私はC ++でプログラミングしています。 結果に含まれるエラーの量をプログラムで測定する一般的な方法は何ですか?私は任意精度ライブラリを使用する必要があると仮定します:速度を気にしない場合、そのような最適なライブラリは何ですか?

1
チェビシェフ多項式を使用したスペクトル法の難しさ
私は論文を理解しようとするのに少し苦労しています。この論文では、スペクトル法を使用して、結合ODEのシステムから得られる固有値を解きます。私の質問の核心に到達するのに十分であるので、私は今1つの方程式だけを書きます。 方程式は V[r]=e−(ν[r]+λ[r])ϵ[r]+p[r]∗[(ϵ[r]+p[r])(eν[r]+λ[r])rW[r]]′V[r]=e−(ν[r]+λ[r])ϵ[r]+p[r]∗[(ϵ[r]+p[r])(eν[r]+λ[r])rW[r]]′V[r] = \frac{e^{-(\nu[r] +\lambda[r])}}{\epsilon[r] + p[r]} *\biggr[ (\epsilon[r] + p[r])( e^{\nu[r] +\lambda[r]})r W[r] \biggr]' 派生物を実行して取得する (Eq1) V=[ϵ′+p′ϵ+p+r(ν′+λ′)+1]W+rW′V=[ϵ′+p′ϵ+p+r(ν′+λ′)+1]W+rW′V = \biggr[ \frac{\epsilon' +p'}{\epsilon + p} + r(\nu'+\lambda') +1 \biggr] W + r W' 論文によると、システムの平衡量)を次の形式のチェビシェフ多項式として展開できるはずです。(ϵ,p,ν,λ(ϵ,p,ν,λ(\epsilon ,p ,\nu ,\lambda B[r]=Σ∞i=0biTi[y]−12b0B[r]=Σi=0∞biTi[y]−12b0B[r] = \Sigma_{i=0}^{\infty}b_i T_i[y] - \frac{1}{2} b_0 、ここでは多項式です。Mathematicaで書いたコードを使ってを取得する方法を知っています。また、、の領域はです。b i y = 2 (r …

2
PDEの数値解が連続解に収束しているかどうかを判断する方法は?
ラックスの等価定理は、直線状の初期値問題の数値スキームの一貫性と安定性が収束するための必要十分条件である状態。しかし、非線形問題の場合、一貫性があり安定しているにもかかわらず、数値的手法は誤った結果に非常に合理的に収束する可能性があります。たとえば、このホワイトペーパーでは、1次元線形化浅水方程式に適用された1次ゴドノフ法が、不正解にどのように収束するかを示しています。 メッシュと時間ステップの洗練の下で明らかに自己収束は十分ではありませんが、正確な解は一般に非線形PDEには利用できません。

4
微分を含む数値求積法
求積法のほとんどの数値的手法は、被積分関数をブラックボックス関数として扱います。さらに情報がある場合はどうなりますか?特に、もしあれば、被積分関数の最初の数個の導関数を知ることからどんな利益が得られますか?他にどのような情報が価値があるのでしょうか? 特に導関数の場合:基本的な求積法(長方形/台形/シンプソンの規則)の誤差推定値は密接に関連しています。おそらく、動的適応性に依存する代わりに、サンプリング解像度を事前に選択する方法がありますか? 私は単変量と多次元の両方の場合に興味があります。

3
いくつかの最適化問題がタイムステップと同等であることはよく知られていますか?
y0y0y_0β∈Rβ∈R\beta \in \mathbb Ryyyuuu12∥y−y0∥2+β2∥u∥212‖y−y0‖2+β2‖u‖2\begin{equation} \frac{1}{2} \| y - y_0 \|^2 + \frac{\beta}{2} \| u \|^2 \end{equation}Ay=u.Ay=u.\begin{equation} Ay = u. \end{equation}y,y0,u∈Rny,y0,u∈Rn y, y_0, u \in \mathbb R^n A∈Rn×nA∈Rn×n A \in \mathbb R^{n \times n} ラグランジアンを形成し、静止点を探し、制御を削除すると、1次条件 によってPremultiplying第一方程式および第二に、我々は、正規方程式を書くことができる これらを微分方程式の後方オイラー近似の単一ステップとして解釈することができます uuuATλAy=y0−y=1βλATλ=y0−yAy=1βλ\begin{align*} A^T \lambda &= y_0 - y \\ Ay &= \frac{1}{\beta} \lambda \end{align*}AAAATATA^T(I+βAAT)λ(I+βATA)y=βAy0=y0(I+βAAT)λ=βAy0(I+βATA)y=y0\begin{align} (I …

4
FortunaまたはMersenne Twisterは、アルゴリズムRNGとして望ましいですか?
最近の回答では、モンテカルロシミュレーションをシードするためにFortunaまたはMersenne Twister Random Number Generators(RNG)を使用することに言及しました。フォーチュナのことを聞いたことがなかったので調べてみたところ、主に暗号化の使用を目的としているようです。 現在、実動コードでMersenne Twisterを使用してK-Meansアルゴリズムをシードしています。 「FortunaまたはMersenne Twister」は、「アルゴリズムシード」​​アプリケーション(モンテカルロとK-Meansのシードなど)に最適と見なされますか?または、それは「投げる」-つまり最も便利なものを使用します。 私が座っているところから、「最高」は最高品質の乱数を提供し、迅速に動作し、(おそらく)メモリのフットプリントが小さいはずです。これらのうち、おそらく品質は私たちのほとんどにとって最も重要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.