計算科学

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

3
最小二乗近似質問
私は科学的計算のコースを取っているのですが、最小二乗近似について調べました。私の質問は、特に多項式を使用した近似についてです。n + 1個のデータポイントがある場合、これらすべてのポイントを記述する次数nの一意の多項式を見つけることができることを理解しています。しかし、これが必ずしも理想的ではない理由もわかります。このようなアプローチを使用すると、データポイント間で多くのノイズを取得できます。データを十分に推定する低次の多項式を取得するのは良いことだと思います。 私の質問は、実際にどの程度の多項式を使用するかをどのように決定するのですか?経験則はありますか、それとも手元の問題のみに依存していますか?多かれ少なかれ程度を決定する際に、さまざまなトレードオフを考慮する必要がありますか?または、私はここで何かを誤解していますか? 前もって感謝します。

2
4Dプロットの表面をどのようにプロットしますか?
3Dボックス内の粒子の波動関数をプロットしようとしています。これには、x、y、z軸および確率密度関数の4つの変数をプロットする必要があります。 確率密度関数は次のとおりです。 abs((np.sin((p*np.pi*X)/a))*(np.sin((q*np.pi*Y)/b))*(np.sin((r*np.pi*Z)/c)))**2 np.arange()X、Y、Zに使用しています。 これを行うには、4Dプロットの表面をプロットする必要があることを読みました。 これは、次のようなものです。

5
数値微分係数と有限差分係数:Fornberg法の更新?
数値微分を計算したい場合、ここで Bengt Fornbergが提示した(およびここで報告した)方法は非常に便利です(正確で実装が簡単です)。1988年からの元の論文の日付として、今日、より良い代替案があるかどうか(または(ほぼ)単純かつ正確に)知りたいのですが。

1
積分変換を反転するための数値的方法?
私は次の積分変換を数値的に反転しようとしています: F(y)= ∫∞0yexp[ − 12(y2+ x2)] I0(x y) f(x )d xF(y)=∫0∞yexp⁡[−12(y2+x2)]I0(xy)f(x)dxF(y) = \int_{0}^{\infty} y\exp{\left[-\frac{1}{2}(y^2 + x^2)\right]} I_0\left(xy\right)f(x)\;\mathrm{d}x したがって、与えられたに対して、f (x )を近似する必要が あります。F(y)F(y)F(y)f(x )f(x)f(x) および F (y )は実数かつ正f(x )f(x)f(x)F(y)F(y)F(y)(連続確率分布) は実数で正ですx 、yx,yx,y(大きさです) 私はこれをすぐに行うための非常に厄介で総当たり的な方法を持っています: と一連のポイント上のスプラインを定義します。スプライン化されたポイントの値はランダムサンプリングによって「推測」され、予測されたF (y )が生成されます。私が書いた基本的な遺伝的アルゴリズムは、予測されたF (y )配列と測定されたF (y )配列の差を最小化します。次に、アルゴリズムが収束するf (x )を反転の答えとします。f(x )f(x)f(x)F(y)F(y)F(y)F(y)F(y)F(y)f(x )f(x)f(x) このアプローチは、いくつかの単純なケースではかなりうまく機能しますが、私には面倒で、特に堅牢ではありません。 誰もこの問題を解決するより良い方法についてのガイダンスをくれますか? お時間をいただきありがとうございます! [コンピューターサイエンスに投稿]

6
C / C ++でBLASの参照レベルの実装はありますか?
netlib BLAS実装は優れたリファレンスであり、ほとんどが最適化されておらず、十分に文書化されています(例:zgemm)。ただし、Fortran 77に含まれているため、より現代的なプログラミング教育を受けた人にはややアクセスしにくくなっています。C / C ++にnetlibのようなBLASの参照レベルの実装はありますか?
11 blas  education 

