質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

1285閲覧

配列を関数に初期化する方法

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/08/10 17:17

編集2016/08/11 03:08

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).

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2016/08/10 20:39

タグが間違ってますね。JavaScript C C++ いずれも関係ないです。Javaが抜けてます。
asahina_dev

2016/08/10 22:05

JavaFX も関係ないです。
think49

2016/08/11 02:30

otnさんの繰り返しになりますが、JavaScript タグは関係ないですね。
guest

回答3

0

Java8のStreamを使うのならば…

java

1for(int j=0; j<M+1; j++){ 2 u[j]=Math.sin(Math.PI*x); 3}

の部分を

java

1u = Arrays.stream(u).map(d -> d * Math.PI).toArray();

投稿2016/08/11 04:42

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

配列 double []u を Math.Sin(Math.PI*x) に初期化する方法がわかりません。

出来てますよ。ただ、あなたの意図とは多分違います:

java

1for(int j=0; j<M+1; j++){ 2 u[j]=Math.sin(Math.PI*x); // xがjの値によらず常に0 3}

ついでに:

x = x + dx*((double)j); // x = 0, dx, 3dx, 6dx, ...

あとインデントがめちゃくちゃで読みづらいです。
読みづらいとバグを呼びますよ。

投稿2016/08/10 23:37

編集2016/08/10 23:44
ozwk

総合スコア13512

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/08/11 04:06

ご教授ありがとうございます。すみません!できました!ありがとうございます。
guest

0

確保した配列の範囲を超えている(11番目にアクセスしている?)ようですが・・・
インデックスあっていますか? ソースを提示された方が回答が得られやすいと思います。

投稿2016/08/10 20:39

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2016/08/11 10:21

"調べてたり何度試したりしましたが、Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11が出ます。"という投稿は何処へ行ったんでしょう?・・・これでは私の回答の意味が分からなくなりますが^^;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問