計算科学

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

1
赤(-緑)-絞り込みと最新の頂点の二等分
これら2つのメッシュリファインメントの「長所と短所」は何ですか?どちらも一般的な方法のようです。 エラー分析を容易にするいくつかの魅力的な形式的プロパティ、さらにはNVBとのローカル適応が実装しやすいように見えるため、NVBはAFEM理論で使用されている一方で、グローバルな赤の調整は比較的簡単に実装でき、マルチグリッド法の研究に魅力的であると自然に想像できます。 Red-Green-Refinementよりも。

4
最大周期の並列線形合同擬似乱数ジェネレータをシードするにはどうすればよいですか?
通常、Cで順次乱数ジェネレータをシードするときは、次の呼び出しを使用します srand(time(NULL)) 次に使用します rand() mod N 0とN-1の間のランダムな整数を取得します。ただし、これを並行して実行すると、time(NULL)の呼び出しが互いに非常に近いため、最終的にはまったく同じ数になります。 私は線形合同乱数ジェネレーターを使ってみました: xn+1:=axn+c(modm)xn+1:=axn+c(modm)x_{n+1} := a x_n + c\;\;\; (\bmod m) a,c,a,c,a,c,mmm 私が選択することを知っている、いくつかの大きな整数のためにモジュラス演算子が桁を切り捨てることによって計算することができるので、迅速な結果を生成します。しかし、周期の大きいランダムなシーケンスを並列に生成するシードを確立するのは難しいと思います。次の場合、期間の長さが最大であることを知っています m=2km=2km=2^kkkk cとmは互いに素である a-1はmのすべての素因数で割り切れる mが4の倍数の場合、a-1も4の倍数でなければなりません。 (ソース:ウィキペディア) しかし、どのようにすればすべての乱数ストリームにこの最大の特性があることを確認できますか?MPIに関して、rankおよびを組み込んでsize線形合同法を使用して最大周期を生成するにはどうすればよいですか?ラグのあるフィボナッチまたはメルセンヌツイスターを使用して、より長い並列ランダムストリームを生成する方が簡単でしょうか?

4
タンパク質の折りたたみを研究するためのオープンソースコードはありますか?
暗黙的な溶媒和モデルの溶媒和パラメーターの影響をテストし、どのコードが小さなタンパク質のタンパク質フォールディングのスタンドアロンプ​​ログラムとして自由に利用できるか、そしてダイナミクスの代わりにエネルギー最小化アプローチを使用するので、分子動力学コードを探していません。

1
浮動小数点のベクトルを比較する正しい方法は何ですか?
浮動小数点数の比較には許容誤差を使用する必要があることを知っています。しかし、ベクトルを比較するために、さまざまな距離メトリックに対応する3つの可能なソリューションを考えることができます。 各ベクトルのコンポーネントを個別に比較します。3つすべてが許容範囲内であれば、ベクトルは等しいです。このオプションは、均一なノルムのように動作し、公差の立方体を提供します。 すべての絶対差の合計をある許容誤差と比較します。これは、タクシーの規範のように動作し、許容範囲のシンプレックスを提供します。 (vecA-vecB)のユークリッド長を計算し、許容範囲内かどうかを確認します。これは、許容範囲を持つ標準ユークリッドノルムを与えます。 しかし、私の主な関心事は数値の安定性です。ユークリッドノルムは最良のオプションのように「感じます」が、すべての計算がより多くの丸め誤差を誘発するのではないかと心配しています。程度は低いですが、オプション2でもエラーが発生する可能性があります。(たとえば、ベクトルのx成分がyおよびzよりもはるかに大きい場合、すべての差を合計すると、yおよびzからの寄与がすべて失われる可能性があります。)現在、オプション1に傾いています。 誰もがこの問題について権威ある立場を取ることを検討できますか?

