🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

Q&A

1回答

1276閲覧

計算結果で文字に数値が代入されていない

yusaku_09

総合スコア4

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

0グッド

0クリップ

投稿2019/12/15 05:26

編集2019/12/15 05:46

前提・実現したいこと

pythonでループさせて連続で計算させたいです。
大学の研究でニュートン法を用いてある方程式を計算させたいと考えています。

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

ループさせて計算させている中でIという文字がでてきてしまい、計算が途中で止まってしまいます。 実行結果が以下のようになります。(100回計算させたいのですが、1回目の計算で以下のようになります。) i=1 f=1.0e+16 - (-0.647662078054225*(0.0448846892739288 + 0.0448245261889697*I)**2*(0.999999325352009 + 0.00201193628719176*I)**2 - 0.647662078054225*(0.0448245261889697 + 0.0448846892739288*I)**2*(0.999999325352009 - 0.00201193628719176*I)**2)/(-1.32285202687184e-16*(0.0448245261889697 + 0.0448846892739288*I)**2*(0.999999325352009 - 0.00201193628719176*I)**2 - 1.32285202687184e-16*(0.0448846892739288 + 0.0448245261889697*I)**2*(0.999999325352009 + 0.00201193628719176*I)**2 - 4.67698819353723e-18*(0.0448245261889697 + 0.0448846892739288*I)*(0.634340031478652 + 0.634340031478652*I)*(0.999999325352009 - 0.00201193628719176*I)**2*(0.999999325352009 + 0.00201193628719176*I) - 4.67698819353723e-18*(0.0448846892739288 + 0.0448245261889697*I)*(0.634340031478652 + 0.634340031478652*I)*(0.999999325352009 - 0.00201193628719176*I)*(0.999999325352009 + 0.00201193628719176*I)**2 - 4.67698819353723e-18*(0.0448245261889697 + 0.0448846892739288*I)*(0.0448846892739288 + 0.0448245261889697*I)**2*(0.634340031478652 + 0.634340031478652*I)*(0.999999325352009 + 0.00201193628719176*I) + 4.67698819353723e-18*(0.0448245261889697 + 0.0448846892739288*I)**2*(0.0448846892739288 + 0.0448245261889697*I)*(0.634340031478652 + 0.634340031478652*I)*(0.999999325352009 - 0.00201193628719176*I)) i=2

該当のソースコード

Python

1import sympy 2import math 3x=sympy.Symbol('x') 4L=sympy.Symbol('L') 5p=2200*10**-24 6a=math.pi*1-math.pi*0.66*0.66 7P=2*10**-23/0.1266 8c=27.8*10**9*2 9E=10**12 10I=math.pi/64*(2**4-1.32**4) 11r=(p*a*P*x**4-c*(p*a+P)*x**2)/((c-P*x**2)*E*I) 12B=math.sqrt(2)/2*r**(1/4) 13H=r*(sympy.cosh(B*L)**2*sympy.sin(B*L)**2+sympy.sinh(B*L)**2*sympy.cos(B*L)**2) 14dh=sympy.diff(H,x) 15i=0 16f=10.0**16 17L1=0 18for L1 in [0.1*x for x in range(1,101,3)]: 19 i=0 20 f=10.0**16 21 while i<=100: 22 f2=f-H.subs([(x,f),(L,L1)])/dh.subs([(x,f),(L,L1)]) 23 f=f2 24 i+=1 25 print('i={0}'.format(i)) 26 print('f={0}'.format(f)) 27 if i==100: 28 print(f)

試したこと

別の計算式で同じプログラムを試すとうまくいきます。
以下がうまくいったコードです。
import sympy
import math
x=sympy.Symbol('x')
L=sympy.Symbol('L')
p=220010**-24
a=math.pi
1-math.pi0.660.66
P=210**-23/0.1266
c=27.8
109*2
E=10
12
I=math.pi/64*(24-1.324)
r=(paPx**4-c(pa+P)x**2)/((c-Px**2)EI)
B=(-1
r)(1/4)
H=-4rsympy.sinh(B*L)sympy.sin(BL)
dh=sympy.diff(H,x)
i=0
f=10.0
16
L1=0
for L1 in [0.1*x for x in range(1,101,3)]:
i=0
f=10.0**16
print(L1)
while i<=100:
f2=f-H.subs([(x,f),(L,L1)])/dh.subs([(x,f),(L,L1)])
f=f2
i+=1
if i==100:
print(f)

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

開発環境はAnacondaのJupyterを用いています。

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

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

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

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

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

shiracamus

2019/12/15 05:37

タグからnumpyを削除してsympyを追加していただけますか?
yusaku_09

2019/12/15 05:47

間違えていました。初めて使用したのでわからないことが多々ありますがよろしくお願いします。
shiracamus

2019/12/15 06:09 編集

sympyの問題に思えるので sympy タグは指定した方がいいと思いますよ。 anacondaの問題ではなさそうなので、anacondaは不要かと思います。 文字コードの問題でもなさそうです。
guest

回答1

0

Iは虚数単位を示すシンボルなので,実数解が必要な場合は変数宣言時にx = Symbol('x', real=True)とすればOKです

投稿2021/10/07 09:52

dark-eater-kei

総合スコア1248

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問