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

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

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

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

Python

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

Q&A

解決済

3回答

4994閲覧

以下の方程式の解で実部のみ、また絶対値を表示させる方法を知りたいです。

mizumimizu

総合スコア25

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/09/06 12:08

下記ソースコードは変数a,b,c,d,eの5元連立方程式を解くものです。
実行すると、
[1]
a = 2.20873478523683
b = -3.06122464206139 - 1.35525271560688e-20I
c = 1.47248985682455 + 0.e-20
I
d = 0.0960000000000000
e = 0.144000000000000
[2]
a = -1.15104515778236 + 2.03287907341032e-20I
b = 2.53840859630394 - 2.71050543121376e-20
I
c = -0.767363438521576 + 0.e-20I
d = 0.0960000000000000
e = 0.144000000000000
[3]
a = 9.7309770392122 - 2.16840434497101e-19
I
b = -15.5982950653537 + 0.e-22I
c = 6.48731802614147 - 0.e-21
I
d = 0.0960000000000000
e = 0.144000000000000

と解が表示されます。
a,b,cは虚部も含んだ複素数として算出されています。
ここでa,b,cの実部のみ、また絶対値をprintさせる方法を知りたいです。
ご存じの方は教えていただけないでしょうか。
よろしくお願い致します。

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 17result = solve((exp1, exp2, exp3, exp4, exp5),dict=True); 18for i, r in enumerate(result, start=1): #解の組を配列毎にわけている。 19 print("[{}]" .format(i)); 20 for s in [a,b,c,d,e]: 21 print("{} = {} ".format(s, r[s]));

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

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

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

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

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

guest

回答3

0

以下のような方法で実装しました.
(i)与えられた5次方程式のx^0~x^5までのそれぞれの係数をリストにまとめる.
(ii) (i)をもとにしてfor文で5次方程式の左辺を作る.
(iii)解を表示する.

蛇足かもしれませんが、一応実際の解も書きました.
(実際の解が長くなり、見づらくなる場合は消してください。係数によっては長くなる場合があります.)

また、今回解いた方程式の係数は質問欄にあるものとは異なります。

python

1from sympy import * 2from sympy import re as real 3x = Symbol('x') # 文字'x'を変数xとして定義 4 5numbers = [1,1,1,1,1,1] 6 7equation = 0 8for number in range(len(numbers)): 9 equation += numbers[number] * (x ** number) 10 11sol = solve(equation, x) # 解をsolに格納 12 13for number in sol: 14 print("実部 : " + str(real(number)),end = " ") 15 print("絶対値 : " + str(abs(number)),end = " ") 16 print("実際の解 : " + str(number))

<実行結果>
実部 : -1 絶対値 : 1 実際の解 : -1
実部 : -1/2 絶対値 : 1 実際の解 : -1/2 - sqrt(3)*I/2
実部 : -1/2 絶対値 : 1 実際の解 : -1/2 + sqrt(3)*I/2
実部 : 1/2 絶対値 : 1 実際の解 : 1/2 - sqrt(3)*I/2
実部 : 1/2 絶対値 : 1 実際の解 : 1/2 + sqrt(3)*I/2

投稿2018/09/07 02:40

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

absか、sympy.Absを使えばいいんじゃないですかね。

python

1from sympy import I, Abs 2print(Abs(I)) 3# 1

投稿2018/09/06 12:45

tachikoma

総合スコア3601

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

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

0

ベストアンサー

日頃sympyを使っていないので、詰めの甘い回答かもしれません。悪しからず。

実部を取得する

sympyのre関数を利用します。

Python

1>>> from sympy import I 2>>> from sympy import re as real 3>>> 4>>> num = 1 + 3 * I 5>>> print(type(num), num) 6<class 'sympy.core.add.Add'> 1 + 3*I 7>>> 8>>> real(num) 91

絶対値を取得する

Python組み込み関数のabsに放り込めば計算してくれます。

Python

1>>> abs(num) 2sqrt(10)

投稿2018/09/06 12:40

LouiS0616

総合スコア35660

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

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

mizumimizu

2018/09/08 01:59

わかりました。importしなければいけなかったんですね。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問