Files
DTU-Noter/Diskret Mat/ipynb filer/test.py

58 lines
1.8 KiB
Python

from sympy import *
def check_injective_surjective(func, var, domain, codomain):
x, y = symbols('x y')
# Check if the function is well-defined
outputs = {}
for val in domain:
output = func.subs(var, val)
if output in outputs:
# If the same output occurs for different inputs, it's not well-defined
if outputs[output] != val:
return "The function is not well-defined."
else:
outputs[output] = val
# Check injectivity
injective = True
for val1 in domain:
for val2 in domain:
if val1 != val2:
if func.subs(var, val1) == func.subs(var, val2):
injective = False
break
# Check surjectivity
surjective = True
for c_val in codomain:
try:
solutions = solve(Eq(func, c_val), var)
if not any(s in domain for s in solutions):
surjective = False
break
except:
surjective = False
break
# Results
if injective and surjective:
return "The function is bijective (both injective and surjective)."
elif injective:
return "The function is injective only."
elif surjective:
return "The function is surjective only."
else:
return "The function is neither injective nor surjective."
# Define the function and its domain/codomain
x = symbols('x')
func = Piecewise((2*x, x >= 0), (-2*x-1, x < 0))
domain = range(-20, 20) # For example, integers from -20 to 20
codomain = range(0, 40) # Adjusted codomain to include all possible outputs
result = check_injective_surjective(func, x, domain, codomain)
print(result)
print("please double check it yourself")