差分法でのメッシュ分割

このQ&Aのポイント
  • 差分法を使用するときのメッシュ分割方法とC言語でのプログラムについて
  • 差分法でのラプラス方程式の解法と等間隔の格子間隔hについて
  • 差分法を使用して二次元領域をメッシュ分割する方法
回答を見る
  • ベストアンサー

差分法でのメッシュ分割

差分法を使用するときはまず領域(2次元)をメッシュ分割します。 C言語でプログラムを行う際に、メッシュ分割はどうプログラムしたらいいのでしょうか?今は二次元の配列を使用しています。 下図:二次元の配列a[3][4]の場合   [0][1][2][3] [0] □ □ □ □ [1] □ □ □ □ [2] □ □ □ □ これは、メッシュ分割したという風にいえるのでしょうか? 差分法でラプラス方程式を解いています。また、等間隔の格子間隔hを使用しています。 v(x+h,y)+v(x-h,y)+v(x,y+h)+v(x,y-h)-4v(x,y)=0 の連立方程式を解いています。

  • rkot
  • お礼率0% (0/20)

質問者が選んだベストアンサー

  • ベストアンサー
  • Meowth
  • ベストアンサー率35% (130/362)
回答No.1

a[3][4] より a[12] a[i*3+j] のほうがPointerを使いやすい

関連するQ&A

  • 2次元ラプラス方程式を差分法で解くというプログラムなのですが、

    2次元ラプラス方程式を差分法で解くというプログラムなのですが、 ・プログラムの流れ ・具体的にどのような計算をしているのか を教えていただけないでしょうか? 面倒だとは思いますがお願いします。 以下プログラムURL http://www.geocities.jp/laprog321/

  • 差分法

    ラプラス方程式をノイマン境界条件に したがってときたいのですが 下の図のような四角形を考えると 四つ角の境界条件の適用の仕方がわかりません。 本によると、 「1つの点にいくつもの条件を重ねて与えてはいけない  (条件が多すぎて解が存在しなくなってしまう)」 とあります。x,y両方向の境界条件を適用してはいけないのですよね? どのようにすればいいのですか?教えてください。 ●―○―○―○―● |  |  |  |  | ○―○―○―○―○ |  |  |  |  | ○―○―○―○―○ |  |  |  |  | ○―○―○―○―○ |  |  |  |  | ●―○―○―○―● 図1 差分例

  • 差分法

    単振動の運動方程式 x"+x=0 を差分法で解こうと思っています。 おそらく差分方程式は、 (x[n+1]-2x[n]+u[n-1])/dt^2=u[n] で良いと思われるのですが(違ってたら指摘してください)、初期条件 x(t=0)=aとx'(t=0)=b の与え方が良く分かりません。 また、sin(ωt)の強制振動を与えたときの差分方程式はどのようになるのでしょうか? よろしくお願いします。

  • 3次元の差分法について

    よろしくお願いします。 現在、3次元の差分法について勉強しています。プログラムにて電位や電界の計算を行っているのですが、本やサイトでは簡単にするために2次元で扱っているものが多いです。 何かお勧めの参考書やサイトがあれば教えていただけますでしょうか。 よろしくお願いします。

  • 数値解析の手法(差分法)について

    現在、とある2元の1階偏微分方程式(解はu,vでそれぞれ右と左に進行する波)を数値解析によって解こうと考えています。 数値解析の手段として、差分法がよく用いられると思いますが、 現在、私は、場所に関してはuは後退差分、vは前進差分を使い、 時間に関しては前進差分を使って解いています。 ネットでは場所に関しては中心差分、時間に関してはルンゲ=クッタやリープフロッグなどが 使われていることが多く、私もこの2つを用いて解いてみました。 偏微分方程式には線形項が含まれていたため、 線形問題に対する制約であるΔt/Δx << 1は最低満たすように刻み幅をいろいろ取り、 計算時間も辞さず計算機を動かしてみましたが、 ノイズが消えず、解析解に限りなく近づくには至りませんでした。。 Δt/Δx=0.0001なども試したのですが・・・ そこで、諦めて違う差分法を試し、 場所に関して、uは後退差分、vは前進差分を使い、 時間に関しては前進差分を使って見たところ、 Δt/Δx=0.01程度で解析解に近い、なかなか精度の良い数値解を得ることが出来ました。 2次の差分では上手くいかず、1次の差分だとわりかし上手くいく・・・ 精度的には中心差分やルンゲ=クッタなどの方がいいと思うのですが・・ 正直不思議でなりませんでした。。。 最初に試した差分法のコードミスかと思い、何回もコードを確認し直しましたが、 やはり解析解に近づくには至りませんでした。 こんなことってあるのでしょうか?? 差分法でも場合によって使い分ける必要があるということでしょうか・・? その場合分けするときの指標など、知っておられる方、教えて頂けると助かります。 問題によって

  • ラプラス方程式→連立方程式

    楕円型ラプラス方程式を連立方程式に近似して解きたいと思っています。 そこで、いろいろ調べてみたのですが、どうしても、 連立方程式の基本形 Ax=b のうち、ラプラス方程式の差分近似方程式のどの部分がどの文字に当たるのかが理解できません。 例として以下のラプラス方程式を連立方程式Ax=bの形そのものに、直していただけないでしょうか。 (∂^2 * u) / (∂^2 * x) + (∂^2 * u) / (∂^2 * y) = 0 (0<x<1 , 0<y<1) u(x,0)=sinπx , u(x,1)=0 (0≦x≦1) u(0,y)=u(1,y) (0≦y≦1) 近似方程式は u(x_i,y_j) = (u(x_i+h , y_j) + u(x_i-h , y_j) + u(x_i , y_j+h) + u(x_i , y_j-h)) / 4 です。 よろしくお願いします。

  • 拡散方程式の数値計算(有限差分法)による解き方

    下記の拡散方程式を数値計算(有限差分法)で解き方について教えてください。 拡散方程式 D∂^2C(x,y,t)/∂x^2+u∂C(x,y,t)/∂x=∂C(x,y,t)/∂t 境界条件 D∂C(x,y,t)/∂x=(K/β-u)×C(x,y,t)-KC'(y,t) at x=0 初期条件 C(x,y,0)=Co at t=0 質量保存則 ∂C'(y,t)/∂y=4/vd(K/β×C(0,y,t)-KC'(y,t) ) ---------------------------------------------------------- また、可能であれば、有限差分法以外にも数値解法(有限要素法、有限体積法など)があると思いますが、拡散方程式を解く場合、どの解法が一般的に適しているのか教えてください! よろしくお願い申し上げます。

  • http://www.geocities.jp/laprog321/

    http://www.geocities.jp/laprog321/ この上記URLのプログラムについて質問です。 このプログラムはラプラス方程式を差分法で解くプログラムと書いていたので、 自分はまずプログラムを理解しようとするために、 インターネットなどで、ラプラス方程式の差分法による解き方についていろいろ調べて、式を考えたりしました。 そして、このプログラムがいう差分法とは中央差分方程式を用いて解いているのかなと思ったのですが、 何卒知識が少ないもので、実際に合ってるかどうかが分かりません。 また、ラプラス方程式をコンピュータに解かせる場合、解き方の反復法として、 いろいろな種類(ガウスザイデル法、ヤコビ法、SOR法など)の方法があることがわかりました。 ここで質問させていただきます。 プログラムでは、実際にどの方法を利用してどのように計算しているのか教えてほしいです。 例えば、ここの部分(行数など)で「~式」、「~法」を用いてどのように計算してるかなど教えてほしいです。 プログラムの流れについては、違う質問でご教授いただいたので、上記した質問のように プログラム本文を使ってではなく、実際にこのプログラムでは、ラプラス方程式をどのような式を用いて、 また、どのような方法で解いているかを、矛盾しているようですが、プログラムと対比して教えていただきたいです。 同じような質問を繰り返し失礼いたします。 文章力のない質問で申し訳ありませんがよろしくお願いします。

  • 方程式の無次元化と差分法

    数値計算の無次元化(規格化)でわからないところがあるので、おわかりになる方がいらっしゃいましたら、お教えいただけないでしょうか。 ナビエストークスなどを無次元化する際に、代表的な値として、 空間スケールL、速度V、圧力P、密度ρを導入するとします。 その結果、無次元化された方程式を得ることができると思います。 無次元量をチルダを用いて表すことが多いと思いますが、チルダを取ると、見た目には無次元化の前後で変わりがない場合がありますよね。 その場合の差分法についてがちょっとわからないのです。 例えば、L=10[km]とします。 また、j番目のグリッドは x_j = j dx と表せると思います。このときx_j = 1というのはx_j = L = 10 [km]であり、j = 10の時dx = 0.1、すなわち解像度は1kmという考えで良いのでしょうか? x_j = j dx でdx = 1という場合は、解像度dx = 10[km]ということですよね? 物理学でよく半値幅で規格化する、という言葉を聞くのですが、わからなくなってしまって.... 例えばL = 10[km]で規格化した場合かつdx = 1だった場合はx_j = j dx = 10 * 1=10 = 100[km]ということになるのでしょうか。 無次元化しなくても良いじゃないかというご意見もあるかと思うのですが、私の理解が正しいかどうか、お教えいただけますと幸いです。 よろしくお願いいたします。

  • プログラムについて

    プログラムについて 2次元ラプラス方程式を差分法で解くというプログラムなのですが、 ・プログラムの流れ ・具体的に(初期値はいくら、実際の計算、誤差の比較など)どこでどのような計算をしているのか を教えていただけないでしょうか? 面倒だとは思いますがお願いします。 以下プログラムURL http://www.geocities.jp/laprog321/ .