計算科学

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

2
2つの異なるメッシュの幾何学的差異を定量化する方法
2つのメッシュが幾何学的にどのように異なるかを表す値を生成する方法またはアルゴリズムを探していますが、トポロジは異なります。 例としては、FEメッシュが適用されたCADデータと、製造されて3D三角形メッシュにスキャンされた後の部品があります。製造されたパーツは、CADパーツと幾何学的に若干異なりますが、適用されたメッシュは完全に異なります。 それらが幾何学的にどれほど類似しているか、または類似していないかの測定値を生成するための良い方法は何ですか

1
次の式を計算する改良された方法はありますか?
対称行列と任意の行列X \ in \ mathbb {R} ^ {n \ times n}、およびベクトルv \ in \ mathbb {R } ^ {n \ times 1}、O(n ^ 2)時間で次の式を計算することは可能ですか?Y∈Rn×nY∈Rn×nY \in \mathbb{R}^{n \times n}X∈Rn×nX∈Rn×nX \in \mathbb{R}^{n \times n}v∈Rn×1v∈Rn×1v \in \mathbb{R}^{n \times 1}O(n2)O(n2)O(n^2) diag(XTYX)⋅vdiag(XTYX)⋅vdiag(X^TYX) \cdot v ここで、diag(X)diag(X)diag(X)は、主な対角要素がXの要素に等しく、非対角要素が0に等しいn×nn×nn \times n行列を返します。X^ TはXの転置行列です。XXXXTXTX^TXXX

2
FFTを使用した迅速でシンプルな離散2Dヘルムホルツ・ホッジ分解?
私が開発しようとしている愚かなスクリーンセーバーの場合、2Dベクトルの発散のない2D配列をランダムに生成し、それを使用して線積分畳み込みプロットを生成します。これを行う1つの方法は、ランダムノイズを生成し、ヘルムホルツホッジ分解のソレノイドコンポーネントを投影することであると聞いたことがあります。それをするために、私は次の推論を使ってみました:11^1 関数は、ヘルムホルツホッジ分解 ( 、およびはスカラー関数)とりあえず、調和成分が消失すると仮定します。2 F = H + ∇ φ + J ∇ ψ J = (0 - 1 1 0) φ 、ψ Hf:R2→ R2f:R2→R2\mathbf{f}:\mathbb{R}^2\rightarrow\mathbb{R}^222^2 f= H +∇φ+J∇ ψf=h+∇φ+J∇ψ\mathbf{f}=\mathbf{h}+\nabla\phi+J\nabla\psiJ= ( 01− 10)J=(0−110)J=\pmatrix{0&-1\\1&0}ϕ 、ψφ、ψ\phi,\psihh\mathbf{h} フーリエ空間では、これは なり、ソレノイド投影を定義できますとしてのフーリエ空間の演算子は 、介してソレノイドコンポーネントに関数を投影します P = I - K ⊗ KFf= − i k ϕ^− i JK ψ^Ff=−私kφ^−私Jkψ^\mathcal{F}\mathbf{f}=-i\mathbf{k}\hat{\phi}-iJ\mathbf{k}\hat{\psi} …

6
無料のシンボリック回帰ソフトウェアを求めて
Formulize / Eureqaがそれを使用するために年間$ 2500を請求し始め、試用版が機能しなくなったので、データポイントを指定して方程式を見つけるなど、同様のことができる代替品を知っている人はいますか? それは無料でしたが、会社や学校以外の誰の価格帯からも外れています。 (それはシンボリック回帰ソフトウェアです) ありがとう

1
乗数の交互方向法の背後にある直観
私は最近ADMMに関する多くの論文を読んでおり、それを使用していくつかの問題を解決しようとしましたが、そのすべてが非常に効果的でした。他の最適化手法とは対照的に、この手法がどのように、そしてなぜ効果的であるかについては、直感がわかりません(もちろん、いくつかのケースで収束分析を見てきましたが、あまり洞察力がありませんでした)。ADMMの背後にある直感はありますか?それを最初に使用した科学者はどのようにしてこのアイデアを思い付きましたか?いくつかの幾何学的な直感が最善ですが、だれでも持っている洞察は役に立ちます。