2
線形制約付きの片側非線形最小二乗
私は線形制約付きの片側非線形最小二乗問題、つまり問題を解決しようとしています: minx∑mi=1ri(x) s.t Ax≤bminx∑i=1mri(x) s.t Ax≤b\min_{\mathbf{x}} \quad \sum^m_{i=1} \mathbf{r}_i(\mathbf{x}) \qquad \text{ s.t } \quad A\mathbf{x} \leq \mathbf{b} どこ ri(x)=fi(x)2ri(x)=fi(x)2r_i(\mathbf{x})=f_i(\mathbf{x})^2 if fi(x)&gt;0fi(x)&gt;0f_i(\mathbf{x})>0場合、ri(x)=0ri(x)=0r_i(\mathbf{x})=0。 言い換えれば、これは正の残差(fff)のみが含まれる最小二乗問題と考えることができます。これがデータフィッティングケースではないことを強調できません。ほとんどのデータフィッティングの場合に使用するとどうなるかを知っています。結果は、すべての観測値の「上の」関数にすぎません。このアプリケーションは、通常minmaxノルムで解決される特定の最適化問題を解決するためのものです(minx||f(x)||∞minx||f(x)||∞\min_{\mathbf{x}} ||\mathbf{f}(\mathbf{x})||_\infty)。すべての実際的なケースでは、f関数の動作により、解はゼロに到達しません。つまり、|| \ mathbf {f}(\ mathbf {x})|| _ \ infty \ neq 0です。||f(x)||∞≠0||f(x)||∞≠0||\mathbf{f}(\mathbf{x})||_\infty \neq 0fff 関数は、非線形であり、我々は解析的にあまり余計なトラブルもなくヤコビアンを計算することができるようなその誘導体へのアクセスを、持っています。fff いくつかの成功を収めて、目的関数が上記のように定式化されるLevenberg-Marquardtアルゴリズムを適用しました。つまり、0未満のが合計から削除され、ヤコビアン対応する行がゼロに設定されます(つまり、 ifこれはかなり大雑把ですが問題なく動作しますが、残念ながら線形制約を組み込むことができませんでした。fffJJJJi,:=0Ji,:=0J_{i,:}=0fi(x)&lt;=0fi(x)&lt;=0f_i(\mathbf{x})<=0 制限された制約のみでNLLSQ問題を解決する多くの方法を認識していますが、これらの方法は明らかに問題を解決しません。DQEDと呼ばれる線形制約付きのNLLSQを1つだけ見つけ、それをLevenberg Marquardtで行ったように目的関数を変更することにより、制限された成功(反復/関数評価の数に不満)で使用しました。 私が探しているもの 線形制約のある非線形最小二乗問題を解く方法の提案。また、正の残差のみを含めるという事実を組み込むためにアルゴリズムを変更する方法に関する提案も歓迎されます。最後に、ヒントや考えは大歓迎ですが、問題の定式化は間違っていないことを再度強調しなければなりませんが、微分可能性がないため、最適化には最適ではないことに気づきました場合。ri(x)ri(x)r_i(\mathbf{x})ri(x)=0ri(x)=0r_i(\mathbf{x})=0

2
シーケンシャルコードが使用できない場合、単一のプロセッサで実行される並列コードの並列オーバーヘッドをどのように計算しますか?
PETScの線形ソルバーのパフォーマンスをプロファイルしています。私が理解しているように、 スピードアップ= シーケンシャルタイム並列時間。スピードアップ=順次時間並列時間。\text{speedup}=\frac{\text{Sequential Time}}{\text{Parallel Time}}. 1つのプロセッサで並列コードを実行すると、シーケンシャルパフォーマンスのプロキシとして使用できることを知っています。ただし、並列オーバーヘッドが発生するため、これは同等の順次コードの適切な尺度ではないと思います。多くの場合、シーケンシャルコードのパフォーマンスは、シングルプロセッサのパラレルパフォーマンスよりも高速です。同じソルバーを実装する数値ライブラリを検索できると思いますが、アルゴリズムが実際に同等である保証はありません。 私が理解しているように、 1つのプロセッサーでの並列パフォーマンス= 順次時間+ 並列オーバーヘッド1つのプロセッサーでの並列パフォーマンス=順次時間+パラレルオーバーヘッド\text{Parallel performance on one processor} = \text{Sequential Time} + \text{Parallel Overhead} したがって、並列オーバーヘッドを定量化する方法がある場合は、1つのプロセッサーの並列時間からそれを差し引いて、順次時間のより良い測定値を取得できます。 したがって、私の質問は次のようになります。 シーケンシャルコードが利用できない場合に、単一のプロセッサで実行される並列コードの並列オーバーヘッドを計算する方法はありますか? 本当に必要ですか?一般に、1つのプロセッサでの並列パフォーマンスは、順次パフォーマンスを概算するのに十分ですか?

2
データセットをフィルタリングして、ニューラルネットワークトレーニングのより均一な分布を取得する
スティッフODEの完全なシステムを解くのではなく、人工ニューラルネットワーク(ANN)を使用して流体の反応率を予測することを検討しています。私の研究室の何人かの人はすでにそれにいくつかの仕事をしていたので、私はゼロから始めませんが、私のアプリケーションに問題があります。そのうちの1つは、トレーニング用のデータセットの品質に関連していると思います。通常、1D / 2D / 3DのCFDシミュレーションからトレーニングデータを抽出します。とにかく、ニューラルネットワークに送るデータの多次元配列ができあがります。問題の大きさを理解するために、8つのネットをそれぞれ10の入力と1つの出力でトレーニングすることを検討しています。約100,000ポイントのトレーニングセットは妥当だと思いますが、問題は、これらの100,000ポイントが私の多次元空間の特定の領域をカバーする必要があることです。 スナップショットごとに、トレーニングが正確であることを確認するために高いサンプリングが必要な領域には、ポイントのごく一部しかありません スナップショットをまとめてコンパイルすると、多くのほぼ重複するポイントができます。これは、a)これらの領域に重点を置いてトレーニングにバイアスをかけることにより、b)不要なポイントを追加することにより、ANNトレーニングに悪影響を及ぼします。 そのため、トレーニングセットに含める前に、記録したポイントをフィルタリングしようとしています。私が見ると、新しいポイントがデータセットのすべてのポイントの特定のn次元の半径内にあるかどうかを確認する必要があります。このブルートフォースアプローチは、n ^ 2のようないくつかのトリックスケールを除外し、100,000から10,000ポイントを抽出するのにまあまあ機能します(30分かかります)が、スナップショットのサイズと数を増やすとうまくいきません...明らかに、これを行うためのより賢い方法があるはずですが、私はどちらの方向から探し始めるのかわかりません。私は最初にpythonを試してみましたが、FORTRANに移動してスピードを上げることができましたが、まずはより良い戦略を探すべきだと思います。私の唯一の希望はある種のkdツリーですか?私はそれらについてほとんどまたはまったく経験がなく、私が見る問題は、データセットを構築するとツリーが成長することであり、これは複雑さを増すだけです。Python kdツリーライブラリは私のニーズに合っていますか?問題の規模を考えると、FORTRANに移行する必要がありますか?何かアドバイスをいただければ幸いです、ありがとう!

