• 締切済み

JAVA プログラムが正しく動きません

プログラム初心者です。Linux suseを使っています。 計算結果を出力するプログラムを作っています。時刻ごとのn個の粒子の様子を計算しています。 forが入れ子になっていて、それをn回計算しているのを、T回計算するように組みました。 時刻tの時のi番目の粒子のポテンシャル(Eという変数)を計算させたつもりなのですが、だんだん減るはずが増えています。 Eは二つの数値を足しているのですが、片方の数値を表示させたところ、毎回微妙に違うのですが [D@1ca318a というような数値(?)が出てきます。 この数値(のようなもの)は一体なんでしょう?文字化け? でもコンパイルできているしEが出てくるってことは計算は一応しているんですよね? この数値とポテンシャルが増えてしまうのは関係があるのでしょうか?それともポテンシャルの計算式が間違っているから増えているんでしょうか? 質問文が曖昧な感じになってしまってすみません。原因がどこにあるのか見当がつかなくて途方にくれています。もし心当たりある方がいらっしゃったら回答お願いします。

みんなの回答

  • layy
  • ベストアンサー率23% (292/1222)
回答No.1

これだと解くカギが少ないので答えようがないです。 デバッグ、あるのみ。 それと 計算なら逆算、終了した時点から逆にさかのぼるとかはできませんか?。 計算が行われている確認を取っているなら、 3+○=7なら4とわかります。 最初の値から追いかけることと終了値から追いかけることと データ着目して追いかける。 もちろんロジックの見直しが最優先。 コンパイルエラーがない=正常に結果が出る の解釈は違います。 知りたい部分をプログラムで引き出せませんか?。 他プログラムではメッセージボックス等で変数の値表示したりします。 コード眺めてもなかなか解決しません。

関連するQ&A

  • javaのプログラムについて

    質問させていただきます // 数値積分 class Integral1 { public static void main(String[] args) { final int n = 100; // 区間数 final double a = 0; // 始点 final double b = 1; // 終点 final double h = (b-a) / n; // 区間の幅 double x, y; double S = 0; // Sを0で初期化 int i; // 区間 for(i = 1; i <= n ; i++) { // 区間1からnまで x = a + h * i; // 区分積分 y = Math.sqrt(1-x*x); // yを計算 S += y * h; } System.out.println("S = " + S + " 4S = " + 4*S); } } これは区分積分法で計算する数値積分のプログラムなのですが、 これをシンプソン法に改造したプログラムに直していただきたいのですが・・・ どなたかお願いします

  • 簡単なプログラムなんですが…

    C言語の簡単なプログラムなんですが、私のような初心者には良く分かりません… 出来るだけ詳しく教えていただけるとうれしいです。 下の2つのプログラムの作り方が理解できません。 (1)データ数nとn個のデータを入力して、その平均を求めるプログラム。 (2)(1)のプログラムに合計と標準偏差を計算して出力する機能を追加したプログラム。 C言語に詳しい方お願いします。

  • Nernstの式

    Na+/Ca2+の平衡電位を求める計算の説明文で またもや計算自体は解けて問題は正解だったのですがこの式の計算を求めるまでの手順の解説に躓きました。 Nernstの式を自然対数を常用対数に変換すると E_A = (58/z) log ([A]_o/[A]_i) となる。 ここでE_Na/Caを求めよう 1個のCaイオンに対してn個のNaイオンが移動するとし、一般に膜電位がEのとき、イオンAの電気化学ポテンシャル差⊿μ_Aは zF(E-E_A)で与えられる。 よって n⊿μ_Na= nF(E-E_Na) ⊿μ_Ca= 2F(E-E_Ca) (ここまでは理解できるのですが次です) ここでE=E_Na/Caのとき、両者が等しいから E_Na/Ca= (nE_Na-2E_Ca)/(n-2) となる。 という E_Na/Ca= (nE_Na-2E_Ca)/(n-2) はどうやって導出するのでしょうか。 このあと実際に計算してE_Naがおおよそ70mV、E_Ca=125mVより この差が 70*3-125*2=-40mVという計算は問題ありませんでしたが、この E_Na/Ca= (nE_Na-2E_Ca)/(n-2) をどうやって計算しているのかを教えてください。 いつもすみません。

  • プログラムを教えてください!

    レポートの質問です。 以下の問題のプログラムを作らなければいけないのですが、いろいろと調べてみてもまったくわかりません。 わかる方プログラム教えてください! 課題1 合同式法を用いて,区間[0,1] (区間[0,1)でも良い) の 一様乱数を100 万個生成し,以下を報告せよ.ただし,一様乱数の生成にはC 言語で自作したプログラムを用いること. (1a) 平均の数値計算結果 (1b) 標準偏差の数値計算結果 (1c) 一様乱数のヒストグラム.ヒストグラムは区間[0,1] を100 分割して 作成すること. 課題2 中心極限定理に基づく「間便法」を用いて,区間[0,1] (区 間[0,1)でも良い) の一様乱数から標準正規分布N(0,1)に従う正規乱数を100 万 個生成し,以下を報告せよ.ただし,正規乱数の生成にはC言語で自作したプ ログラムを用いること. (2a) 平均の数値計算結果 (2b) 標準偏差の数値計算結果 (2c) 正規乱数のヒストグラム.ヒストグラムは区間[-5, 5] を100 分割して 作成すること.

  • 粒子に働く力

    N個の粒子の位置ベクトルをr{N}とし、粒子iと粒子jの間の距離をr{ij}とする。 粒子間距離がrのときの二体ポテンシャルをφ(r)とするとき、全ポテンシャルエネルギーのV(N)はすべての粒子対について二体ポテンシャルの和で表せる。 (1)粒子iに働く力F{i}をV(N)(r{N})を用いて表せ。 (2)粒子jが粒子iに及ぼす力をF{ij}とするとき、粒子iに働く力F{i}を求めよ。 (3)(r{i}-r{j})・∇{i}r{ij}=r{ij}を導きなさい。 という問題をやっているのですが。 (1)はF{i}=-∇{i}V(N)(r{N}) であるというのはわかったのですが、残りの問題をどのように手をつけてよいかわかりません。(2)でF{ij}とF{i}がどのように結びつくのかを考えてみたのですが、全く結びつきません。(3)では何をしていいのかさえわからないのです。どうしたら解くことができるのでしょうか。

  • 統計力学の質問です

    エネルギーとして+εか-εしか取れないN個の粒子が 温度Tで熱平衡状態にある系について考えています。 エネルギーが+εの粒子の個数をN+ -εの粒子の個数をN-として M = N+ - N- と置きます。 このときN+及びN-を温度Tの関数として表せ、という問題です。 とりあえず分配関数などを計算したりしてみたのですが、なかなか解答に辿りつけません。 解法等をご教授いただけるとありがたいです。

  • C++で組んだプログラムの高速化について

    数値シミュレーションに興味があり、C++でプログラムを組んでみたのですが、 Visual Studio 2008でコンパイルした場合、計算に非常に時間がかかってしまいます。 もし計算速度を向上させる方法がございましたら、教えて頂けませんでしょうか? できるだけ無料かつ簡単な方法が望ましいです。 よろしくお願いいたします。

  • この計算式のプログラムを教えてください!

    プログラム初心者です。 Fortranを用いて Y=∫{e^{-λ(s-t)}}×b(t)dt という式のプログラムをつくりたいと思っています。 範囲は、0からsまで積分です。 数値積分にも色々なやり方があり、また、プログラムもまだ始めたばかりなのでよくわかりません。 どなたかこの式のプログラムを教えていただけないでしょうか? 文章だけでは分かりにくいとは思いますが、宜しくお願いいたします。

  • プログラムをおしえてください

    下記のプログラムが何を行なっているのか教えてください。 peogram test(input,output); var i,n,s,t:integer; u,v:real; begin read(n) s:=0; t:=0; i:=0; while i<=n do begin s:=s+i; t:=t+i*i; i:=i+1 end u:=s/n; v:=t/n; writeln('n=',n:3,'のときu=',u); writeln('n=',n:3,'のときv=',v); end. nには必ず整数が入力されるということが前提で、i、n、s、t の変数が作られ、結果の実行数値としてu,vが出力されることは わかるのですが、数値がs、t、iが0からどのように変化して どのような実行数値が出されるのかよくわからないので、その内容を 教えてください。よろしくお願いします。

  • 連続関数空間上の有界線型汎関数の近似

    B={[0,T]→R;conti}を有限区間[0,T]上の実数値連続関数の全体として、一様ノルムを入れてバナッハ空間とみなします。 [0,T]の任意有限個の時刻t_1,…,t_nと任意の実数ξ_1,…,ξ_nを固定して、 B∋w→ξ_1w(t_1)+ξ_2w(t_2)+…+ξ_nw(t_n) によってB上の有界線型汎関数が定まります。そこでこのタイプの汎関数を有限個の時刻のみで決まる汎関数と呼ぶことにします。 示したい問題は、B上の任意の有界線型汎関数φ∈B*に対して、有限個の時刻のみで決まる汎関数の列φ_nがあって、φに汎弱収束する(i.e.任意のw∈Bに対して、φ_n(w)→φ(w)が成り立つ)という命題です。 直感的には連続関数空間に一様ノルムを入れているので、可算個の点の情報だけで汎関数は決定されるべきですが、きちんと証明しようとすると躓きました。特に与えられたφに対してφを近似するようなξをうまく取ってくることができず証明が終わりません。たとえばBは可分なのでdense subsetを取り、その中からn個を取って、φ_nを作る、というようなことを考えたりしたのですが、φ_nのノルムの一様有界性が出なかったりで苦戦しています。このような方針はよくないのでしょうか。 ヒントでも構わないので、何かコメント頂けるとうれしいです。たぶんそれほど難しい問題ではないとは思うのですが...

専門家に質問してみよう