Python
import sympy as sp
import itertools
import math

# Aglaea's Out of battle SPD: "A"
A = sp.symbols('A', real=True)

Base_spd = [102]
Tribbie_DDD_AA = [0.18]
Sunday_DDD_AA = 0.16
Vonwacq_AA = 0.4

# AV of Breakpoint you looking for
Cycle_AV = 150

# Number of sunday's turn in that AV
NoT = 3

# Number of sunday's ULTS in that AV assuming Sunday get 3 turn ult
SNoU = 1 + math.floor((NoT - 1)/3)

# Number of Tribbie's ULTS in that AV
TNoU = 1


for B, D in itertools.product(Base_spd, Tribbie_DDD_AA):

    # Aglaea Speeds at 3~6 stacks
    AS_3 = A + B * 0.51
    AS_4 = A + B * 0.66
    AS_5 = A + B * 0.81
    AS_6 = A + B * 0.96

    # Aglaea Normal AV
    A_AV3 = 10000 / AS_3
    A_AV4 = 10000 / AS_4
    A_AV5 = 10000 / AS_5
    A_AV6 = 10000 / AS_6

    # GM Speeds at 3~5 stacks
    GMS_3 = (B * 0.35) + (3 * 55)
    GMS_4 = (B * 0.35) + (4 * 55)
    GMS_5 = (B * 0.35) + (5 * 55)
    GMS_6 = (B * 0.35) + (6 * 55)

    # GM Normal AV
    GM_AV3 = (1 - Sunday_DDD_AA) * 10000 / GMS_3
    GM_AV4 = 10000 / GMS_4
    GM_AV5 = 10000 / GMS_5
    GM_AV6 = 10000 / GMS_6

    # Actual_AV = (Remaining_AV * OLD_SPD/NEW_SPD) + Traveled_AV (turn before sunday)
    Sunday_spd = (NoT - (SNoU * Sunday_DDD_AA) - Vonwacq_AA - (TNoU * D)) * 10000/Cycle_AV
    Sunday_AV = (1 - Sunday_DDD_AA) * 10000/Sunday_spd
    A2_AV = (A_AV3 - GM_AV3) * (AS_3 / AS_4) + GM_AV3 

    # Solve to get Aglaea turns before Sunday's second turn.
    equation = sp.Eq(A2_AV, Sunday_AV)
    solutions = sp.solve(equation, A)

    # Keep only positive solutions
    real_solutions = [sol.evalf(6) for sol in solutions if sol.is_real]
    Sunday_spd = [math.ceil(Sunday_spd * 100)/100]

    print(f"Base_spd={B}, Tribbie's DDD_AA={D}  → Sunday's SPD ={Sunday_spd}, Aglaea's SPD =", real_solutions)
Base_spd=102, Tribbie's DDD_AA=0.18  → Sunday's SPD =[150.67], Aglaea's SPD = [123.531]