3
非対称の非対角的に支配的なスパースシステムを最善の方法で解く
私の初期の「数値」講義から、反復線形ソルバーでは、Aが次のように分解されるときに、Ax=bAx=bAx=bAAA A=D+MA=D+MA=D + M ここで、Dは対角行列で、対角行列はゼロです。反復ソルバーが適切に実行するには、Dの要素がMのエントリよりも支配的である必要があります。MMMDDDMMM そうでない場合、のエントリが本当に小さくなった場合はどうなりますか?DDD その場合、直接ソルバーを使用する必要がありますか? より具体的には、私が解決したい線形システムには、行列 が含まれます。ここで、非対角部分は一定ですが、対角部分はパラメーターωに依存します。これまでのところ、各ω に対してA (ω )x = bを新たに解く方法は見当たらない。A(ω)=D(ω)+MA(ω)=D(ω)+MA(\omega) = D(\omega) + Mωω\omegaA(ω)x=bA(ω)x=bA(\omega) x = bωω\omega 対角のエントリの形式はZ jは、一方我々はしている行に依存するいくつかの実数であるηが非常に小さい収束係数であり、iは虚数単位です。数値的不安定性へのこのリードときでしω + Z ≈ 0?Ajj=ω+zj+iηAjj=ω+zj+iηA_{jj} = \omega + z_j + i\etazjzjz_jηη\etaiiiω+z≈0ω+z≈0\omega + z \approx 0 A(ω)A(ω)A(\omega)ηη\eta000A(ω)A(ω)A(\omega)ηη\eta101010

2
多変量データのコルモゴロフ–スミルノフ検定
データセットからランダムに選択されたポイントで構成されるファイルのセットがあり、各ファイルは特定のクラスに属しています。これらのファイルの各行には、ポイントのn空間の座標が含まれています。これらの各ファイルのn空間での分布を比較したいと思います。ヒストグラムを比較するためのKSテストに触発されました。私が読んだことから、この方法は多変量データにうまく拡張できません。以前はPCAを使用していましたが、すべての分散が単一のノイズの多い次元に折りたたまれ、クラスタリング手法は役に立たなかった。 私の質問-適合度の指標として各n次元のヒストグラム全体のKS値の平均を使用すべきではない理由はありますか?これらの分布を比較するためのより良い方法はありますか?

