Program som løser en andengradsligning ved brug af diskriminant.
Løsningen står nederst, men lad os bygge det op.
Vi skal bruge tre pakker
math til at beregne rødder
mathplotlib til at plotte vores graf
numpy til at generere x og y til grafen (det er bare nemmest med numpy :-)
Kopier nedenstående kode og kør den i Jupyter.
I plotdelen er de fleste kommandoer usynliggjort for python ved at jeg har sat # foran. Prøv at slette en # efter en og se hvad de gør i programmet.
Hvis du er træt af at indtaste værdier imens du prøver programmet så kan du sætte # foran input linjerne i begyndelsen og give den nogle faste værdier.
Python spørger efter koefficienterne med kommandoen "input" som åbner en kommandoprompt til at indtaste nogle tal.
Hvis c er positiv er løsningen komplex det tager programmet højde for.
import math
import matplotlib.pyplot as plt
import numpy as np
print('Beregning af en andengradsligning på formen ax^2 + bx + c = 0')
# Input coefficients a, b, and c from the user
a = float(input("Angiv koefficient a: "))
b = float(input("Angiv koefficient b: "))
c = float(input("Angiv koefficient c: "))
# Beregning af diskriminanten
discriminant = b**2 - 4*a*c
# Check om diskriminanten er positiv, negativ eller nul
if discriminant > 0:
# To reelle løsninger
root1 = (-b + math.sqrt(discriminant)) / (2*a)
root2 = (-b - math.sqrt(discriminant)) / (2*a)
print(f"To reelle løsninger: {round(root1,4)} og {round(root2,4)}")
elif discriminant == 0:
# En reel løsning
root = -b / (2*a)
print(f"En reel løsning: {root}")
else:
# Komplekse løsninger
real_part = -b / (2*a)
imaginary_part = math.sqrt(abs(discriminant)) / (2*a)
print(f"Komplekse løsninger: {real_part} + {imaginary_part}i og {real_part} - {imaginary_part}i")
# generere x-værdier til plot
xakse = np.linspace(-10, 10, 400) # bruger numpy til at generere 400 værdier fra -10 til 10
# beregner de passende y-værdier med udgangspunkt i andengradsligningen
yakse = a * x**2 + b * x + c
#plotgenerering
plt.plot(xakse,yakse)
#plt.plot(xakse,yakse,label=f'{a}x^2 + {b}x + {c} = 0 \n x01={round(root1,2)} \n x02={round(root2,2)}')
#plt.xlabel('x-akse')
#plt.ylabel('y-akse')
#plt.title('Andengradsligning')
#plt.axvline(x=root1,color='r',linestyle='--',lw=1)
#plt.axvline(x=root2,color='r',linestyle='--',lw=1)
#plt.grid()
#plt.legend()
plt.show()