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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

2回答

3892閲覧

Python sympyを用いた連立方程式について2点わからないことがあります。

mizumimizu

総合スコア25

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2018/09/04 13:05

以下のPythonソースコードは変数5つの5元連立方程式を解くものです。
実行すると解は以下のように表示されます。

[{a: 2.20873478523683, b: -3.06122464206139 - 1.35525271560688e-20I, c: 1.472
48985682455 + 0.e-20
I, d: 0.096, e: 0.144}, {a: -1.15104515778236 + 2.0328790
7341032e-20I, b: 2.53840859630394 - 2.71050543121376e-20I, c: -0.76736343852
1576 + 0.e-20I, d: 0.096, e: 0.144}, {a: 9.7309770392122 - 2.16840434497101e-
19
I, b: -15.5982950653537 + 0.e-22I, c: 6.48731802614147 - 0.e-21I, d: 0.09
6, e: 0.144}]

a,b,c,d,e の解は3組あるようです。
ただこの表示だと見づらいので3組の解を改行してわかりやすく表示したいのですが、
やり方がわかりません。
わかる方、ご教授願いたいです。

また上記の解を用いて別の式の展開を行うことはできないでしょうか?
(ex) a+b+c-0.62 = ?
exp2の式が0になるかを確かめたいです。
ただ連立方程式で出した解を別の式で扱う方法がわかりません。
こちらもわかる方は教えていただきたいです。

よろしくお願い致します。

Python

1from sympy import Symbol 2from sympy import solve 3from sympy import pprint 4 5a = Symbol('a'); 6b = Symbol('b'); 7c = Symbol('c'); 8d = Symbol('d'); 9e = Symbol('e'); 10 11exp1 = a+b+c-d*a*b-d*a*c-e*a*c-e*b*c+d*e*a*b*c-1; 12exp2 = a+b+c-0.62; 13exp3 = d+e-0.24; 14exp4 = d*a-e*c; 15exp5 = e-1.5*d; 16 17pprint(solve((exp1,exp2,exp3,exp4,exp5),dict=True)); 18 19

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

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

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

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

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

guest

回答2

0

表示についてだけ

王道な方法として、pprintモジュールを調べてみてください。

jsonモジュールのjson.dumpsの方が個人的には使いやすかったです。
indentのキーワードを適切に渡すことがポイントです。

投稿2018/09/05 01:45

mkgrei

総合スコア8560

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

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

0

ベストアンサー

(1)
解は複数のdictがリストに格納されておりますので、それぞれループを使って

Python

1result = solve((exp1,exp2,exp3,exp4,exp5),dict=True) 2for i, r in enumerate(result, start=1): 3 print("[{}]".format(i)) 4 for s in [a,b,c,d,e]: 5 print("{} = {} ".format(s, r[s]))

のようにするとよいのではないでしょうか。

(2)
結果を、単にsubs()を使って代入するだけかと思います。
result = solve((exp1,exp2,exp3,exp4,exp5),dict=True)
とした場合、1つ目の解はresult[0] に格納されておりますので、subs()を使い

Python

1f = a + b + c - 0.62 2r = f.subs(result[0])

で結果が得られます。

全ての解で確認したい場合は、(1)と同様ループを使って

Python

1f = a + b + c - 0.62 2for r in result: 3 print(f.subs(r))

で良いでしょう

投稿2018/09/04 23:43

編集2018/09/04 23:45
magichan

総合スコア15898

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

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

mizumimizu

2018/09/05 13:43

しっかりと理解することができました。 今回も本当にありがとうございました。 初心者の私からすれば教えていただいたコードは素晴らしかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問