from sympy import symbols, summation, oo
from sympy import *
from sympy.abc import x, y, i, n
from sympy import symbols, cos, nsolve
from sympy import Function, dsolve, Derivative, Eq, symbols


# 1. 総和と極限
print("1. Sum and Limit")
x, i = symbols('x i')
result = summation(x**i, (i, 0, oo))
print("summation(x**i, (i, 0, oo)):", result)
#print(Sum(x**i, (i, 0, oo)))

L = Limit(sin(x)/x, x, 0)
print("Limit(sin(x)/x, x, 0):", L.doit())

# 2. 微分と積分
print()
print("2. Diff and Integral")
print("diff(sin(x)*exp(x), x):", diff(sin(x)*exp(x), x))
print("integrate(x**2 * sin(x), x):", integrate(x**2 * sin(x), x))

# 3. 式変形
print()
print("3. Simplify & Expand")
expr = (x**2 - 1)/(x - 1)
print("cancel (x**2 - 1)/(x - 1):", cancel(expr))
print("expand((x + 1)**2):", expand((x + 1)**2))
print("factor(x**2 + 2*x + 1):", factor(x**2 + 2*x + 1))

# 4. 代入と関数
print()
print("4. Substitution and Piecewise")
print("(x**2 + 3).subs(x, 2):", (x**2 + 3).subs(x, 2))
pw = Piecewise((1/(1 - x), Abs(x) < 1), (Sum(x**i, (i, 0, oo)), True))
print("Piecewise((1/(1 - x), Abs(x) < 1), (Sum(x**i, (i, 0, oo)), True):", pw)

# 5. 方程式と解
print()
print("5. Equations")
eq = Eq(x**2 - 2, 0)
print("solve(Eq(x**2 - 2, 0), x):", solve(eq, x))

# 6. フーリエ・ラプラス変換
print()
print("6. Transforms")
t, s = symbols('t s')
f = exp(-t)
print("laplace_transform(exp(-t), t, s, noconds=True):", laplace_transform(f, t, s, noconds=True))

# 7. Series展開
print()
print("7. Series")
print("series(exp(x), x, 0, 5):", series(exp(x), x, 0, 5))

# 8. 数値解
print()
print("8. Solve equation")
x = symbols('x')
expr = cos(x) - x
sol = nsolve(expr, x, 1.0)  # 初期値 1.0 から探索
print("nsolve(cos(x) - x, x, 1.0):", sol)  # → 0.739085133215...

# 9. 常微分方程式
print()
print("9. Solve differential equation")
x = symbols('x')
y = Function('y')
# dy/dx + y = 0
ode = Eq(y(x).diff(x) + y(x), 0)
sol = dsolve(ode, y(x))
print("dsolve(Eq(y(x).diff(x) + y(x), 0), y(x)):", sol)  # y(x) = C1 * exp(-x)