2
コマンドライン引数をMPI_Initに渡す必要がありますか?
MPI 3.0のコードを書くとき、私は合格しなければならないargcとargvのMPI_Init通話やない、なぜ? 編集:ビル・バースの答えはいくつかの質問を提起したので、私はいくつかの発言をしたいと思います: MPI 1.1以降、argc/を渡すargv必要はありません。 質問は、具体的理由/ 1パスすべきでない程度であるargc/ argv(なぜあなたはいけません、本当にその後、答えではありません)。 それでも、argc/ argvを渡すことができない場合がありますMPI_Init(mainが制御範囲外にあり、MPIが実装の詳細である場合、静的初期化を使用してMPIを起動するライブラリを作成します)。 EDIT2:なぜ使用しないのかMPI_Init(argc, argv)という質問が頻繁に出てきました。いくつかの理由: 古い/非準拠/準拠のMPI <1.1実装との互換性のためにこれを行うことはできません。MPI2またはMPI3機能を使用している場合、これらは機能しません。 MPI_Init() と同じ方法でMPIランタイムを初期化します MPI_Init(argc, argv) MPI_Init(argc, argv)MPIの実行時に渡される引数を削除argcし、argv そして MPIを初期化します。私の知る限り、それはきれいにするための唯一の方法であるargcとargvあなたがそれを使用する必要が全くMPI引数を持たないためにこれらが必要な場合はそう。 MPI_Init()より多くの状況で使用できますMPI_Init(argc, argv)。たとえば、MPIを実装の詳細として使用しているライブラリは、MPIが初期化されているかどうかをテストできます。初期化されていない場合は、呼び出すMPI_Init()と正しいことが起こります。あなたのユーザーは、あなたがMPIを使用していることを知らない、渡す必要はありませんargc、argv......あなたのライブラリーを使用するために、あなたのライブラリに、(場合には、それは引数を取っていない)自分のメインを変更する必要はありません。
8 c++  c  mpi 

2
シューティング法は、非線形境界値ODEを解くための唯一の一般的な数値法ですか?
Mathematica.seをさまよいながら、ある種の微分方程式を解く問題が常に私たちを「悩ませている」、つまり非線形常微分方程式(ODE)の境界値問題(BVP)に徐々に気づきました。 撮影方法で使用され、Mathematicaの機能はNDSolve、Mathematica.SEのユーザーが知っていることを唯一の方法であると思われます。時々それはうまくいきますが、多くの場合(私の個人的な感情によると)、適切な初期推測を見つけるのは苦痛です。 多くの場合、適切な推測を見つけることができません。ここに私がこの質問を投稿させた例があります。 では、シューティング法は、非線形ODEのBVPを解くための唯一の一般的な数値法ですか? もしそうなら、適切な初期推測を得るための良い方法はありますか? そうでない場合、代替手段は何ですか?可能であれば、これらの代替案を実装する既存のソルバーの紹介またはリンクを提供してください。

1
混合問題の有限要素収束率
私は有限要素を使用してストークスフロー問題をコード化し、それが機能することを確認しているところです。メッシュをグローバルにリファインするときに、どの収束率を期待するべきかわかりません。 線形基底関数を使用するスカラー問題については、次数収束(hは要素のサイズ)を期待し、二次基底関数を使用すると、L 2ノルムで次数h 3の収束、H 1で1の累乗が少ないことを期待します。セミノルム。私が今持っている問題は、ストークスフローをコーディングするときに、圧力には線形、速度成分には2次を使用するテイラーフード要素を使用したことです。それはh 3で収束する速度とh 2次の圧力と同じくらい簡単ですか?h2h2h^2hhhh3h3h^3L2L2L^2H1H1H^1h3h3h^3h2h2h^2 私は最初にこれをmathoverflowに投稿し、このフォーラムに適しているかもしれないと言われました。

