ここから本文です

1…x:3.5 y:17.6 2…x:4.9 y:32.1 3…x:4.1 y:26.8のような表があり...

kaz********さん

2007/11/1317:08:34

1…x:3.5 y:17.6 2…x:4.9 y:32.1 3…x:4.1 y:26.8のような表があります。

yをxのm次式で近似するプログラムを行列を用いて作成し、二次式と三次式(y=ax^2+bx+c,およびy=ax^3+bx^2+cx+d)の係数を求めよ。
このプログラムの作成を教えてください。お願いします。

補足連立方程式を解くプログラムの作成を教えて下さい。

閲覧数:
1,918
回答数:
1
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

kts********さん

編集あり2007/11/1919:22:48

これは、最小二乗法と呼ばれる方法で解くことができます。
http://ja.wikipedia.org/wiki/%E6%9C%80%E5%B0%8F%E4%BA%8C%E4%B9%97%E...

ただ、「行列を用いて」といわれても、知恵袋上では難しすぎます。
ブリーフケースにアップロードしました。

Word形式
http://briefcase.yahoo.co.jp/bc/kts2371148/vwp2?.tok=bc.1ZCaB1Ij.1K...

TIFF形式(1つのファイルで2ページあります)
http://briefcase.yahoo.co.jp/bc/kts2371148/vwp2?.tok=bc.1ZCaBkvMFX0...

上記リンクをクリックした後、現れたアイコンをクリックしても表示されますが、満足のいく表示ではありません。
上記リンクをクリックしたら、右クリックして「対象をファイルに保存」で自分のパソコンに保存してからご覧になって下さい。
A4の紙に印刷してみてもいいでしょう。

これで、何をすればいいかわかりましたでしょうか?
行列のせいで頭がこんがらがるようでしたら、補足下さい。
(でも、私が追記できる余裕があるかはわかりません。)


「プログラムの作成を教えて下さい」とのことですが、
その点についてはもう一度質問を立ち上げた方がいいかもしれません。
そのときには、
「連立方程式を解くプログラムの作成を教えて下さい。
 何かコツなどありますでしょうか?
 使用言語は***です。」
などと質問するとよいでしょう。


──────────────

例として、次の方程式を考えます。

0x + 2y + 1z = 7
2x + 1y - 2z = -4
-x + 3y - 2z = -1

係数だけを書き出すと、こうなります。

0 2 1 | 7
2 1 -2 | -2
-1 3 -2 | -1

人間であれば、手のつけやすいところから計算すればいいのですが、
コンピュータは馬鹿正直ですから、言われたことしかしません。
それで、こうすれば絶対に解ける、というワンパターンの解法を教えてあげなければなりません。
その場合の解法は以下のようになります。

(第1段階)

まず、1列目の中で、絶対値が最も大きいものを選びます。(2行目ですね)
そして、その行と1行目を入れ替えます。(1行目と2行目を入れ替えます)

2 1 -2 | -2
0 2 1 | 7
-1 3 -2 | -1

このように、1行目の1列目に、絶対値が最も大きいものをもってきます。
なお、この場合、1行目の1列目の要素を「ピボット」といいます。

次に、ピボットを1にするため、1行目をすべて2で割ります。

1 1/2 -1 | -1
0 2 1 | 7
-1 3 -2 | -1

それから、1行目を -0 倍して2行目に加え、1行目を -(-1) 倍して3行目に加えます。

1 1/2 -1 | -1
0 2 1 | 7
0 7/2 -3 | -2

(第2段階)

第2段階は、1行目を無視して、2行目以降を考えればOKです。
2列目の中で(つまり、2 と 7/2 の中で)絶対値が最も大きいものを選びます。
(3行目になります。)
それで、2行目と3行目を入れ替えます。

1 1/2 -1 | -1
0 7/2 -3 | -2
0 2 1 | 7

第2段階では、2行目の2列目の要素がピボットになります。
ピボットを1にするため、2行目をすべて 7/2 で割ります。

1 1/2 -1 | -1
0 1 -6/7 | -4/7
0 2 1 | 7

そして、2行目を -2 倍して3行目に加えます。

1 1/2 -1 | -1
0 1 -6/7 | -4/7
0 0 19/7 | 57/7

(第3段階)

第3段階は、2行目までを無視して、3行目を考えればOKです。
もう対象行は1行しかありませんので、3行目の3列目の要素がピボットになります。
ピボットを1にするため、3行目をすべて 19/7 で割ります。

1 1/2 -1 | -1
0 1 -6/7 | -4/7
0 0 1 | 3

(最終段階)

連立方程式の形に戻すと、

x + (1/2)y - z = -1
 y - (6/7)z = -4/7
 z = 3

となります。あとは順次代入すれば、x,y,z の値が求まります。


上記の計算の中で、「絶対値が最も大きいものを選ぶ」とありますが、これには理由があります。
 ・0で割ることはできない
 ・0に近い数の場合、その数で割って計算すると、切り捨てによる誤差が出やすい
コンピュータの場合、分数でそのまま計算することは普通しませんので、どうしてもこうなります。
それで、上記のような事態を防ぐために、絶対値が最も大きいものを選び、
それをピボットにするために行交換を行うわけです。
また、今回は3変数なので3段階+最終段階となりますが、
10変数なら10段階+最終段階となります。


なお、最小二乗法について私が作成したファイルは、たぶん合っていると思うものの、
間違いがある可能性もありますので、ご了承下さい。

それにしても、ここまでに書いた事柄はすべて授業で何らかの形で説明があったはずなのですが…

この回答は投票によってベストアンサーに選ばれました!

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる