Javaで、配列 double []u を Math.Sin(Math.PI*x) に初期化する方法がわかりません。教えていただける方お願いします。
調べてたり何度試したりしましたが、今のところ各u=0.0;となります。
非定常1次元熱方程式の数値解を求めるための問題で、uを初期化したいです。
∂u/∂t - ∂^2 u/∂x^2 = 0,
(x,t) ∈ (0,1)×(0,T),
u(0,t) = u(1,t) =0, t∈(0,T),
u(x,0) = sinπx, x∈(0,
public
1 static public void main(String[] args){ 2 3 double a = 0.0; double b = 1.0; 4 int M = 10; 5 double dx = (b-a)/(double)M; 6 double T = 1.0; 7 double t = 0.0; 8 double x = 0.0; 9 double dt = 0.5*dx*dx; 10 double err= 0.0; 11 int N = (int)(T/dt); 12 13 double ua = 0.0; double ub = 0.0; 14 double []u = new double[M+1]; 15 double []v = new double[M+1]; 16 17for(int j=0; j<M+1; j++){ 18 u[j]=Math.sin(Math.PI*x); 19} 20 for (int k=0; k<N+1; k++){ 21 for (int j=0; j<M-1; j++){ 22 x = x + dx*((double)j); 23 v[j+1] = u[j+1] + (u[j+2] - 2*u[j+1] + u[j])*100*0.005; 24 t = t + dt; 25 } 26 u = v; 27for (int j=0; j<M+1; j++){ 28 if (k == 5*(int)(k/5)){ 29 System.out.println(" t = "+t+", u["+j+"]= "+u[j]); 30 } 31 32 if(err < Math.abs(u[j] - exact(t,x))){ 33 err= Math.abs(u[j] - exact(t,x)); 34 System.out.println(" Error = "+err); 35 } 36} 37 38 } 39 } 40 41 public static double exact(double t, double x){ 42 double exact; 43 exact = Math.exp(-Math.PI*Math.PI*t)* Math.sin(Math.PI*x); 44 return exact; 45 } 46} 47```1).
回答3件
あなたの回答
tips
プレビュー