2
有限の違いがある堅固なメカニズム:「コーナーノード」の処理方法
固体力学の線形境界条件のコーディングに関する質問があります(線形弾性)。特別な場合には、有限差分(3D)を使用する必要があります。私はこのトピックに非常に新しいので、おそらく以下の質問のいくつかは非常に基本的なものかもしれません。 特定の問題につながるために、まず、既に実装したものを示したいと思います(わかりやすくするために、2Dのみを使用します)。 1)私は、次の離散有するdi v (σ)= 0div(σ)=0div(\sigma) = 0発散の第一の成分を示す、∂σx x∂バツ+ ∂σx y∂y= 0∂σxx∂x+∂σxy∂y=0\frac{\partial\sigma_{xx}}{\partial x} + \frac{\partial\sigma_{xy}}{\partial y} = 0: スタッガードでないグリッドを使用しているため、UxとUyは同じ場所で定義されます。 2.)次のステップは、「ゴーストノード」を使用する境界の処理です。σ∙ n = t∗σ∙n=t∗\sigma \bullet n = t^*によると、t∗t∗t^*は境界の応力です。 (λ + 2 μ )∂うんバツ∂バツ+ λ ∂うんy∂y= σ∗x x(λ+2μ)∂Ux∂x+λ∂Uy∂y=σxx∗(\lambda + 2\mu)\frac{\partial U_x}{\partial x} + \lambda \frac{\partial U_y}{\partial y} = \sigma_{xx}^*σ∗x xσxx∗\sigma_{xx}^* μ ∂うんバツ∂y+ …

2
科学的コードのパフォーマンスの基礎となる構造は何ですか?
ハードウェアとソフトウェアの構成が異なる2台のコンピューターを検討してください。各プラットフォームでまったく同じシリアルNavier-Stokesコードを実行する場合、コンピューター1と2に対してそれぞれ1回の反復を実行するのにx時間とy時間かかります。この場合、は、コンピューター1とコンピューター2の間の反復時間の差です。Δ = x − yΔ=x−y\Delta = x-y の大きさに影響を与えるものは何ですか?明らかな候補の1つはCPUです。私の主な質問は、CPU間のハードウェアの違いと同じ順序でΔに影響を与える可能性のある他の要因があるかどうかです。△Δ\Delta△Δ\Delta

2
有限ボリュームコードのデータ構造:配列とクラス
磁気流体力学(MHD)の有限ボリュームコードを記述する必要があります。以前に数値コードを書いたことがありますが、この規模ではありません。クラスでデータ構造(オブジェクト指向アプローチ)を使用するか、速度、スケーラビリティなどの点で異なるプロパティに複数の配列を使用するか、どちらが良い選択かを尋ねたかっただけです。Pythonでコードを記述し、数値的に集中的な部分にはfortranを使用します。 Pythonのクラスの例は次のようになります class Cell: def __init__(self, x, y, z, U): 配列は単純に次のように定義できます x[nx][ny][nz] y[nx][ny][nz] z[nx][ny][nz] U[nx][ny][nz] 等

3
SPD三重対角線形システムが与えられた場合、3つのインデックスをO(1)時間でリンクできるように事前計算できますか?
検討対称正定値三重対角線形システム ここでと。与えられた3個のインデックス我々は間、厳密式のみの行を想定した場合、とホールド、我々は、フォームの方程式を得るために、中間変数を排除することができます 場所。この式は、の値を「外部」の影響とは無関係に関連付けます(たとえば、に影響する制約が導入された場合)。A ∈ R N × N B ∈ R nは 0 ≤ I < J < K < N I kはuがxはIを + VのXのjは + W 、X 、K = C V > 0 、X jのX I、X K X 0A x = bAx=bA x = bA ∈ Rn × nA∈Rn×nA …

3
Pythonでの3Dサーフェスデータのメッシュ化
Pythonを使用してメッシュを構築したい3次元ポイントのデータセットがあります。私が見たすべてのソフトウェアでは、エッジを提供する必要があります。3Dのポイントのセットを入力として受け取り、メッシュを出力するPythonのプログラムはありますか?可能であれば、メッシュを均一にしたいと思います。

