grafikcizer / app.py
hbulduk's picture
Update app.py
c193e41 verified
import gradio as gr
import matplotlib.pyplot as plt
import numpy as np
import sympy as sp
def plot_function(func_str):
# x ve y sembollerini tanımlıyoruz.
x, y = sp.symbols('x y')
try:
# Denklemde eşitlik işareti var mı?
if "=" in func_str:
parts = func_str.split("=")
if len(parts) != 2:
return "Hata: Denklem 'sol taraf = sağ taraf' formatında olmalıdır."
lhs, rhs = parts
lhs_expr = sp.sympify(lhs.strip())
rhs_expr = sp.sympify(rhs.strip())
# Denklem: sol taraf - sağ taraf = 0 şeklinde düzenlenir.
eq = lhs_expr - rhs_expr
# y'yi x cinsinden çözmeye çalışıyoruz.
sol = sp.solve(eq, y)
if not sol:
return "Hata: Denklemin y cinsinden çözümü bulunamadı."
expr = sol[0]
else:
# "=" yoksa girilen ifadeyi doğrudan y olarak kabul et.
expr = sp.sympify(func_str)
except Exception as e:
return f"Hata: Fonksiyon ifadesi geçersiz: {e}"
try:
# x değişkeni için numpy uyumlu fonksiyon oluşturuyoruz.
f = sp.lambdify(x, expr, modules=["numpy"])
except Exception as e:
return f"Hata: Fonksiyon dönüştürülemedi: {e}"
# x aralığı: -10'dan 10'a 400 eşit aralık.
x_vals = np.linspace(-10, 10, 400)
try:
y_vals = f(x_vals)
except Exception as e:
return f"Hata: Fonksiyon hesaplanamadı: {e}"
# Grafik çizimi
fig, ax = plt.subplots()
ax.plot(x_vals, y_vals, label=f"y = {sp.pretty(expr)}")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_title("Fonksiyon Grafiği")
ax.legend()
ax.grid(True)
return fig
iface = gr.Interface(
fn=plot_function,
inputs=gr.Textbox(lines=1, label="Fonksiyon Denklemi", placeholder="Örnek: 2y=3x+2 veya x**2+3"),
outputs=gr.Plot(label="Grafik"),
title="Fonksiyon Grafiği Çizici",
description="Fonksiyon denklemini giriniz. Örneğin, '2y=3x+2' girildiğinde y'nin x cinsinden çözümü alınarak grafiği çizilir. Fonksiyon ifadesinin Python sözdizimine uygun olmasına dikkat ediniz."
)
if __name__ == "__main__":
iface.launch()