常微分方程式の数値解法

このエントリーをはてなブックマークに追加
40山崎渉:03/05/28 14:19
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
41山崎 渉:03/07/12 12:43

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
42山崎 渉:03/07/15 12:43

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
43山崎 渉:03/08/02 02:34
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
     ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ ) <これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
  = ◎――――――◎                      山崎渉&ぼるじょあ
45山崎 渉:03/08/15 18:23
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
46名無しさん@3周年:03/10/11 03:11
今、
A2(x)*f(x)''+A1(x)*f(x)'+A0(x)*f(x)=B(x)

のような形式の2階常微分方程式を、
f(0)'=0, f(N)=0 なる境界条件の元で解こうとしてます。
単純な中心差分法を使ってるんですけど、数値解がなんだかおかしいです。
他に上手い解法はないんでしょうか??
47名無しさん@3周年:03/10/11 16:51
age
48名無しさん@3周年:03/10/11 21:54
f(0)'=0, f(0)=Xo
Xo は 仮の解。まずは、1 で試すとかね。

として、f(N)=0 を満たすように
射的法(シューティング法)でどうよ?

自分は、Falkner-Skan Cook をこれで解いてるんだけど。
4948:03/10/11 23:33
ルンゲクッタ + 射的法ね。
50名無しさん@3周年:03/10/20 15:31
>>49
随分とレスが遅くなりましたが、ありがとうございます!!
51名無しさん@3周年:04/04/16 12:45
>15 :のりおくれまくり :2000/06/06(火) 12:10
>BDF(予測子修正法)って使ってる方います?
http://www.pse.che.tohoku.ac.jp/%7Emsuzuki/lecture/Gear/gearhtml.html


>16 :わかりやすいし :2001/05/27(日) 16:15
>オイラー法でいいじゃん.ダメ?


>17 :名無しさん@1周年 :01/10/24 01:12
>全然だめ


>>50
この普通の会話を見ると、この板に亀レスなど存在しない
52名無しさん@3周年:04/12/12 00:44:05
ぬるぽ
53公募情報:04/12/16 15:48:29
http://www.pref.osaka.jp/fu-daigaku/saiyo/index.html
(新)大阪府立大学専任教員募集要項
[ 工 学 研 究 科 ]
1.募集人員
助教授または講師 1名
2.所 属(予定) 
工学研究科 電子・数物系専攻 数理工学分野
3.専門分野
応用数理(力学系で記述される自然現象や社会現象に関する数理モデルの数学的解析)
4.担当授業科目(予定)
学 部:工学共通科目ノ応用数学I(常微分方程式)、応用数学II(偏微分方程式)、
数学解析(複素関数論)など
学科専門科目ノ電算機計算法(主としてC言語によるプログラミング)など
大学院博士前期課程:数値解析学特論など
54名無しさん@3周年:04/12/16 18:15:39
桂(笑)桂(嗤)桂(嘲)桂(笑)桂(嗤)桂(嘲)桂(笑)桂(嗤)桂(嘲)桂(笑)桂(嗤)桂(嘲)
55名無しさん@3周年:04/12/16 19:53:39
無理無理。
56ぼるじょあ ◆yBEncckFOU :05/01/13 08:19:50
     ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ ) <これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
  = ◎――――――◎                      山崎渉&ぼるじょあ
57山.崎 渉:05/02/22 20:30:02
...これからも僕を応援して下さいね(^^)。   
  
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
         
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。                         
  =〔~∪ ̄ ̄〕                                            
  = ◎――◎                      山崎渉                       
                                
 __∧_∧_                                                 
 |(  ^^ )| <寝るぽ(^^)      
 |\⌒⌒⌒\                                
 \ |⌒⌒⌒~|         山崎渉             
   ~ ̄ ̄ ̄ ̄                            
                            
   ∧_∧                                       
  (  ^^ )< ぬるぽ(^^)      
                                                       
    (⌒V⌒)                    
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。   
  ⊂|    |つ                                
   (_)(_)                      山崎パン 
                                         
     ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ ) <これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕                          
  = ◎――――――◎                      山崎渉&ぼるじょあ
58山本圭太:2006/05/05(金) 20:03:05
うほほー6年もたって57しか進んでないスレッドってあまりにもかわいそすぎだどー
そんなバナナー
59偏微分方程式:2006/06/25(日) 01:36:17
数値解析のシュミレーション
J(u) = 1/2 * ∫(du/dx)^2 * dx 積分区間[0,1] u(0)=1,u(1)=0.5について
J(u)が最小になるようなuを求めよ。
という問題に対して最小化法のプログラムをもちいて解け
という問題ですがプログラムを教えていただけないでしょうか?
言語はCです。最急降下法を使うらしいです。
60名無しさん@5周年:2006/07/01(土) 00:26:36
変分法?
61名無しさん@5周年:2006/07/20(木) 03:00:53
>>59

U(0)=1
U(]0..1[)=0
u(1)= 0.5
62名無しさん@5周年:2006/07/24(月) 22:30:20
初歩的な質問なのかも知れませんが、どなたかお教えいただけますか?

3つの式がありまして

Δx = f1(x, y, z)
Δy = f2(x, y, z)
z = f3(x, y)

となっています。
単純な連立常微分方程式および連立非線形代数方程式に関しては
既存の数値計算ライブラリを利用して解けるのですが、上記のように混ざっている場合の解き方がわかりません。

具体的には非線形連立代数方程式に関してはMINPACKのHYBRD関数、

http://www.netlib.org/minpack/hybrd.f

連立常微分方程式に関してはErnst Hairer氏のRADAU5

http://www.unige.ch/~hairer/prog/stiff/radau5.f

を利用しています。

HYBRD関数では各変数の出力計算式が高階関数として必要とされるのですが、
上述のように直接にはΔxとΔyしか求められないため、xとyに関しては与えることができません。
そこでRADAU5でxとyの値を求めようとすると、zの値が必要となり、
zの値を知るためにはzと連立させるべきxとyの値が・・・と、堂々巡りになり、
一体どのように計算手順を踏めばよいのかわからないという状況です。

数値計算とは全く縁の無い分野の人間でして、トンチンカンな質問になっているかもしれませんが、
なにかしらアドバイスをいただけないでしょうか。

どうぞよろしくお願いいたします。
63名無しさん@5周年:2006/07/25(火) 13:23:06
初期値はー?初期値は貰えたのー?
6462:2006/07/25(火) 14:08:25
>63

はい、初期値は入手可能です。
65名無しさん@5周年:2006/07/25(火) 17:12:50
#include<stdio.h>

double* f1(double* x,double* y,double* z);
double* f2(double* x,double* y,double* z);
double* f3(double* x,double* y);

int main
{
double x;
double y;
double z;
double* pz;

double* dx;
double* dy;
//初期値x=0.8 y=0.6で
x=0.8;
y=0.6;

for(int i=0;i<30;i++)
{
pz=f3(&x,&y);
z= *pz;
printf("%6.2lf %6.2lf\ %6.2lf\n",x,y,z);
dx=f1(&x,&y,&z);
dy=f1(&x,&y,&z);
x=x+ (*dx);
y=y+ (*dy);
}
return 0;
}
6662:2006/07/25(火) 18:06:28
>65

ありがとうございます。

疑問があるのですが、上述のコードだと
dxおよびdyが現在のx, y, zの値のみから決定されると思われます。
例えば2次のルンゲクッタでは次のステップの中点まで一旦計算を行って
中点における微分値を用いて次のステップまでの全区間の微分値として計算を行うとありました。
とすれば、中点において微分値を計算する際には、上述の例では、
現在のzの値ではなく中点において連立代数方程式を解くことで求められたzの値を利用すべきように思えます。

あるいは、zを境界変数の如く利用して次のステップのx, yを求め、
その後にx, y, z, その他の変数を連立させるという方法を繰り返すことで問題はないのでしょうか?

疑問がうまく表現できていないかもしれませんが、お教えいただけると幸いです。
67名無しさん@5周年:2006/07/27(木) 12:06:37
>2次のルンゲクッタ

ルンゲクッタは4次の近似式、と覚えていた。
2次ならホイン法って言ったかな

あれも遂次近似して、最後に2つや3つや4つの値に
重みつけてから平均値求めるんだっけ
68名無しさん@5周年:2006/07/30(日) 02:15:33
陰解法レス求む!
69名無しさん@5周年:2006/07/30(日) 15:32:42
ちょっと微分っぽく戻して

dx/dt
=f1(x, y, z)

dy/dt
=f2(x, y, z)

z=f3(x, y)
これらを差分にする

xの数列をx[n-1], x[n], x[n+1]
yの数列をy[n-1], y[n], y[n+1]
zの数列をz[n-1], z[n], z[n+1]
などとおく。
時間差を冲とする

前進差分なら
z[n]=f3(x[n], y[n])
x[n+1]=x[n]+冲*f1(x[n], y[n], z[n])
y[n+1]=y[n]+冲*f2(x[n], y[n], z[n])


これを順次代入し続ければ良い。これは>>65方式。
70名無しさん@5周年:2006/07/30(日) 15:42:25
で、後退差分なら
z[n]=f3(x[n], y[n])
x[n]=x[n-1]+冲*f1(x[n], y[n], z[n])
y[n]=y[n-1]+冲*f2(x[n], y[n], z[n])


x[n]-冲*f1(x[n], y[n], z[n]) = x[n-1]
y[n]-冲*f2(x[n], y[n], z[n]) = y[n-1]

ってやるのが本来で、これを連立方程式の形にして
行列にぶち込んで解きたい所だが、

これじゃ解けないから、f1(x[n], y[n], z[n])を
テーラー展開してf1(x[n-1], y[n-1], z[n-1])と1次
差分項くらいで弄り回す必要が出てくるなあ

やっぱ後退ダメだなw
前進でも2次のホイン法あたりで解こう
最後は4次のルンゲクッタ、4次におまけがついた
ルンゲクッタジルでも使うか
71名無しさん@5周年:2006/07/31(月) 14:50:12
オイラー法
y[n+1]=y[n]+h*f(x[n], y[n])
hが時間差で

ホイン法は、単純な常微分方程式なら

k1=h*f(x[n], y[n])
k2=h*f(x[n] + h, y[n] + k1)
y[n+1]=y[n] + (k1 + k2)/2

これを連立常微分方程式に拡張するのか

f1から出て来た値をぶち込むのがl1 , l2
f2から出て来た値をぶち込むのがm1 , m2

f3は微分方程式じゃないから動かさなくてよろしいw

z[n]=f3(x[n], y[n])

l1=h*f1(x[n], y[n], z[n])
l2=h*f1(x[n] + l1, y[n] + m1 , z[n])
x[n+1]=f1(x[n], y[n], z[n]) + (l1 + l2)/2

m1=h*f2(x[n], y[n], z[n])
m2=h*f2(x[n] + l1, y[n] + m1 , z[n])
y[n+1]=f2(x[n], y[n], z[n]) + (m1 + m2)/2

で、この問題だと時間差は1みたいだし、2回計算した平均値で
延々回してるだけじゃんかw
72さとし:2006/08/22(火) 14:43:50
ブラジウスの公式 http://irws.eng.niigata-u.ac.jp/~chem/itou/ce/diffeq2.html
F'''+(1/2)FF''=0 (境界条件:η=0 F=F'=0 および η=∞ F''=1)
をルンゲクッタで解くとあるんですけど,実際に解くときにF'',F',Fはどのように計算すれば良いでしょうか?教えて下さいm(_ _)m
73名無しさん@5周年:2006/08/22(火) 18:51:32
>>72
一般的に
x''' + x'' + x' + x = a てな問題は
y0=x
y1=x'
y2=x''

とおくと

y0'=y1
y1'=y2
y2' + y2 + y1 + y0 = a

となって、連立の1階微分方程式となる。
1階微分方程式ならルンゲクッタで熔けるでしょ?

7448:2006/08/23(水) 02:32:04
>>72
73氏に補足でF'(0)が未知の場合、
初期値がルンゲクッタで解くには不完全なので
射的法(シューティング法)で解く方法があります。
7548:2006/08/23(水) 02:34:00
間違えた。F''(0)が未知の時。
76さとし:2006/08/23(水) 21:44:25
>73、74さん
無事解決できました.ありがとうございます.m(_ _)m
77名無しさん@5周年:2007/06/16(土) 02:20:33
てす
78山本圭太:2007/09/19(水) 02:33:24
なんでこのスレまだ残ってるんだどーwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

アンモナイト並の綾波だどーwwwwww
79名無しさん@5周年:2007/09/22(土) 02:40:18
ガリレオの相対性原理は間違っていました。元日本物理学会
会長の佐藤文隆教授も昔からそれに気づき、自著に書いてお
られます。以下の文はGZKカットオフに関する記述の一部
です。

ガリレオの相対性原理は「互いに等速運動している系はみな
対等だ」というのです。
・・・・・・・・・・途中略
物理は全部、相対性原理にのっとっているといえます。
・・・・・・・・・・途中略
相対性原理でない考えは、なにか絶対系があるというもので
す。なにか特殊なものがあって、それから見てあれはあっち
に動いている、これはこっちにこう動いていると、相対運動
についてランクづけできるわけです。


ガリレオの相対性原理は、静止と等速直線運動は区別出来な
いという、慣性の法則の一部の結論によって構築されました
が、思考実験によって、400年ぶりに静止と等速直線運動は
力学的に区別出来ることが判明しました。
詳しくはこのサイトをご覧ください。
http://home9.highway.ne.jp/cym10262/fenomina.html
80pd3909b.osakac00.ap.so-net.ne.jp:2007/10/04(木) 14:57:58
;
81名無しさん@5周年:2008/04/09(水) 18:09:51
「常微分方程式 予測子」でぐぐると2件目にココw
82名無しさん@5周年:2009/01/29(木) 11:27:11
>>52
ガッ
83名無しさん@5周年:2009/05/27(水) 22:16:16
>>36
ガッ
84名無しさん@5周年:2009/07/07(火) 01:30:50
いや〜ん!さんっていまどうしてるのだろうか
85名無しさん@5周年:2009/12/27(日) 05:31:54
初期密度勾配 ρ(x,t=0) = C-|x| に対して
フィックの法則
dρ(x,t)/dt = Dd^2ρ(x,t)/dx^2
を使って密度ρの時間発展を観察したかった。

とりあえず差分近似でシミュってみたけど、
x=0 付近の二次導関数の急峻度が分解能によってザクザク変わって解きにくかった。
ρ(x,t=0)=C-√(1+x^2)とかちょっと解析的な関数で近似して計算するかなぁと思ったけど、
初心に戻って考えるとフィックの法則は単に
「どんどんなめらかになります」っていうだけの式だし、
x=0 付近の些細な形に囚われずに全体のおおよその形は決まって行くはず。
この初期条件ってそれなりの解析解があるのかなぁ、と思いました。
なんかいい方法教えてけれ
8685:2009/12/27(日) 06:42:11
あ、もしかしてフーリエ変換でいけるかも。
Fourier{d/dx} = -iω より
Fourier{dρ(x,t)/dt} = Fourier{Dd^2ρ(x,t)/dx^2} = -Dω^2 Fourier{ρ(x,t)}
Fourier{ρ(x,t)} = exp(-Dtω^2)Fourier{ρ(x,0)}
フーリエ逆変換して
ρ(x,t) = (2Dt)^(1/2)exp(-x^2/(4Dt))*ρ(x,0)
(*は x に関する畳み込み演算)

うわああああ。時間比例する分散をもつガウス分布の畳み込みになるんだ。
これ初期配置どんな形でも解けるじゃん。
っていうかなんか中心極限定理そのままじゃん。
おれはいまはげしく感動しているぞ…

というか、ここまで書けよ、フィックの野郎…
8785:2009/12/27(日) 06:52:52
逆フーリエ変換ちょっと間違ってたな。
ρ(x,t) = (4πDt)^(1/2)exp(-x^2/(4Dt))*ρ(x,0)

つーかフィックの法則・正規分布でぐぐったらいっぱい出てくるわ…
まあ自分で解いて感動できたのでOK
8885:2009/12/27(日) 15:56:48
さらに訂正
ρ(x,t) = (4πDt)^(-1/2)exp(-x^2/(4Dt))*ρ(x,0)
89名無しさん@5周年
hoshu