• ベストアンサー

至急教えてください!!

質問したのですが、初心者すぎて何を言われているか分からないので、1部取り出しました。 和の二乗と二乗の和 この二つの和を求めたいです。 プログラム途中からで$X、$Y、$ndataは既に使われています。 my $X = $x[$ndata] my $Y = $y[$ndata] my $sg =0; my $sg1 =0; my $sg2 =0; for($x; $x < $ndata;$x++;){ $sg1 = $sg1 + ($X)**2; $sg2 = $sg2 + ($X); } $sg = $ndata * $sg1 - ($sg2)**2; これが前に質問したものです。 ​http://oshiete1.goo.ne.jp/qa5603956.html​ できれば間違っているところを直したプログラムを書いていただけると嬉しいです。それと前に質問した中で、他にも違うところがあったら直していただけると助かります。

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

  • ベストアンサー
  • kuroizell
  • ベストアンサー率55% (95/170)
回答No.2

え・・・っと @xにいくつかの数値が入っていて、その和の二乗&二乗の和の合計を求めるのでしょうか? 最初の2行(行末の;が抜けてますよ)は削除して、$ndataの存在は忘れて、 foreach my $X (@x) {  #配列@xに含まれる各数値を$Xに代入して $sg1 = $sg1 + $X ** 2;  #二乗の和 $sg2 = $sg2 + $X;  #和(後で二乗する) } $sg = $sg1 + $sg2 ** 2;  #二乗の和&和の二乗の合計 こういう感じではないかと推測します。

noname#108711
質問者

お礼

ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • t-okura
  • ベストアンサー率75% (253/335)
回答No.4

> 間違っているところを直したプログラムを書いていただけると嬉しい ということで、プログラムを作ることが目的ではなく最小二乗法を 使ってデータ処理をしたいのだと思いました。 「perl 最小二乗法」で検索すると利用可能なプログラムがすぐに 見つかりますよ。提示されたプログラムは似ているようで、 計算式が違っているような気がします。

noname#108711
質問者

お礼

そうですそうです!! ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。
回答No.3
noname#108711
質問者

お礼

これ見たんですけれど、よく分からなかったんですね・・・ ありがとうございました

全文を見る
すると、全ての回答が全文表示されます。
noname#108428
noname#108428
回答No.1

Perlの問題の前に、日本語の問題をクリアしましょう。 > 和の二乗と二乗の和 > この二つの和を求めたいです。 まず「和の二乗」とは「何と何の和、の二乗」を意味するのか。 次いで「二乗の和」とは「何の二乗と、何を足した和」であるのか。 また「この二つの和」の一方は、後者の「二乗の和」と 推測されますが、もう一方は何であるのか。 その辺りが全く不明です。 つまり何をしたいのかが分からないので、 貴殿の書いたコードが、貴殿の意図と違うのかどーかも判断できません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • これは動いてくれますか??

    最小二乗法のプログラムを作ってみたのですが、 これで動きますか?? データを読みとった後から、つまり途中からなのですが・・・ $ndata、$x,$yはデータから読み取った値でこの前で使われています。 #!/usr/bin/perl # test1.pl use strict; use warnings; my $X = $x[$ndata] my $Y = $y[$ndata] my $sg =0; my $sg1 =0; my $sg2 =0; for($i; $i < $ndata;$i++;){ $sg1 = $sg1 + ($X)**2; $sg2 = $sg2 + ($X); } $sg = $ndata * $sg1 - ($sg2)**2; my $a =0; my $a1 =0; my $a2 =0; my $a3 =0; my $a4 =0; for($i; $i < $ndata;$i++;){ $a1 = $a1 + ($X)**2; $a2 = $a2 + ($Y); $a3 = $a3 + ($X); $a4 = $a4 + ($X)*($Y); } $a = ( $a1*$a2 - $a3*$a4 ) / $sg my $b =0; my $b1 =0; my $b2 =0; my $b3 =0; my $b4 =0; for($i; $i < $ndata;$i++;){ $b1 = $b1 + ($X)*($Y); $b2 = $b2 + ($X); $b3 = $b3 + ($Y); } $b = ( $ndata*$b1 - $b2*$b3) / $sg $Y = $a + ($b * $X) my $sgy =0; my $sgy1 =0; my $sgy2 =0; for($i;$i < $ndata;$i++){ $sgy2 = $sgy2 + ($Y-$a - $b*$X)**2 } $sgy1 =$sgy2 /($ndata - 2) $sgy = sqrt( $sgy1 ); my $sga =0; my $sgb =0; $sga = $sgy * sqrt( $a1 / $sg ) $sgb = $sgy * sqrt($ndata / $sg ) print "パラメータA=$a,パラメータB=$b./n"; print "Aの誤差は$sga、Bの誤差は$sgb./n";

  • 至急お願いします。数学の問題です。

    次の関数をy=a(xーp)2乗+qの形に変形しなさい。 y=3x2乗ー6x+5 この問題の途中式と答えを宜しくお願いします。

  • 最小二乗法の分散の求め方

    http://oshiete1.goo.ne.jp/qa3077638.htmlに関連しての質問です。 例えば、y=Xβ+εに関して最小二乗解を求めると b = [ nΣ(xi yi) - (Σxi) (Σyi)]/[ nΣ(xi^2) - (Σxi)^2 ] となります。ここから分散を求めるためにはどうすればよいのでしょうか?教科書を引っ張ってみると求め方の行列の式しか書いていなくいまいちピンときません(確かに計算すれば正しい結果を得られるようですが)。具体的にこの式だけを使って分散を求めるということはできないのですか?

  • 至急!助けて下さい。プログラミングJava

    明日までの大学の課題が、わかりません。 どなたか教えてください。書き方が、わかりません。言語はJavaです。 よろしくお願い申し上げます。 1.条件分岐 整数d,xをキーボードから入力させ、 dとzの差の大きさ(絶対値)を計算し、結果を表示するプログラムを作りなさい。 2.繰り返し 整数qcをキーボードから入力させ、1からqcまでの整数を全て表示させるプログラムを作りなさい 3.式 式y=xの二乗+6x+10の値を、x=13から21まで、一つづつ変化させた時のyの値を表示しなさい。 4.和 1から58までの和1+2+3+….+58をプログラムを作って求めなさい。 5.乱数 乱数関数rnd()を使って、変数wgに0~383までの適当な数値を代入し、その結果を出力しなさい。 6.円を描く for文を使って、適当な位置に半径17の赤い円を、87個だけ描きなさい。 7.余り 変数qeに整数を入力させ、その変数qeが6で割り切れたら「割り切れる」と表示し、それ以外は「割り切れない」と表示するプログラムを作りなさい。 *ヒント %演算子で割った余りが求められる。 例えば、5%3は2となる。 8.break文 変数bjに0から1000までの乱数を作っては代入することを繰り返し、bjの値が900以上になったら繰り返しを止めて、bjの値を出力するプログラムを作りなさい。 9.カウント 1から1076までの整数の中で、8で割り切れる数がいくつあるかカウントしてその数を表示しなさい。 以上です。 どうかお助け下さいm(__)m

  • Cでのファイルからの入力およびファイルへの出力

    こんばんわ。質問があります。Cでのファイルの入出力についてなんですが、「fscanf」と「fprintf」を用いてあるデータファイルからデータを取り込んで処理をしてファイルに書き出すプログラムを作成したのですが、私が作成したプログラムの場合、まずfscanfでファイルをすべて読み込んでしまって、それから処理をして書き出すというプログラムなのですが、この方法ではなく、はじめに最初の1行だけを読みこんでその1行だけを処理して書き出し、次に2行目だけを読み込んで処理して書き出し、そして3行目を読み込んで処理・・・・という風に1行ごとに読み込みおよび書き込みを行っていくプログラムを作成したいのですがどのようにプログラムを組んでよいのか分かりません。アドバイスがいただけると幸いです。よろしくお願いいたします。 ちなみに私が作成したプログラムは下記のようなものです。 #include <stdio.h> #define NDATA 10000 #define NMAX 40 main() { double x[NDATA], y[NDATA], z[NDATA]; double xx[NDATA], yy[NDATA], zz[NDATA]; int i, n=0 FILE *in_file, *out_file; char in_filename[NMAX], out_filename[NMAX]; printf("Input filename: "); scanf("%s", in_filename); in_file = fopen(in_filename, "r"); while(fscanf(in_file, "%lf %lf %lf", &(x[n]), &(y[n]), &(z[n])) != EOF) n++; fclose(in_file); for(i=0; i<n; i++) xx[i] = x[i]*y[i]; yy[i] = y[i]*z[i]; zz[i] = z[i]*x[i]; printf("Output filename: "); scanf("%s", out_filename); out_file = fopen(out_filename, "w"); for(i=0; i<n; i++) fprintf(out_file, "%f %f %f\n", xx[i], yy[i], zz[i]); fclose(out_file); }

  • 数Aの問題を教えてください!

    X+Y=6、XY=1、X>yとするとき、次の値を求めよ X二乗+Y二乗 (X-Y)二乗 X(二乗)ーY(二乗) 二乗(ちっちゃい2)の打ち方がわからず、わかりにくくてすみません 答えが載ってなくて困っています。途中式もあわせて教えていただけるとうれしいです よろしくお願いします。

  • 微分やってるんですが

    http://oshiete1.goo.ne.jp/qa4924053.html 大したことじゃないかもしれませんが、 y=(1x^-5/5)+1/x^2 dy/dx=(1/5)×((-5)x^-6)-2x^-3 これはわかりやすいように()を余分に(-5)x^-6につけましたが本当は()は外にはついてません。 それで思ったんですが-5になんで()つけてるんですか? うちの学校はここまでで展開とかいらないって言われたからここまでで答えにしていいんですが、()つけなきゃいけないんですか?

  • 数学 A

     x2乗+xy-6y2乗+5x+35y-36  の計算で途中の式が、  x2乗+x(y+5)-(3y-4)(2y-9)  になるのですが、その後の  (x+3y-4)(x-2y+9)  になるのはどうしてなのでしょうか?  教えてください。。     よろしくお願いします。

  • 垂直なベクトルは…

    ベクトルa=(2,1)に垂直で、大きさ√5のベクトルuを求めなさい。 これはまず、ベクトルuの成分を(x,y)とする。 aとuは垂直であるから、内積a・u=0である よって 2x+y=0…(1) またuの大きさが√5であるから x^2 + y^2=5…(2) (1)と(2)が分からないのですが… (1)は見た感じ、aとuのx成分y成分それぞれの積の和なんでしょうか…?a⊥b→a・b=0 まではわかりますが…。 また何かほかに公式があるのでしょうか…? (2)「大きさ」が√5なわけだから、「大きさ」では向きが分からないから、無理やり2乗すれば 正方向になるから、2乗したもの=5 という風にやっているのでしょうか? ところでベクトルの2乗って、大きさ3のベクトルを2乗すると3^2 の大きさになる、と考えていいのでしょうか? lal=3 のときlal^2=a・a=lallalcos0=9 と考えられるしよさそうですけど…。 けど、ベクトルu=(x,y)を2乗すると…?x^2 +y^2=(√5)^2 x成分y成分それぞれ2乗してそれらの和が、元のベクトルの大きさの2乗に等しい…?なんか混乱してきました…。 初歩的なことですが、すみません…。 *→は上につけれなかったので仕方なく省略させてもらいました…。

  • 公式による乗法がわかりません><

    公式による乗法で (X/3-y/3)二乗という問題でこの途中式が (X/2)二乗-2×(X/2)×(y/3)+(y/3)二乗となるんですが なぜですか????? どこをどうやってかけてこうしたら・・・・のように教えていただけたらうれしいです><