نحل المعادلة التربيعية ax² + bx + c = 0 في Python باستخدام cmath حتى ندعم الجذور المركبة. قبل القسمة على 2a نتحقق من a؛ فإذا ساوى صفرًا أصبحت المسألة خطية أو حالة خاصة. المدخلات هنا معاملات حقيقية محدودة، والكود تعليمي لا يمثل محللًا عدديًا متقدمًا لكل الأحجام.
الكود الكامل باستخدام Python 3
import cmath
from math import isfinite
def solve_equation(a, b, c):
if not all(isfinite(value) for value in (a, b, c)):
raise ValueError("Use finite coefficients.")
if a == 0:
if b != 0:
return (-c / b,)
return "Infinite solutions" if c == 0 else "No solution"
discriminant = b * b - 4 * a * c
denominator = 2 * a
if not isfinite(discriminant) or not isfinite(denominator) or denominator == 0:
raise ValueError("Coefficients exceed this example's numeric range.")
root = cmath.sqrt(discriminant)
return ((-b + root) / denominator, (-b - root) / denominator)
if __name__ == "__main__":
try:
a = float(input("a: "))
b = float(input("b: "))
c = float(input("c: "))
print(solve_equation(a, b, c))
except (ValueError, OverflowError) as error:
print("Invalid input:", error)المميز والجذور
نحسب المميز b² – 4ac. إذا كان موجبًا نحصل على جذرين حقيقيين، وإذا كان صفرًا يتكرر الجذر، وإذا كان سالبًا تعيد cmath قيمًا مركبة. ظهور +0j في جذر حقيقي مجرد تمثيل من نوع complex. للمعاملات 1 و5 و6 تكون الجذور -2 و-3.
ماذا يحدث عندما a يساوي صفرًا؟
إذا كان b غير صفري نحل bx + c = 0 مباشرة. وإذا تساوى a وb مع الصفر ننظر إلى c: الصفر يعني هوية لها حلول لا نهائية، وغير الصفر يعني تناقضًا دون حل. هذه الفروع تمنع القسمة على صفر وتوضح الفرق بين المعادلة الخطية والتربيعية.
الاختبار والدقة
جرّب 1 و0 و1 للجذرين i و-i، و1 و2 و1 للجذر المكرر -1، و0 و2 و-4 للحل الخطي 2. قارن القيم العشرية بهامش مناسب عند كتابة الاختبارات. معاملات ضخمة جدًا أو صغيرة جدًا قد تحتاج خوارزمية أكثر استقرارًا من الصيغة التعليمية المباشرة.
مصادر المثال السابق: programiz






