x(t) + t f(t, x) = x(t) + x (t) t x t Tayler x(t + t) = x(t) + x (t) t + 1 2! x (t) t ! x (t) t 3 + (15) Eular x t Teyler 1 Eular 2 Runge-Kutta

Similar documents
x h = (b a)/n [x i, x i+1 ] = [a+i h, a+ (i + 1) h] A(x i ) A(x i ) = h 2 {f(x i) + f(x i+1 ) = h {f(a + i h) + f(a + (i + 1) h), (2) 2 a b n A(x i )


#define N1 N+1 double x[n1] =.5, 1., 2.; double hokan[n1] = 1.65, 2.72, 7.39 ; double xx[]=.2,.4,.6,.8,1.2,1.4,1.6,1.8; double lagrng(double xx); main

C による数値計算法入門 ( 第 2 版 ) 新装版 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 新装版 1 刷発行時のものです.

数値計算:常微分方程式

A

スライド 1

sim98-8.dvi

実際の株価データを用いたオプション料の計算

/* do-while */ #include <stdio.h> #include <math.h> int main(void) double val1, val2, arith_mean, geo_mean; printf( \n ); do printf( ); scanf( %lf, &v

関数のグラフを描こう

,. Black-Scholes u t t, x c u 0 t, x x u t t, x c u t, x x u t t, x + σ x u t, x + rx ut, x rux, t 0 x x,,.,. Step 3, 7,,, Step 6., Step 4,. Step 5,,.

スライド 1

スライド 1

f(x) = f(x ) + α(x)(x x ) α(x) x = x. x = f (y), x = f (y ) y = f f (y) = f f (y ) + α(f (y))(f (y) f (y )) f (y) = f (y ) + α(f (y)) (y y ) ( (2) ) f

£Ã¥×¥í¥°¥é¥ß¥ó¥°(2018) - Âè11²ó – ½ÉÂꣲ¤Î²òÀ⡤±é½¬£² –

資料

simx simxdx, cosxdx, sixdx 6.3 px m m + pxfxdx = pxf x p xf xdx = pxf x p xf x + p xf xdx 7.4 a m.5 fx simxdx 8 fx fx simxdx = πb m 9 a fxdx = πa a =

[1] 1.1 x(t) t x(t + n ) = x(t) (n = 1,, 3, ) { x(t) : : 1 [ /, /] 1 x(t) = a + a 1 cos πt + a cos 4πt + + a n cos nπt + + b 1 sin πt + b sin 4πt = a

C 2 / 21 1 y = x 1.1 lagrange.c 1 / Laglange / 2 #include <stdio.h> 3 #include <math.h> 4 int main() 5 { 6 float x[10], y[10]; 7 float xx, pn, p; 8 in

joho09.ppt

<4D F736F F D B B83578B6594BB2D834A836F815B82D082C88C60202E646F63>


Microsoft Word - 信号処理3.doc

II (10 4 ) 1. p (x, y) (a, b) ε(x, y; a, b) 0 f (x, y) f (a, b) A, B (6.5) y = b f (x, b) f (a, b) x a = A + ε(x, b; a, b) x a 2 x a 0 A = f x (

() Remrk I = [0, ] [x i, x i ]. (x : ) f(x) = 0 (x : ) ξ i, (f) = f(ξ i )(x i x i ) = (x i x i ) = ξ i, (f) = f(ξ i )(x i x i ) = 0 (f) 0.


(3) (2),,. ( 20) ( s200103) 0.7 x C,, x 2 + y 2 + ax = 0 a.. D,. D, y C, C (x, y) (y 0) C m. (2) D y = y(x) (x ± y 0), (x, y) D, m, m = 1., D. (x 2 y

c-all.dvi

error_g1.eps

5. [1 ] 1 [], u(x, t) t c u(x, t) x (5.3) ξ x + ct, η x ct (5.4),u(x, t) ξ, η u(ξ, η), ξ t,, ( u(ξ,η) ξ η u(x, t) t ) u(x, t) { ( u(ξ, η) c t ξ ξ { (

pdf

DVIOUT

画像工学特論

Chap11.dvi

C言語によるアルゴリズムとデータ構造

p = 1, 2, cos 2n + p)πj = cos 2nπj 2n + p)πj, sin = sin 2nπj 7.1) f j = a ) 0 + a p + a n+p cos 2nπj p=1 p=0 1 + ) b n+p p=0 sin 2nπj 1 2 a 0 +

1 4 2 EP) (EP) (EP)

Note.tex 2008/09/19( )

x i [, b], (i 0, 1, 2,, n),, [, b], [, b] [x 0, x 1 ] [x 1, x 2 ] [x n 1, x n ] ( 2 ). x 0 x 1 x 2 x 3 x n 1 x n b 2: [, b].,, (1) x 0, x 1, x 2,, x n

v er.1/ c /(21)

DOPRI5.dvi

gr09.dvi

Gmech08.dvi

θ (t) ω cos θ(t) = ( : θ, θ. ( ) ( ) ( 5) l () θ (t) = ω sin θ(t). ω := g l.. () θ (t) θ (t)θ (t) + ω θ (t) sin θ(t) =. [ ] d dt θ (t) ω cos θ(t

6 6.1 sound_wav_files flu00.wav.wav 44.1 khz 1/44100 spwave Text with Time spwave t T = N t N 44.1 khz t = 1 sec j t f j {f 0, f 1, f 2,, f N 1


Trapezoidal Rule θ = 1/ x n x n 1 t = 1 [f(t n 1, x n 1 ) + f(t n, x n )] (6) 1. dx dt = f(t, x), x(t 0) = x 0 (7) t [t 0, t 1 ] f t [t 0, t 1 ], x x

Taro-数値計算の基礎Ⅱ(公開版)

n=1 1 n 2 = π = π f(z) f(z) 2 f(z) = u(z) + iv(z) *1 f (z) u(x, y), v(x, y) f(z) f (z) = f/ x u x = v y, u y = v x

スライド 1

sec13.dvi

d dt A B C = A B C d dt x = Ax, A 0 B 0 C 0 = mm 0 mm 0 mm AP = PΛ P AP = Λ P A = ΛP P d dt x = P Ax d dt (P x) = Λ(P x) d dt P x =

PowerPoint Presentation

Numerical Analysis II, Exam End Term Spring 2017

ma22-9 u ( v w) = u v w sin θê = v w sin θ u cos φ = = 2.3 ( a b) ( c d) = ( a c)( b d) ( a d)( b c) ( a b) ( c d) = (a 2 b 3 a 3 b 2 )(c 2 d 3 c 3 d


C 言語第 6 回 1 数値シミュレーション :2 階の微分方程式 ( シラバス10 11 回目 ) 1 2 階の微分方程式と差分方程式微分方程式を 2 d x dx + c = f ( x, t) 2 dt dt とする これを 2 つの 1 階の微分方程式に変更する ìdx = y 2 2 d

y π π O π x 9 s94.5 y dy dx. y = x + 3 y = x logx + 9 s9.6 z z x, z y. z = xy + y 3 z = sinx y 9 s x dx π x cos xdx 9 s93.8 a, fx = e x ax,. a =

1 u t = au (finite difference) u t = au Von Neumann

z f(z) f(z) x, y, u, v, r, θ r > 0 z = x + iy, f = u + iv C γ D f(z) f(z) D f(z) f(z) z, Rm z, z 1.1 z = x + iy = re iθ = r (cos θ + i sin θ) z = x iy

2 1 κ c(t) = (x(t), y(t)) ( ) det(c (t), c x (t)) = det (t) x (t) y (t) y = x (t)y (t) x (t)y (t), (t) c (t) = (x (t)) 2 + (y (t)) 2. c (t) =

p12.dvi

4 4 4 a b c d a b A c d A a da ad bce O E O n A n O ad bc a d n A n O 5 {a n } S n a k n a n + k S n a a n+ S n n S n n log x x {xy } x, y x + y 7 fx


7. y fx, z gy z gfx dz dx dz dy dy dx. g f a g bf a b fa 7., chain ule Ω, D R n, R m a Ω, f : Ω R m, g : D R l, fω D, b fa, f a g b g f a g f a g bf a

: 1g99p038-8


comment.dvi

Untitled

x = a 1 f (a r, a + r) f(a) r a f f(a) 2 2. (a, b) 2 f (a, b) r f(a, b) r (a, b) f f(a, b)

[1] #include<stdio.h> main() { printf("hello, world."); return 0; } (G1) int long int float ± ±

2014計算機実験1_1

webkaitou.dvi

() n C + n C + n C + + n C n n (3) n C + n C + n C 4 + n C + n C 3 + n C 5 + (5) (6 ) n C + nc + 3 nc n nc n (7 ) n C + nc + 3 nc n nc n (

dynamics-solution2.dvi




ープのロープ長以下であれば実現可能である ケース 3: 3 本のロープの杭の位置を点 P 1 = (x 1, y 1, 0), 点 P 2 = (x 2, y 2, 0), 点 P 3 = (x 3, y 3, 0) とする 点 P 1 = (x 1, y 1, 0), 点 P 2 = (x 2,

untitled

I ( ) 1 de Broglie 1 (de Broglie) p λ k h Planck ( Js) p = h λ = k (1) h 2π : Dirac k B Boltzmann ( J/K) T U = 3 2 k BT

P06.ppt

f(x,y) (x,y) x (x,y), y (x,y) f(x,y) x y f x (x,y),f y (x,y) B p.1/14

2012 IA 8 I p.3, 2 p.19, 3 p.19, 4 p.22, 5 p.27, 6 p.27, 7 p

1. (8) (1) (x + y) + (x + y) = 0 () (x + y ) 5xy = 0 (3) (x y + 3y 3 ) (x 3 + xy ) = 0 (4) x tan y x y + x = 0 (5) x = y + x + y (6) = x + y 1 x y 3 (

KENZOU

,,,17,,, ( ),, E Q [S T F t ] < S t, t [, T ],,,,,,,,

IA September 25, 2017 ( ) I = [a, b], f (x) I = (a 0 = a < a 1 < < a m = b) I ( ) (partition) S (, f (x)) = w (I k ) I k a k a k 1 S (, f (x)) = I k 2

[1][2] [3] *1 Defnton 1.1. W () = σ 2 dt [2] Defnton 1.2. W (t ) Defnton 1.3. W () = E[W (t)] = Cov[W (t), W (s)] = E[W (t)w (s)] = σ 2 mn{s, t} Propo

1 1.1 ( ). z = a + bi, a, b R 0 a, b 0 a 2 + b 2 0 z = a + bi = ( ) a 2 + b 2 a a 2 + b + b 2 a 2 + b i 2 r = a 2 + b 2 θ cos θ = a a 2 + b 2, sin θ =

‚æ4›ñ

III 1 (X, d) d U d X (X, d). 1. (X, d).. (i) d(x, y) d(z, y) d(x, z) (ii) d(x, y) d(z, w) d(x, z) + d(y, w) 2. (X, d). F X.. (1), X F, (2) F 1, F 2 F

1 No.1 5 C 1 I III F 1 F 2 F 1 F 2 2 Φ 2 (t) = Φ 1 (t) Φ 1 (t t). = Φ 1(t) t = ( 1.5e 0.5t 2.4e 4t 2e 10t ) τ < 0 t > τ Φ 2 (t) < 0 lim t Φ 2 (t) = 0

Introduction to Numerical Analysis of Differential Equations Naoya Enomoto (Kyoto.univ.Dept.Science(math))

dx dt = f x,t ( ) t

K E N Z OU

x A Aω ẋ ẋ 2 + ω 2 x 2 = ω 2 A 2. (ẋ, ωx) ζ ẋ + iωx ζ ζ dζ = ẍ + iωẋ = ẍ + iω(ζ iωx) dt dζ dt iωζ = ẍ + ω2 x (2.1) ζ ζ = Aωe iωt = Aω cos ωt + iaω sin

Bessel ( 06/11/21) Bessel 1 ( ) 1.1 0, 1,..., n n J 0 (x), J 1 (x),..., J n (x) I 0 (x), I 1 (x),..., I n (x) Miller (Miller algorithm) Bess

2 P.S.P.T. P.S.P.T. wiki 26

Transcription:

6 Runge-KuttaEular Runge-Kutta Runge-Kutta A( ) f(t, x) dx dt = lim x(t + t) x(t) t 0 t = f(t, x) (14) t x x(t) t + dt x x(t + dt) Euler 7 t 1 f(t, x(t)) x(t) + f(t + dt, x(t + dt))dt t + dt x(t + dt) (14) x(t + t) = x x(t+dt) x(t) t t+dt 7: 1

x(t) + t f(t, x) = x(t) + x (t) t x t Tayler x(t + t) = x(t) + x (t) t + 1 2! x (t) t 2 + 1 3! x (t) t 3 + (15) Eular x t Teyler 1 Eular 2 Runge-Kutta 8 Euler t+dt x k 1 t t+dt t+dt/2, x(t)+ k 1 /2 x f(t + dt/2, x(t) + k 1 /2) x(t + dt) x x(t+dt) x(t) k 1 t t+dt/2 t+dt 8: 2 Runge-Kutta k 1 = f(t, x(t))dt (16) x(t + dt) = x(t) + f(t + dt/2, x(t) + k 1 /2)dt (17) 2 Runge-Kutta Taylor dt 2 Runge-Kutta 9 4 Runge-Kutta (16) (17) 1. (t, x) dt x k 1 2. k 1 t t + dt f(t + dt, x + k 1 /2) x(t) dt x k 2 3. k 2 t t + dt f(t + dt, x + k 2 /2) x(t) dt x k 3 2

4. k 3 t t + dt f(t + dt, x + k 3 /2) x(t) dt x k 4 x k 1 k 2 k 3 k 4 x(dt) k 1 = f(t, x(t))dt (18) k 2 = f(t + dt/2, x(t) + k 1 /2)dt (19) k 3 = f(t + dt/2, x(t) + k 2 /2)dt (20) k 4 = f(t + dt, x(t) + k 3 )dt (21) x(t + dt) = x(t) + 1 6 (k 1 + 2k 2 + 2k 3 + k 4 ) (22) Eular t+dt (1/6)t+dt (1/2) t + dt (5/6) 3 4 Runge-Kutta Taylor 4 dt 5 Runge-Kutta 4 Runge-Kutta x x dt/6 dt/3 dt/3 dt/6 x(t+dt) x(t) k 1 k 2 k 3 k 4 step1 step2 step3 step4 t t+dt/2 t+dt t t+dt/2 t+dt 9: 4 Runge-Kutta dy/dx = y Runge-Kutta Runge-Kutta S_RungK 6 Runge-Kutta // === Runge-Kutta === #include <stdio.h> #include <math.h> #define EPS 1.0e-8 #define N 50 // 3

#define X0 0.0 // X #define XN 5.0 // X #define Y0 1.0 // Y // main main // // void S_RungK( double, double *, double, int, double(*)() ); double FUNC( double, double ); // void main(){ FILE *fout; int i; double x, h, y[101]; fout=fopen("rk.csv","w"); h=(xn-x0)/(double)n; x=x0; y[0]=y0; printf(" X0=%f XN=%f Y0=%f h=%f \n",x,xn,y[0],h); S_RungK(x,y,h,N,*FUNC); for(i=0; i<=n; i++) { printf(" i=%f, y=%f \n", h*i, y[i]); fprintf(fout,"%f, %f\n", h*i, y[i]); fclose(fout); /** Function to calculate Runge-Kutta method ** // ; y[0] = y // h = x // N = N // x = x // FUNC = dy/dx // ; y[n+1=n+1 void S_RungK( double x, double y[], double h, int n, double (*FUNC)()){ int i; double k1,k2,k3,k4; for(i=0; i<n; i++){ k1=h*(*func)(x, y[i]); // step1 k2=h*(*func)(x+0.5*h, y[i]+0.5*k1); // step2 k3=h*(*func)(x+0.5*h, y[i]+0.5*k2); // step3 k4=h*(*func)(x+h,y[i]+k3); // step4 x=x+h; y[i+1]=y[i]+(k1+2.0*(k2+k3)+k4)/6.0; 4

// dy/dx // dy/dx=y double FUNC( double x, double y ){ return ( y ); http://www.hm5.aitai.ne.jp/~minemura/csimu/index.html 10 160 120 y 80 40 0 0 1 2 3 4 5 6 10: dy/dx = y 4 Runge-Kutta x Runge-Kutta qx, qy, px, py RungeKutta() 7 Runge-Kutta // === Runge-Kutta === void RungeKutta( double qx, double qy, double px, double py, double *qxk, double *qyk, double *pxk, double *pyk ) { double q, qi3; q = hypot( qx, qy ); qi3 = 1.0/(q*q*q); *qxk = px/m*dt; *qyk = py/m*dt; *pxk = -GM*M*qx*qi3*dT; *pyk = -GM*M*qy*qi3*dT; Runge-Kutta Euler 10 Euler 5

7 2 m [kg] q x, q y q y dq 2 x dt = 0, dqy 2 = g (23) 2 dt2 2 x y p x [kg m/s] p y [kg m/s] dq 2 x dt = dp x 2 dt = 0, dq2 y dt = dp y = g, 2 dt (24) dq x dt = p x m, dq y dt = p y m, (25) dt p x p y 1 p x [m]p y [m] 1 Eular 8 Eular // Eular #include <stdio.h> #define G 9.80665 // [m/s/s] #define M 1.0 // [kg] #define N 256 // #define T0 0.0 // [s] #define TN 5.0 // [s] #define QX0 0.0 // X [m] #define QY0 0.0 // Y [m] #define PX0 1.0 // X [kgm/s] #define PY0 2.0 // Y [kgm/s] //---- main function int main(void) { FILE *fout; int i; double qx, qy, px, py, dt; fout = fopen("kekka.csv","w"); // printf(" T0=%4.1f QX0%4.1f QY0=%4.1f PX0=%4.1f PY0=%4.1f N=%5d\n",T0,QX0,QY0,PX0,PY0,N); 6

dt = (TN-T0)/(double)N; qx = QX0; qy=qy0; px=px0; py=py0; for(i=0; i<n; i++) { // qy printf("qx=%lf yx=%lf\n",qx,qy); // qx,qy fprintf(fout,"%lf, %lf\n",qx,qy); // qx,qy qx += px/m*dt; // x () qy += py/m*dt; // y () px += M*0*dT; // x () py += -M*G*dT; // x () if(qy<0.0) break; // y 0 fclose(fout); return(0); // 11 0.25 0.20 垂直方向 y 0.15 0.10 0.05 0.00 0.0 0.1 0.2 0.3 0.4 0.5 水平方向 x 11: () Eular Runge-Kutta 8 1 2 7

(q x, q y ) (p x, p y ) p x = m dq x dt, p y = m dq y dt dp x dt = GMm cos ϕ = GMmq x, q 2 q 3 dp y dt = GMm q 2 (26) cos ϕ = GMmq y q 3, (27) 1 1 1 GMm r = mrω 2, r = 1, T = 1, ω = 2π T = 2π (28) G M GM 4π 2 1 dt 1 256 1 Runge-Kutta Runge-Kutta q x q y p x p y RungeKutta() 9 Runge-Kutta // Runge-Kutta #include <stdio.h> #include <math.h> // ---- physical setting #define M_PI 3.1415926535 #define GM 4*M_PI*M_PI #define M 1.0 // #define dt 1.0/256 // #define QX0 1.0 // x #define QY0 0.0 // y #define PX0 0.0 // x #define PY0 sqrt(gm)*m // y // ---- main function int main(void) { FILE *fout; double qx, qy; double px, py; 8

double T; double qxk1, qyk1, pxk1, pyk1; double qxk2, qyk2, pxk2, pyk2; double qxk3, qyk3, pxk3, pyk3; double qxk4, qyk4, pxk4, pyk4; double tqx, tqy, tpx, tpy; double q, qi3; fout = fopen("orbit.csv","w"); // qx = QX0; qy = QY0; px = PX0; py = PY0; for( T = 0.0; T < 10.00; T += dt ){ // (qx,qy) (px,py) k1 tqx = qx; tqy = qy; tpx = px; tpy = py; q = hypot( tqx, tqy ); qi3 = 1.0/(q*q*q); qxk1 = tpx / M * dt; qyk1 = tpy / M * dt; pxk1 = -GM * M * tqx * qi3 * dt; pyk1 = -GM * M * tqy * qi3 * dt; // (qx,qy) (px,py) k2 tqx = qx+0.5*qxk1; tqy = qy+0.5*qyk1; tpx = px+0.5*pxk1; tpy = py+0.5*pyk1; q = hypot( tqx, tqy ); qi3 = 1.0/(q*q*q); qxk2 = tpx / M * dt; qyk2 = tpy / M * dt; pxk2 = -GM * M * tqx * qi3 * dt; pyk2 = -GM * M * tqy * qi3 * dt; // (qx,qy) (px,py) k3 tqx = qx+0.5*qxk2; tqy = qy+0.5*qyk2; tpx = px+0.5*pxk2; tpy = py+0.5*pyk2; q = hypot( tqx, tqy ); qi3 = 1.0/(q*q*q); qxk3 = tpx / M * dt; qyk3 = tpy / M * dt; pxk3 = -GM * M * tqx * qi3 * dt; pyk3 = -GM * M * tqy * qi3 * dt; // (qx,qy) (px,py) k4 tqx = qx+qxk3; tqy = qy+qyk3; tpx = px+pxk3; tpy = py+pyk3; q = hypot( tqx, tqy ); qi3 = 1.0/(q*q*q); qxk4 = tpx / M * dt; qyk4 = tpy / M * dt; pxk4 = -GM * M * tqx * qi3 * dt; pyk4 = -GM * M * tqy * qi3 * dt; // k1,k2,k3,k4 qx += (qxk1 + 2*qxk2 + 2*qxk3 + qxk4)*(1.0/6); qy += (qyk1 + 2*qyk2 + 2*qyk3 + qyk4)*(1.0/6); px += (pxk1 + 2*pxk2 + 2*pxk3 + pxk4)*(1.0/6); py += (pyk1 + 2*pyk2 + 2*pyk3 + pyk4)*(1.0/6); printf("qx=%f qy=%f px=%f py=%f \n",qx,qy,px,py); 9

fprintf(fout,"%f, %f\n",qx,qy); // qx,qy fclose(fout); return(0); // 12 Runge-Kutta Euler 10 Euler (?) 1.5 1.0 0.5 y 0.0-0.5-1.0-1.5-1.5-1.0-0.5 0.0 0.5 1.0 1.5 12: Keplar Runge-Kutta x 9 2 2 (1) (2) (3) t x t x 10

u(x, t) u(x, t) t = κ 2 u(x, t) x 2 (29) κ 9.1 SI CGS T X /T τx/x ξ 1 κ = 1 u(x, t) t = 2 u(x, t) x 2 (30) 9.2 t t > 0 x 0 < x < LL 0 < x < L u(x, 0) = 1 x = 0 x = L 0u(0, t) = 0t > 0 u(x, t) tx t x u(x, t) u(j x, (n + 1) t) u(j x, n t) (31) t t 2 u(x, t) u((j + 1) x, n t) 2u(j x, n t) + u((j 1) x, n t) x 2 x 2 (32) J max = 1/ x j = 0, 1, 2,, J max n = 0, 1, 2, n u(j x, (n + 1) t) u(j x, n t) t (33) u((j + 1) x, n t) 2u(j x, n t) + u((j 1) x, n t) = x 2 (34) 11

t u(j x, (n + 1) t) u(j x, n t) (35) = t x {u((j + 1) x, n t) 2u(j x, n t) + u((j 1) x, n t) 2 (36) t/ x 2 r u(j t, (n + 1) x) = r u((j + 1) x, n t) +(1 2r) u(j x, n t) + r u((j 1) x, n t) (37) r = t x 2 (38) 10 // #include <stdio.h> #define JMAX 10 // #define NMAX 250 // #define NINT 25 // void main() { FILE *fout; double u[jmax+1],unew[jmax+1]; // u unew double delx,delt,r; // x t int j,n; // j n delx = 1.0/(double)JMAX; delt = 0.004; r = delt/delx*delx; // x // // r // u[0] = 0.0; for(j=1; j<jmax; j++) u[j]=1.0; u[jmax]=0.0; for(j=0; j<=jmax; j++) unew[j]=u[j]; fout = fopen("diffuse.csv","w"); // for( n=0; n<=nmax; n++) { // // NINT if( (n%nint) == 0) { for(j=0; j<jmax; j++) fprintf(fout, "%lf, ", u[j]); fprintf(fout,"%lf\n",u[jmax]); for(j=1; j<jmax; j++) unew[j] = r*u[j+1]+(1.0-r*2.0)*u[j] +r*u[j-1]; 12

// 1 // for(j=0; j<=jmax; j++) u[j] = unew[j]; // fclose(fout); // r < 1 2 (39) x t 13