2
異なる周波数領域における積分方程式法の周期的グリーン関数
異なる周波数領域で区分的に一定の波速度を持つ周期領域でのヘルムホルツ方程式の解について質問しています。この問題を解決するための1つの可能なアプローチは、システムのグリーン関数の観点から境界面の積分方程式を書き留めることです。ドメインは周期的であるため、これはような周期的グリーン関数になります。 ここで、Lは格子ベクトルで、G 0は G 0(rG(r,r′)=∑LG0(r,r′+L)G(r,r′)=∑LG0(r,r′+L) G(r,r') = \sum_L G_0(r,r'+L) LLLG0G0G_0 私の質問は、この方法の計算コストが周波数(k)に応じてどのように変化するかに関するものです。格子和により多くの項を含める必要があるため、低周波数または高周波数では計算が難しくなりますか?G0(r,r′)=eik(r−r′)|r−r′|G0(r,r′)=eik(r−r′)|r−r′| G_0(r,r') = \frac{e^{ik(r-r')}}{|r-r'|} kkk 編集:人々は私が尋ねている質問とは異なる質問に答えているようです。私はそのようなメソッドを実装することに興味がないことを明確にすべきです。異なる周波数領域での方法の長所と(さらに)短所を理解するための背景として、理論的な難しさについて単に尋ねています。私が念頭に置いている種類の問題は、導波路の周期配列の計算モード(多かれ少なかれ)です。

1
ペーパーと一緒にソフトウェアパッケージを公開する:ライセンス
卒業研究用に作成したソフトウェアパッケージと、そのパッケージを説明する論文を公開したいと思います。これまでのところ、BSDなどのリベラルライセンスを検討してきました。 ただし、コードの公開には、ジャーナルのライセンス条件(この例ではcmpなど)への同意や、著作権の譲渡が含まれる場合があることを認識しています。これはすべて望ましくありません。ジャーナルに関して明らかな選択肢はありますか?私の分野は物理学です。BSDライセンススタイルのオープンソースプロジェクトを設立し、付随する論文を発表した経験はありますか? Computer Physics Communications(残念ながらElsevierから出版されました)を知っています。例としてQuTiP。あなたの提案をありがとう!

2
プロジェクト管理ツールを計画して研究コードに組み込む方法
PhDプログラムの3年目に入ります。これまでのところ、私の研究コード(数値逆問題/医療画像処理/画像処理など)は、ほとんどがまとまりのないMATLABスクリプトと関数で構成されており、いくつかのMEXされたC ++とCUDAが含まれています。ルーチンはあちこちでいくつかの追加の速度のために投入されました。MATLABでの作業は(ほとんど)楽しいものでしたが、おそらく完全に諦めることはしません。 この夏、私は国立研究所で「大きな」コードに取り組んでおり、gmakeやその他のコンピューターサイエンスのおもちゃを上手に使用した、油を塗ったオブジェクト指向のバージョン管理されたコードの美しさを見始めています。 私の質問はこれです。これらのツールを私の研究コードにどの程度組み込む必要がありますか?コードの構造と実装の「計画」にどのくらいの時間を費やす必要があるか、それについて考えるのをやめて、適切なルーチンを作成する必要があるか。経験とCV資格を得るために、論文の製品として十分に計画されたオープンソースコードベースを開発する必要があるように感じますが、このプロセスのナビゲート方法がわかりません。ヒント、本/記事/ウェブサイトの推奨事項などはありますか?

1
効率的な重力場の実装
私はphysics.stackexchangeについて同様の質問をしましたが、このウェブサイトについては無知でした。 私は基本的に重力場を実装する効率的な方法を探しています。 何千ものオブジェクトが入った巨大な2Dスペースがあります。次に、これらのオブジェクトが互いの重力によってどのように影響を受けるかをシミュレートする必要があります。 オブジェクトをコレクションにソートし、コレクション内の個々のオブジェクトではなく、コレクション外のすべてのオブジェクトをそのコレクションと照合することは可能だと思いました。私はすぐにこれが単に不可能であることに気づきました。複数のオブジェクトの重力場は、1つの質量と距離だけで計算される1つの均一場として表すことはできません。 シミュレーション内のすべてのオブジェクトは、球と見なすことができます。それが合理的に現実的に見える限り、私は近似で大丈夫です。

1
WELL疑似乱数生成
私はMT19937テストハーネスで使用して、一様に(符号なし)32ビット[0、2322322^{32}-1]値は、元の作者のmt19937.c実装に基づいており、統計的にランダムなビットオクテットストリームの(本質的に無尽蔵)供給を生成します。これは、これらの特定のテストに必要ではないCSPRNGの代わりです。しかし、私は最近WELLPRNGを検討しています-統計的性質自体(どちらも私のニーズに十分すぎるように思われる)のためではありませんが、より効率的な実装を提案しているようです。 私は学術論文の数学的背景が足りませんが、少なくとも前者の「ねじれ」行列と焼戻し変換に従うことができました。ただし、WELL-n関数の作成者が提供するコードの多くは、いくつかの魔法の浮動小数点定数(例:)を使用して、浮動小数点生成に焦点を当てているようです2.32830643653869628906e-10。WELLコードからステップを省略して、32ビットの均一な配布を提供できますか?または、アルゴリズムは特に浮動小数点分布用に設計/バイアスされていますか? またはWELL、要件を満たしながら、「バルク」uint32ベクトル生成のパフォーマンス向上をもたらすと考えるのは間違っていますか?

4
データベースを使用して大量の結果を処理する必要がありますか?
バックグラウンド: 現在、大量のパラメータ変動実験を行っています。これらはnumpyを使用してPython 2.6以降で実行されています。これらの実験の実行には約2週間かかります。 大まかに私は3つのパラメーター(独立変数)を値の範囲で変化させています。さらに6つの独立変数を修正します(今のところ)4つの従属変数についてレポートしています。 私が変更しているパラメーターの1つは、いくつかのプロセス(およびコンピューター)に分散されています。これらの各パラメーターcsvについて、すべての変数(独立、固定、依存を含む)の値を各行に含む個別のファイルを生成します。すべてのバリエーションで、約80,000行のデータが生成されると予想されます ほとんどの場合、私は従属変数の1つの値だけを見ていますが、予期しないことが起こったときに何が起こっているかを説明できるので、他の変数はそのままにしておきます。 この実験の以前のバージョンでは、2つのパラメーター(それぞれ2つの値のみ)で変化していcsvましたが、このファイルをスプレッドシートプログラムにコピーアンドペーストし、一連のコピーペーストを実行して、興味のある従属変数のみのテーブルを作成しました。 。MS-Excelで厄介なことをして数式で並べ替えること。これは、私が持っていた6つの実験結果セットにとって十分な苦痛でした。この実行が完了するまでに、結果が2桁増えることになります。 質問: 一度終わったら、csvファイルのすべての結果をデータベースにダンプし、興味のある部分を照会できると考えていました。次に、それらの結果を取り、分析のためにスプレッドシートに入れます。グラフを作成し、制御結果に関連するスコアを見つけるなど 私は正しい線に沿って考えていますか?(これは人々がすることですか?) 私のデータベースfooは、MS-Accessを使用していて良かったとしても、最近はかなり錆びています。これにもMS-Accessを使うつもりでした。

1
ベッセルウェイトを使用した高価な関数の放射状積分
積分を計算する必要があります 私= ∫R0f(r )Jん(zn mrR) rdrI=∫0Rf(r)Jn(znmrR)rdrI = \int_0^R f(r)J_n\left(\frac{z_{nm}r}{R}\right)rdr ここで、は第1種の次のベッセル関数であり、はそのゼロであり、はやや類似した実数関数です(同じではない、それは非常に複雑であり、通常で用語を伴う時には)。JんJnJ_nんトンの時間nthn^{\mathrm{th}}zn mznmz_{nm}メートルトンの時間mthm^{\mathrm{th}}f(r )f(r)f(r)JんJnJ_nJ2んJn2J_n^2exp(Jん)exp⁡(Jn)\exp(J_n) 非常に高価であり、この積分は非常に多くの時間を評価しなければならない、私はそれを解決するための最良の(非常に速いが、それでもかなり正確に)数値法を探しています。現在、私は11ポイントの台形ルールを使用しています。しかし、私はClenshaw–CurtisやGauss–Kronrod(低次数)などの他の方法を調査しています。f(r )f(r)f(r) しかし、特にハンケル変換の計算に必要なものと同様であることを考えると、そのような積分に特に適した方法があるかどうか疑問に思っています。

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