diff --git a/derive_and_min-max.py b/derive_and_min-max.py index 3cb9b26aa274803e50fd3e9aea0118f59f809e77..9c2e995ab33814463e98f1fa518548bb0808a979 100644 --- a/derive_and_min-max.py +++ b/derive_and_min-max.py @@ -1,6 +1,7 @@ from rf_methods import rec_bisection, rec_regula_falsi, iter_bisection, \ iter_regula_falsi from Dual_Numbers import Dual_Number +from typing import Callable import numpy as np @@ -46,41 +47,39 @@ import numpy as np # return h(Dual_Number(x, 1)) -def P(x: Dual_Number, y: Dual_Number) -> float: +def A(x: Dual_Number, y: Dual_Number) -> float: return (3 * (x * x) * y + 2 * x * (y * y) - x * y + 2 * x - 1).d -def delPdelx(x: float, y: float) -> float: - return P(Dual_Number(x, 1), y) - - -def delPdely(x: float, y: float) -> float: - return P(x, Dual_Number(y, 1)) +def B(x: Dual_Number, y: Dual_Number, z: Dual_Number) -> float: + return (x * y * z + x * x + y * y).d -def Z(x: Dual_Number, y: Dual_Number, z: Dual_Number) -> float: - return (x * y * z + x * x + y * y).d +def C(x: Dual_Number, y: Dual_Number, z: Dual_Number) -> float: + return (x * Dual_Number.exp(y * y + z * z)).d -def delZdelx(x: float, y: float, z: float) -> float: - return Z(Dual_Number(x, 1), y, z) +def D(x: Dual_Number, y: Dual_Number) -> float: + return (Dual_Number.sin(x) * Dual_Number.cos(y) + Dual_Number.sin(y) * Dual_Number.cos(x)).d -def delZdely(x: float, y: float, z: float) -> float: - return Z(x, Dual_Number(y, 1), z) +def grad2D(x: float, y: float, func: Callable[[Dual_Number, Dual_Number], float]) -> tuple[float, float]: + return (func(Dual_Number(x, 1), y), func(x, Dual_Number(y, 1))) -def delZdelz(x: float, y: float, z: float) -> float: - return Z(x, y, Dual_Number(z, 1)) +def grad3D(x: float, y: float, z: float, func: Callable[[Dual_Number, Dual_Number, Dual_Number], float]) -> tuple[float, float, float]: + return (func(Dual_Number(x, 1), y, z), func(x, Dual_Number(y, 1), z), func(x, y, Dual_Number(z, 1))) if __name__ == "__main__": - print(delPdelx(1, 1)) - print(delPdely(1, 1)) - print() - print(delZdelx(0, 1, -1)) - print(delZdely(0, 1, -1)) - print(delZdelz(0, 1, -1)) + print(f"3x²y + 2xy² − xy + 2x − 1, P = (1, 1)\t∇ = {grad2D(1, 1, A)}") + print(f"xyz + x² + y², P = (0, 1, -1)\t∇ = {grad3D(0, 1, -1, B)}") + print(f"xe^(y² + z²), P = (1, 1, 1)\t∇ = {grad3D(1, 1, 1, C)}") + print( + f"sin(x)cos(y) + sin(y)cos(x), P(π / 4, π / 4)\t∇ = {grad2D(np.pi / 4, np.pi / 4, D)}") + # print(delZdelx(0, 1, -1)) + # print(delZdely(0, 1, -1)) + # print(delZdelz(0, 1, -1)) # Example for f(x) # start = -6 # stop = -1