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

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

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

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

Q&A

1回答

3214閲覧

最小二乗法の解説をお願いしたいです。

rikoriko613

総合スコア10

C

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

0グッド

0クリップ

投稿2018/12/20 17:07

C言語で最小二乗法についてのサンプルがあったのですが、まだ勉強中で分からないので、説明して欲しいです。

#include <stdio.h>

// 最小二乗法の計算
void lsm(double x[],double y[], int N, double *a0, double *a1)
{
int i;
double A00=0 ,A01=0, A02=0, A11=0, A12=0;

for (i=0;i<N;i++) { A00+=1.0; A01+=x[i]; A02+=y[i]; A11+=x[i]*x[i]; A12+=x[i]*y[i]; } *a0 = (A02*A11-A01*A12) / (A00*A11-A01*A01); *a1 = (A00*A12-A01*A02) / (A00*A11-A01*A01);

}

int main()
{
double x[]={1.1,2.3,2.8,4.2,5.1};
double y[]={0.7,1.9,3.1,4.2,5.6};
double a0 = 0,a1 = 0;

// データの個数 int N = sizeof(x) / sizeof(x[0]); // 最小二乗法の計算 lsm(x, y, N, &a0, &a1); printf("a0=%f\na1=%f", a0, a1); return 0;

}

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

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

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

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

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

tiitoi

2018/12/20 17:12

具体的にはどこがわからないのでしょうか?
rikoriko613

2018/12/20 17:16

lsmが何なのかということと、 *a0 *a1の*の意味が分かりません!
guest

回答1

0

lsmが何なのかということと、

least square method (最小二乗法) の略です。
質問のコードは最小二乗法の中でも直線 y = a1 x + a2 に近似するパターンです。

最小二乗法の解説は こちら など見てください。

結論だけ言うと、

サンプル (????1,????1),(????2,????2),⋯,(????????,????????) が与えられたとき、直線を決める2つの係数 a1, a2 を次の連立1次方程式を解くことで求められます。

イメージ説明

それを lsm() の中でやっています。

*a0 a1のの意味が分かりません!

C/C++ は1つしか返り値として返せないので、代わりにポインタ経由で結果を返しています。

投稿2018/12/20 17:37

編集2018/12/21 04:45
tiitoi

総合スコア21956

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

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

fana

2018/12/21 01:46

左辺の行列の右下の要素(1)は,nであるような気がします.
tiitoi

2018/12/21 04:46

計算し直したらおっしゃる通り n でした。 ご指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問