3
並列有限要素計算でメッシュを管理するための最良の方法論?
現在、散乱の問題を解決するためのドメイン分解法を開発しています。基本的に、ヘルムホルツBVPのシステムを反復的に解いています。三角形または四面体メッシュ上の有限要素法を使用して方程式を離散化します。私は博士論文に向けてコードを開発しています。deal.iiやDUNEなど、既存の有限要素ライブラリのいくつかを知っています。インスピレーションに満ちたデザインとAPIを備えたすばらしいものだと思いますが、学習目的で、自分の小さなアプリケーションをゼロから開発したいと考えました。 私はシリアルバージョンを実行している時点で、それらを並列化したいと思っています。結局のところ、少なくとも原則として並列化が容易なアルゴリズムを策定することは、ドメイン分解フレームワークの強みの1つです。しかし実際には、考慮しなければならない多くの詳細があります。メッシュ管理もその1つです。アプリケーションが多くのCPUに適切にスケーリングしながら高解像度を実現する場合、すべてのCPUでのメッシュ全体の複製は非効率的です。 高性能コンピューティング環境で同様のアプリケーションに取り組んでいる開発者に、この問題への対処方法を尋ねたいと思いました。 分散メッシュ管理用のp4estライブラリがあります。私はAMRを必要としないので、均一なメッシュの使用にのみ関心があり、三角形メッシュを洗練できるかどうかはわかりません。また、単純に均一なメッシュを作成し、それをメッシュパーティショナーの1つに供給して、出力の後処理を行うこともできます。 最も単純なアプローチは、特定のパーティションのみに関連するメッシュ情報を含むパーティションごとに個別のファイルを作成するようです。このファイルは、メッシュのその部分で個別のシステムを組み立てる単一のCPUによって読み取られます。もちろん、プロセス間通信のために、一部のグローバルパーティションの接続性/近隣情報も、すべてのCPUが読み取るファイルに保存する必要があります。 他にどのようなアプローチがありますか?皆さんが共有できる場合、業界で一般的に使用されている方法論や、この問題の処理に関連する政府研究機関は何ですか?並列有限要素ソルバーをプログラミングするのは初めてで、この問題について正しく考えているかどうか、他の人がどのように近づいているのかを知りたいと思いました。関連する研究記事へのアドバイスやポインタは大歓迎です! 前もって感謝します!

3
2つの12x12行列の行列式が同じかどうかのテスト
12×1212×1212 \times 12QQQJdet(Q)=det(12I−Q−J)(1)det(Q)=det(12I−Q−J)(1)\det(Q) = \det(12I-Q-J) \; \; (1)JJJ 現在、armadilloライブラリでこれを行っていますが、遅すぎることがわかりました。事は、私は何兆もの行列に対してこれを行う必要があるということであり、2つの行列式を計算することが私のプログラムのボトルネックであることがわかりました。したがって、2つの質問があります サイズを知っていれば、行列式をより速く計算するために使用できるトリックはありますか?この場合に機能する可能性のある12×1212×1212 \times12行列の乱雑な展開でしょうか? 同等性をテストする他の効率的な方法はありますか(1)(1)(1) 編集。コメントに答えるため。私はすべての接続された非自己相補的なグラフを計算する必要GGGための131313ようにGGG及びG¯¯¯¯G¯\overline{G}スパニングツリーの同じ数を有しています。この理由は、このmathoverflowの投稿にあります。マシンについては、8コア3.4GHhマシンで並行して実行しています。 編集。12×1212×1212 \times 12行列の行列式を具体的に計算するCプログラムを作成することで、予想される実行時間を50%短縮することができました。提案はまだ歓迎されています。

3
有限体積の一次風上スキームで非定数係数をどのように扱うべきですか?
保存形式の移流方程式から始めます。 あなたはt= (a (x )u )バツut=(a(x)u)x u_t = (a(x)u)_x ここでは空間に依存する速度であり、uは保存されている種の濃度です。a (x )a(x)a(x)あなたはuu 流束の離散化(流束がメッシュポイント間のセルのエッジで定義される)を与えると、 u t = 1f= a (x )uf=a(x)uf=a(x)uあなたはt= 1h(fj − 12− fj + 12)ut=1h(fj−12−fj+12) u_t = \frac{1}{h}\left( f_{j-{\frac{1}{2}}} - f_{j+{\frac{1}{2}}} \right) 一次風上を使用して、フラックスを次のように近似します。 これは、 ut=1fj − 12= a (xj − 12)あなたj − 1fj + 12= a (xj + 12)あなたjfj−12=a(xj−12)uj−1fj+12=a(xj+12)uj …

1
計算科学研究でソフトウェア推定法を使用している人はいますか?
仕事で、私は本質的に独立したコンサルタントとして機能します。管理者と顧客の場合、計算科学研究の一環としてソフトウェアを開発するのにかかる時間を見積もる必要があります。ただし、私の時間の見積もりは通常オフです。ソフトウェアの開発にかかる時間を見積もる方法があることを知っています。これらの方法により、研究課題の正確な見積もりが得られますか?それらは研究環境でも有用ですか?そうでない場合、「記録を保持し、それに応じて見積もりを修正する」よりも良い方法がありますか?
11 software 


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