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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2567閲覧

掃き出し法により連立方程式を解く際のエラー

tkmoly

総合スコア1

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/05 16:10

前提・実現したいこと

連立方程式を解くプログラムをpythonで実装したい。

発生している問題・エラーメッセージ

連立方程式を解くプログラムをpython3で作っていたところ、一部の計算(具体的には以下に書いてある部分)が合わず自分の力では原因がわからなかったため質問させていただきました。単純な質問で申し訳ありませんがご教授お願い致します。

該当のソースコード

python

1def hakidashi(A): 2 #i列目について掃き出し #上三角行列をつくる 3 for i in range(3): 4 temp = A[i][i] 5 print(temp) 6 for k in range(i,5): 7 print(A[i][k]) 8 A[i][k] = A[i][k] / temp#引く行の頭を1に 9 print(A) 10 for j in range(i+1,4): 11 temp = A[j][i] 12 for k in range(5): 13 A[j][k] -= A[i][k]*temp 14 print(A) 15 16 #r,a,b,cを求める 17 r = A[3][4]/A[3][3] 18 c = A[2][4]-r*A[2][3] 19 b = A[1][4]-c*A[1][2]-r*A[1][3] 20 a = A[0][4]-b*A[0][1]-c*A[0][2]-r*A[0][3] 21 return r,a,b,c 22 23A = np.array([[8,1,1,1,0],[1,1,7,8,4],[1,7,-1,4,-4],[1,8,4,1,2]])

試したこと

上のプログラムのprintの結果を確認したところ二行目までの掃き出しはできていますが三行目で以下のような結果となり計算が合わなくなっています。A[i][k] = A[i][k] / temp の部分を A[i][k] = float(A[i][k]) / tempとしても同様の結果となりました。

-50 #tempの値
-50 #A[i][k]の値
[[ 1 0 0 0 0] 
[ 0 1 7 8 4]
[ 0 0 1 -52 -32]
[ 0 0 -52 -63 -30]]
-52
[[ 1 0 0 0 0]
[ 0 1 7 8 4] 
[ 0 0 1 1 -32] #-52/-50で1.04となるはず..
[ 0 0 -52 -63 -30]]
-32
[[ 1 0 0 0 0]
[ 0 1 7 8 4]
[ 0 0 1 1 0]
[ 0 0 -52 -63 -30]]
[[ 1 0 0 0 0]
[ 0 1 7 8 4]
[ 0 0 1 1 0]
[ 0 0 -52 -63 -30]]
[[ 1 0 0 0 0]
[ 0 1 7 8 4]
[ 0 0 1 1 0]
[ 0 0 -52 -63 -30]]
[[ 1 0 0 0 0]
[ 0 1 7 8 4]
[ 0 0 1 1 0]
[ 0 0 0 -63 -30]]
[[ 1 0 0 0 0]
[ 0 1 7 8 4]
[ 0 0 1 1 0]
[ 0 0 0 -11 -30]]
[[ 1 0 0 0 0]
[ 0 1 7 8 4]
[ 0 0 1 1 0]
[ 0 0 0 -11 -30]]

補足情報(FW/ツールのバージョンなど)

jupiter notebook
ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

問題点

配列 A の型が int になっているため、除算が切り捨て除算になっています。
dtype=float を指定してください。

1 / 2 = 0 # int の除算 余りは切り捨て 1.0 / 2.0 = 0.5 # flaot の除算

python

1A = np.array( 2 [[8, 1, 1, 1, 0], [1, 1, 7, 8, 4], [1, 7, -1, 4, -4], [1, 8, 4, 1, 2]], dtype=float 3)

あと配列は4行あるので、

diff

1- for i in range(3): 2+ for i in range(4):

になると思います。

投稿2020/09/05 21:47

tiitoi

総合スコア21956

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

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

tkmoly

2020/09/06 11:13

なるほど、配列ごとキャストするのですね。勉強になりました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問