C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 反応拡散方程式の実装方法


(過去ログ 113 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■67079 / inTopicNo.1)  反応拡散方程式の実装方法
  
□投稿者/ シマウマ (1回)-(2013/06/30(Sun) 21:38:19)

分類:[.NET 全般] 

初めて利用する者です。
どなたか、反応拡散方程式をC++で実装する方法について、どんな小さなことでも良いので、ご存知の方がおられましたら教えて下さい>_<
このサイト内で「微分」とか「方程式」で検索しても0件だったので、もしスレ違いならご指摘ください

Mathematicaで計算していたのですが、諸事情によりC++で実装することになりました。

C++はかなり素人ですが、今のところ、非常に原始的な形では実装できております。すなわち、かかわるすべての物質の濃度を配列で表し、一定のステップサイズごとに計算して進めるというものです。完全な陽解法のため、陰解法と異なりステップサイズを非常に小さくしないといけず、現実的な時間内に計算が終わりません。陰解法その他を実装しようかと思っているところですが、情報検索能力の無さから、反応拡散方程式における効率のよいコードの書き方についての説明を見つける事ができません。

パッケージも探してみましたが、ズバリ「反応拡散方程式」を扱えるC++パッケージは見つかりませんでした。(←どなたかもしご存知ならリンク等教えて下さい)
見つかった範囲で最も私の目的に近いものは、「ODEINT」や「GNU科学技術計算ライブラリ」のようですが、どちらも常微分方程式までのサポートにとどまります。これらを時間と空間に関する偏微分方程式にする方法を私は知りません。

おそらくいちばんカナメになるのは、「ステップサイズを状況に合わせて変える(特に、求めたい精度の範囲内で適当に大きくするのが計算速度的に重要)」と「計算を高速にするC++の記述法」あたりだと思います。これらについて何か情報ソースがあればお教え下さいませ。

プラットフォームはWindows 8の普通のパソコンで動いているMicrosoft Visual Studio Express 2012です。(ただ私はプラットフォーム云々より、コードの書き方の段階で詰まってしまっていますが)
引用返信 編集キー/
■67081 / inTopicNo.2)  Re[1]: 反応拡散方程式の実装方法
□投稿者/ επιστημη (52回)-(2013/07/01(Mon) 05:33:27)
επιστημη さんの Web サイト
まったくの専門外なので「あてずっぽ」ですけど...

> 「計算を高速にするC++の記述法」

C++に限ったことではありませんけど、マルチスレッドで高速化できんでしょうか。
CPUの持つコア数しだいで速くなりますけど。

# あるいはGPGPU(CUDAやOpenCL)とか。こちらはかなり強力。コア数がハンパねぇので。

引用返信 編集キー/
■67096 / inTopicNo.3)  Re[1]: 反応拡散方程式の実装方法
□投稿者/ shu (344回)-(2013/07/03(Wed) 07:45:49)
No67079 (シマウマ さん) に返信

この手のものはC++で実装する方法
という言語を選ぶものではありません。

手順が決まればたいていのプログラミング言語で
同じ考えで実装出来ると思います。

反応拡散方程式の解法アルゴリズムを検索されるとよいのではないでしょうか。
引用返信 編集キー/
■67109 / inTopicNo.4)  Re[2]: 反応拡散方程式の実装方法
□投稿者/ 甕星 (14回)-(2013/07/03(Wed) 19:53:11)

>「計算を高速にするC++の記述法」

そういう魔法のような命令はありません。
重要なのは使用する言語の選択ではなく、データ構造やアルゴリズムです。

マルチスレッドにすれば高速化できる場合もありますが、各スレッドの計算処理が互いに干渉しないようにデータ構造の見直しや、アルゴリズムの見直しが必要になります。ほぼ1から設計しなおすものと思ってよいです。

マルチメディア命令を使ったり、GPGPUをつかう場合もアルゴリズムの見直しやデータ構造の変更が必須です。

引用返信 編集キー/
■67112 / inTopicNo.5)  Re[1]: 反応拡散方程式の実装方法
□投稿者/ オショウ (78回)-(2013/07/04(Thu) 06:08:55)
2013/07/04(Thu) 06:09:42 編集(投稿者)

> Mathematicaで計算していたのですが、諸事情によりC++で実装することになりました。

  諸事情はよいとして、Mathematicaを使っていたのなら、その処理時間は
  どの程度だったのでしょうか?

  Mathematicaで待てる時間だったのなら、C++でその処理時間が長いとな
  ると、アルゴリズムが悪い・・・と言うことになるでしょう。

  因みに、MathematicaからC言語に変換するソフトウェアが出てますが、
  高価ながら、性能はMathematica以上に出ると思いますが、如何でしょう
  か?

  MATLABでC++に変換して演算を行った経験がありますが、十分に高速だっ
  たと記憶しておりますので、C++で悩むよりそういうもの使った方が簡単
  に性能を得ることができると思いますが。

※ ttp://www.hulinks.co.jp/software/mma_mathcode/

※ Mathematicaを使わない理由は?
  ライセンス?金額的コスト?

以上。参考まで
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -