🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

2回答

3892閲覧

C言語を使って最小二乗法で回帰直線を求めたい

yuharu

総合スコア3

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

1クリップ

投稿2020/12/08 08:45

C言語を使って最小二乗法で回帰直線を求めたいのですが、分かりません。

今ここまで書けております。

C

1#include <stdio.h> 2#include <math.h> 3 4double total(double *x, int n) 5{ 6 int j; 7 double ans=0.0; 8 for (j=0;j<n;j++){ 9 ans+=x[j]; 10 } 11 return ans; 12} 13double lsm(double *x, double *y, int n, double *a, double *b) 14{ 15 //Least square method 16 int j; 17 double xy[n],x2[n],y2[n]; 18 double xsum,ysum,xysum,x2sum,y2sum; 19 double denom,cc; 20 for (j=0;j<n;j++){ 21 xy[j]=x[j]*y[j]; 22 x2[j]=x[j]*x[j]; 23 y2[j]=y[j]*y[j]; 24 } 25 xsum=total(x,n); 26 ysum=total(y,n); 27 xysum=total(xy,n); 28 x2sum=total(x2,n); 29 y2sum=total(y2,n); 30 denom=n*x2sum-xsum*xsum; 31 (*a)=(n*xysum-xsum*ysum)/denom; 32 (*b)=(x2sum*ysum-xysum*xsum)/denom; 33 //Correlation coefficient 34 denom=sqrt((n*x2sum-xsum*xsum)*(n*y2sum-ysum*ysum)); 35 cc=(n*xysum-xsum*ysum)/denom; 36 return cc; 37} 38 39int main(void){ 40 // Your code here! 41 // lwsson 11-1 42 double x[10]={1,2,3,4,5,6,7,8,9,10}; 43 double y[10]={10.083,5.760,34.672,11.894,42.462, 44 37.928,17.584,54.281,61.774,74.931}; 45 46 double a,b,c; // Regression line y=ax+b. c=cor. coef. 47 c=lsm(x,y,10,&a,&b); 48 printf("y = (%f)x + (%f)\n",a,b); 49 printf("Correlation coefficient = %f\n" ,c); 50}

上記までのコードを変更して以下を求めたいです。

イメージ説明

答えは
イメージ説明
イメージ説明
となります。

どこをどう変更して入力したらいいのか分からないので、教えていただけると助かります。答えまでよろしくお願いします。

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

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

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

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

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

guest

回答2

0

これを入力すればいいと思います。
イメージ説明

投稿2020/12/19 19:07

編集2020/12/19 19:10
TaroToyotomi

総合スコア1449

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

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

fana

2020/12/21 02:40

> C言語を使って最小二乗法で回帰直線を求めたい という話なので, 最小二乗法で回帰直線を求める部分を別で実施した結果を用いるのでは 質問に対する回答とはならないように思えます.
TaroToyotomi

2020/12/24 14:24

fanaさんの回答と同じ意味で、yの列の中身を配列に設定すればという意味の回答でした。 グラフはプログラムを走らせた結果を確認する意味でダブルチェックになればいいなとの思いで適当に付けました。
guest

0

main関数内の配列yの内容を,その指示通りの値にしてやればよいだけなのではないでしょうか.

投稿2020/12/08 08:53

fana

総合スコア11990

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

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

yuharu

2020/12/08 08:56

どのように記述したら良いのか教えて頂けないでしょうか?よろしくお願いします。
episteme

2020/12/08 11:12 編集

y[i] = (int)(53 * y[i-1] + 29) % 199; コレ↑を i=1~9 でくりかえす。
yuharu

2020/12/08 11:02

繰り返すところからの記述を教えていただけないでしょうか?お手数おかけします。
episteme

2020/12/08 11:09 編集

for ループがわからんのですか? そんなはずないよね、関数 total, lsm を書いたんだから。
yuharu

2020/12/08 11:27

これはもともと指定されていたものになり、そこからの出題になります。
episteme

2020/12/08 11:33 編集

いや、自分で書いたものじゃないとはいえ、 関数 total のコード読めば for ループの回し方くらい理解できるでしょ。わからんなら教本読めばいい。 # てかアナタ以前に漸化式の質問し、僕の回答を理解したんじゃなかったけか? そこでも forループ使ってる。 https://teratail.com/questions/303347
fana

2020/12/08 11:39

提示コードみたいに yの値を全部を直値で書く(手計算で求めた結果をハードコーディングする)のでも良いのでは?(ダメなの?)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問