0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「FEniCS と sympy の違いを教えて下さい。」をAI先生に聞きました。

Last updated at Posted at 2025-05-05

・(2025-05-05) FEniCSをインストールしていません。

(本日の)ChatGPT先生へ

質問リスト

# 質問リスト
1. FEniCS と sympy の違いを教えて下さい。
2. 同じ問題を FEniCS と SymPy でどう扱うかの比較例も作成できますか?
3. 私の質問をMarkdown形式でリスト化して出力して。Markdown形式でリストからアスタリスクは削除して。1行目に、# 質問リスト の文字を出力して。最後の質問も追加して下さい。追番を追加して下さい。Markdown形式で。

(回答抜粋)

...
では、簡単な偏微分方程式を題材に、SymPy と FEniCS でどのように扱い方が異なるかを比較してみましょう。

題材: ポアソン方程式

1. SymPy による厳密解の計算

from sympy import symbols, Eq, sin, pi, dsolve, Function, diff

x = symbols('x')
u = Function('u')
f = pi**2 * sin(pi * x)

# -u''(x) = f(x) という微分方程式
ode = Eq(-diff(u(x), x, x), f)

# 境界条件を含めて解く
sol = dsolve(ode, u(x), ics={u(0): 0, u(1): 0})
print(sol)

2. FEniCS による数値解

from fenics import *
import numpy as np
import matplotlib.pyplot as plt

# メッシュ生成
mesh = UnitIntervalMesh(32)

# 関数空間の定義
V = FunctionSpace(mesh, 'P', 1)

# 境界条件 u=0
u_D = Constant(0)
def boundary(x, on_boundary):
    return on_boundary
bc = DirichletBC(V, u_D, boundary)

# 試験関数と未知関数
u = TrialFunction(V)
v = TestFunction(V)

# 右辺と弱形式
f = Expression('pow(pi,2)*sin(pi*x[0])', degree=4)
a = dot(grad(u), grad(v)) * dx
L = f * v * dx

# 解を求める
u_sol = Function(V)
solve(a == L, u_sol, bc)

# 結果を可視化
plot(u_sol)
plt.show()

どちらも「ポアソン方程式を解く」という点では同じですが、目的と解の形式がまったく違うことが分かります。
他の方程式や2次元の例なども見てみたいですか?

難しくなってきたので、中断します。

Gemini先生へ

copilot先生へ

いつもの? sympyの実行環境と 参考のおすすめです。

(テンプレート)

いつもと違うおすすめです。

Qiita内

wikipedia

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?