1
演算子の固定小数点を見つける
関数作用している演算子固定小数点を見つけるためにどのような数値的方法が利用できますか??である関数を探しています。f :[ a 、b ] → [ a 、b ] f A f = fあAAf:[ a 、b ] → [ a 、b ]f:[a,b]→[a,b]f : [a,b] \rightarrow [a,b]fffA f= fAf=fAf = f 重要な詳細: 私の関数は、実際には円上の(つまり、周期的な内部)分布の確率密度関数です。これは、であることも意味し、問題がより簡単になります。この関数をある密度でサンプリングし、演算子数値的に計算できるとします。分布は必ずしも連続的ではありません。つまり、次のようになります。[ 0 、2 π )0 ≤ F (X )≤ 1 のx ∈ [ 0 、2 π )fff[ 0 …


3
MATLABユーザー向けのObjective-C / Cocoaを使用したMacでの科学的プログラミング
Objective-Cを使用してMacで科学的なプログラミングを始めたい。複雑な値の波形データをベクトルに格納し、プロットを生成することを容易にするMATLABに非常に精通しています。Objective-C / Cocoa環境で一般的なMATLAB操作(複雑な値の配列の作成やメッシュプロットの生成など)を実装する方法を比較できる優れたリソースがあるかどうか疑問に思っていました。

2
コードベースの全体的な構造を理解する良い方法は何ですか?
他の誰かがオープンソースコードを変更したり、独自のアプリケーション用に特定のものを開発する方法を見つけたりすると、私の仕事で役立つことがあります。ただし、すべてのソフトウェアに適切なドキュメントがあるわけではありません。 コードベースの全体的な構造を理解する良い方法は何ですか? たとえば、どのルーチンがどのルーチンを呼び出すかなどです。この目的のためにDoxygenなどのドキュメントツールを自分で使用する可能性がありますが、もっと良い戦略があるかどうか疑問に思っていましたか?

3
特異値の受け入れ/拒否の基準は何ですか?
特異値分解を使用してシステムを解いています。特異値(スケーリング前)は次のとおりです。 1.82277e+29 1.95011e+27 1.15033e+23 1.45291e+21 4.79336e+17 7.48116e+15 8.31087e+12 1.71838e+11 5.63232e+08 2.17863e+08 9.02783e+07 1.72345e+07 1.73889e+05 8.09382e+02 2.16644e+00 すべての特異値と、それに関連する私のソリューションベクトルへの寄与を受け入れると、結果が悪くなることがわかりました。すべてを最大数でスケーリングし、次の特異値を生成します。 1.0 1.06986e-02 6.31091e-07 7.97089e-09 2.62971e-12 4.10428e-14 4.55948e-17 9.42732e-19 3.08998e-21 1.19523e-21 4.95281e-22 9.45510e-23 9.53980e-25 4.44040e-27 1.18854e-29 最善の解決策は、私が最後の二つが含まれている場合に悪くなり始めると、わずか約良好となる10−1910−1910^{-19}用語。 最後の2項を含めると、精度が大幅に低下します。何故ですか?特異値を含める/含めないための基準は何ですか? m×nm×nm \times nm≫nm≫nm \gg nA⋅X=BA⋅X=BA\cdot X = BAAAA⊤AX=A⊤XA⊤AX=A⊤XA^\top A X = A^\top X 私のソリューションへの回答は、ノイズの多いデータをどれだけよく近似しているかで判断しています。 また、「良好」な適合であっても、ゼロに近いとうまく適合しないことにも気づきました(データの範囲はから10です)。何故ですか?−10−10-10101010

3
有限差分法による半円形領域のラプラシアン固有モード
半円形膜の固有モードの計算は、次の固有値問題に還元されます ∇2u = k2あなた、∇2u=k2u,\nabla^2u=k^2u\;, ここで、関心領域はおよびによって定義される半円です。φ ∈ [ 0 、π ]R ∈ [ 0 、1 ]r∈[0,1]r\in[0,1]φ ∈ [ 0 、π]φ∈[0,π]\varphi\in[0,\pi] ラプラシアンが次のように書かれている円筒座標で作業するのが適切です。 ∇2あなた = ∂2あなた∂r2+1r∂あなた∂r+ 1r2∂2あなた∂φ2。∇2u=∂2u∂r2+1r∂u∂r+1r2∂2u∂φ2.\nabla^2u=\frac{\partial^2u}{\partial r^2}+\frac{1}{r}\frac{\partial u}{\partial r}+\frac{1}{r^2}\frac{\partial^2 u}{\partial\varphi^2}. 境界条件は、半円の境界での値を固定します。ここで、です。u = 0あなたuuu = 0u=0u=0 まず、我々は、離散すると、と及び、。これは中央のメッシュです。、U 、I 、J = U (rはI、φ J)R I = (iは+ 1あなたuuあなた私はj= u (r私、φj)uij=u(ri,φj)u_{ij}=u(r_i,\varphi_j)φJ=(J+1r私= (i +12)hrri=(i+12)hrr_i=(i+\frac{1}{2})h_rI、J=0...N-1H、R=1/NHR=π/Nφj= (j +12)hφφj=(j+12)hφ\varphi_j=(j+\frac{1}{2})h_\varphi …

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