• ベストアンサー

Javaの問題(初心者向け、やや計算あり?)

Javaの勉強中なのですが、以下のような問題が出ました。 ニュートンコーツの公式(のうちの台形公式)を用いて、y=xの2乗を0<=x<=1の区間で積分し、結果を表示するプログラムを作成せよ。刻み幅は任意に設定してよい。 …どのように解かれますか? さっぱりわからないのですが…。

  • Java
  • 回答数7
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • HarukaV49
  • ベストアンサー率53% (48/89)
回答No.6

y = f(x) において、x = x0, x1 (x0<x1)が作る台形の面積は、  (上底の長さ) = f(x0)  (下底の長さ) = f(x1)  (高さ) = x1 - x0 だから、 その面積は S = ( f(x0) + f(x1) ) * ( x1 - x0 ) / 2 ここで、f(x) = x^2 ならば  S = ( x0^2 + x1^2 ) * ( x1 - x0 ) / 2 これを、[0,1]の範囲で刻み幅を deltaX として加えていくと public double getArea( double deltaX ) {  double s = 0.0;  double x0 = 0.0;  for( double x1=deltaX; x1<=1.0; x1+=deltaX ) {   s += ( x0^2 + x1^2 ) * deltaX / 2   x0 = x1;  }  return s; } これで、中学生の知識で求めることができます。 なお、これはJavaのプログラミングの勉強には 全く相応しくない内容ですね!(^^;

technotris
質問者

お礼

有難うございました。とても参考になりました。

その他の回答 (6)

  • HarukaV49
  • ベストアンサー率53% (48/89)
回答No.7

#6です。 累乗計算の記号を書き換ええるのを忘れていました。 (誤) s += ( x0^2 + x1^2 ) * deltaX / 2 (正) s += ( x0*x0 + x1*x1 ) * deltaX / 2 以上、訂正してお詫び申し上げます。

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.5

>ANo.4さん >> 一応、台形の公式についてはわかります。中学生で習いますので。 >そりゃ多分勘違い。 やっぱり勘違いですかね?(^-^; 私はお年寄りなので、「今の中学は台形・シンプソンなんて教えるんだ~すごいな~」 と思ったりしてました(笑) 微分積分は高校2年で習った気がするし、偏微分は大学まで習わなかった様に思うんですけどね。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

> 一応、台形の公式についてはわかります。中学生で習いますので。 そりゃ多分勘違い。 数値積分の台形公式のことを問題ではいっているのではないかな? 数値積分(台形公式) http://maya.phys.kyushu-u.ac.jp/~knomura/education/numerical/text5/node1.html グラフの領域を台形で細かく区切ってその合計を計算することで 面積(=積分結果)を求めるということなんだけど。 ニュートン・コーツの公式 - Wikipedia http://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%88%E3%83%B3%E3%83%BB%E3%82%B3%E3%83%BC%E3%83%84%E3%81%AE%E5%85%AC%E5%BC%8F にも台形公式ってあるでしょう?

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.3

>プログラム部分だけでなく、考え方や計算式も含めてどのように解くか?という質問なのですが…。 だとしたらカテゴリ違いだと思います。数学とかのカテゴリではないでしょうか? ここは、JAVAカテゴリーなので、JAVAプログラムに関する質問をするところです。 設問に「結果を表示するプログラムを作成せよ」と書かれていますから、 googleで検索されたサンプルは正しいはず(例えばこんなサイト)なのに http://www.geocities.jp/java_sample_program/DaikeiSimpson.html 「全然違う」とおっしゃってる以上、このカテゴリでは手に負えない気がします。 数学関連のwikipediaでニュートン・コーツ を調べられた方がちかいのではないでしょうか?

noname#39970
noname#39970
回答No.2

>…どのように解かれますか? javaではなく質問者自体の脳で解く事はできる? もしできるというならその解法を書き出してごらん。 例えば長方形の面積 ・縦の辺と横の辺をかける これをプログラム化すれば良い。 1つの項目が複雑ならばそれを展開して同じように箇条書きしてプログラム化できるか試みる。

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

勉強中のあなたが「さっぱりわからない」ものなので、別に勉強しているわけでもない私たちがわかるわけがないんですが(笑) googleで検索キーを指定して[java ニュートン コーツ プログラム] でサンプルは出てきましたよ? 聞く前に調べる。調べる前に考察する。 この癖をつけないと、課題の意味が無いです。自力でなんとかする努力をしてください。

technotris
質問者

お礼

補足ですが…Javaを始めて1日目の例題ですので、多分、解答そのものはそれほど難しくないんだと思います。数学的な考え方(?)のところで躓いているのかもしれません…。

technotris
質問者

補足

あ…あのぅ……それらのサンプルは全然違うものなのですが…。 プログラム部分だけでなく、考え方や計算式も含めてどのように解くか?という質問なのですが…。 一応、台形の公式についてはわかります。中学生で習いますので。

関連するQ&A

  • 数値積分の使い方

    y=2x^2-4x^2+x+3のxの区間0~2までの積分を台形公式を使い計算するのですけど、 まずはy=2x^2-4x^2+x+3を積分するのですか? そしてその後の台形公式を使ってどのように求めるのですか?

  • 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); } } これは区分積分法で計算する数値積分のプログラムなのですが、 これをシンプソン法に改造したプログラムに直していただきたいのですが・・・ どなたかお願いします

  • 積分を台形則を用いて計算する

    プログラミングについての質問です。積分台形則 キーボードから係数a,b,c,d及び刻み幅dx、積分範囲[0,x]を入力し、 A:y=ax^3+bx^2+cx+d B:y=a(x+b)^2+d の積分を台形則、forループを使ってするプログラムなんですが、わからないのでヒントなどがありましたら教えてください。。

  • 台形公式とシンプソン公式

    次の積分を台形公式、シンプソン公式を用いて計算せよ。 ただし、刻みをh=2^-nとし、nと積分値の関係も求めよ。 ∫2~1 1/xdx 刻みの書き方がよくわかりません。それ以外は何とかできそうです。 どなたか教えていただければ幸いです。 因みに、n=1~6だそうです。

  • 社会基盤数理工学 演習

    1. 台形公式に基づく複合公式を用いて,次の定積分を計算せよ.なお,分点の刻み幅はh = 0.1 とする こと. J = (積分)Z 0から 1まで e^−x2 dx 2. 設問1. の定積分J を,Simpson の公式に基づく複合公式を用いて計算せよ.なお,小区間の数は n = 5 とすること. 3. 設問1. の定積分J を,Gauss の公式を用いて計算せよ.なお,積分点数はn = 2, 3 とすること.

  • Javaで数値解析

    Javaプログラミングで、 下記の条件で積分をしたいのですがうまくいきません。 分割数分の台形の面積合計を足していくのはわかるのですが、 答えが合わなくて・・・ どなたか解答お願い致します。 問題はこれです。 y=x^2 を 0から1の範囲で積分する というものです。 因みに積分結果は1/3(0.3333・・・)になるのですが・・・

    • ベストアンサー
    • Java
  • 矩形法プログラムの計算値と計算誤差の求め方

    下記の矩形法の計算値を求めるプログラムで、区間分割数nを10から100まで10ずつ増やして計算値を求めるプログラムを作成したいのですが、どのようにしたらいいのか分かりません。Java初心者なのでJavaプログラムが詳しい人は至急ご連絡をお願いします。 *ちなみにこの矩形法プログラムのの計算誤差も分かる人はお願いしたいのですが・・・・・・  計算誤差の求め方は    計算誤差=(計算値ー真値)/真値×100(%) (真値=0.68269とする) public class Kukei { static double f(double x) { // ここに任意の被積分関数を記述 double y = Math.exp(- x * x / 2) / Math.sqrt(2.0 * Math.PI); return y; } public static void main(String[] args) { double a = - 1.0, b = 1.0; // 積分範囲 int n = 100; // 区間分割数 double h = (b - a) / (double)n; // 分割幅 double s = 0.0; for (int i=0; i < n; i++) { s += f(a + i * h); } s *= h; System.out.println("区間分割数 =" + n); System.out.println("矩形法による計算値 =" + s); } }

    • ベストアンサー
    • Java
  • 【至急】BASICプログラムの問題(初心者)

    N88互換BASICというフリーソフトで作っています。 f(x)=x^4-7x^3-6x^2-4x+1の曲線とy=0の直線とで囲まれる面積を、x=0から10の範囲で近似的積分という問題です。 近似精度は10^-3以内。 シンプソン公式を用いて近似するとあります。 下記が手順です。 1、分割数zを入力。 2、dxの値を分割数から逆算して求める。(dx=「全体幅」/「2×分割数」) 3、FORNEXT文を用いて、各分割数区間毎にx座標を特定して放物線の面積を求める計算をし、その累積を求める。 4、求まった積分結果、そして答え「310」との誤差表示。 5、誤差が10^-3以内なら終了。それ以上なら1に戻る。 基礎的なコマンドは習いましたが、初心者なのでよくわかりません。説明不足でよくわからないとは思いますが、教えて頂けると嬉しいです。

  • PostScript言語で定積分の計算

    学校の課題で y=f(x) の変数xの区間 a<=x<=bの定積分の計算をやるためのプログラムをPostScript言語で書けという課題が出ました。 関数をfとし、台形則か中点則を使うとよい と書かれているのですが、数学が苦手で定積分の解き方すら理解できていません。 どのようにプログラミングすればいいのか、詳しくて大まかな手順と、プログラミングができた際に正しいか確認するための数字をいくつか、教えていただけないでしょうか? 手順と ○○と入力して実行すると××という結果が出る というのをいくつかお願いします

  • 台形公式について

    台形公式を使って、2*sqrt(1-x*x)の-1から1の積分の近似値を求めようと思うのですが、結果が違う気がします。おかしなところがありますか?また、皆さんの結果ではどういった結果が出てきますか? 台形公式のプログラムリスト double daikei(double N){ int k; double y,S,sum; sum = 0.0; for(k=0; k<=N; k++){ y = 4.0 * sqrt((k/N)*(1.0+(k/N))); if(k==0 , k==N){ S = (1.0/N) * y; } else { S = (2.0/N) * y; } sum = sum + S; } return sum; }