High-precision exact elastic catenary calculations for stayed-bridge cables, cableway ropes, and other self-weighted tension members. Use when Codex must compute unstressed length, loaded length, constant horizontal force, end tangent forces/components, chord-direction end forces/components, end tangent angles, or verify another solver's result from endpoint coordinates, axial stiffness, self weight, and either one known upper-end tangent force `TB`, one known lower-end tangent force `TA`, one known unstressed length `L0`, one known lower-end chord-direction force `NA`, or one known upper-end chord-direction force `NB`. Trigger on requests mentioning 弹性悬链线, exact elastic catenary, 无应力索长, 已知索长反求索力, 已知TA反求索力, 已知NA反求索力, 已知NB反求索力, 索力, 切线力, 弦向力, 锚固端夹角, cableway, or stayed cable when approximate parabolic methods are not acceptable.
Use this skill to solve the exact elastic catenary equations with high-precision decimal arithmetic and to explain or audit the result in engineering terms. Prefer the bundled solver script for routine calculations so the same formulas, units, and residual checks are reused consistently.
Keep the user's original decimal inputs exactly as given. Do not replace them with guessed pi forms or rounded surrogates.
Treat --w-knpm as the self weight per unit unstressed length in kN/m.
If the source data is given as mass per unit length m in kg/m, convert it with w = m * g / 1000 and use gravity acceleration g = 9.8 m/s^2 by default unless the user explicitly gives a different local value.
Run the bundled solver with exactly one of --TB-kN, --TA-kN, --NA-kN, --NB-kN, or --L0-m.
Known upper-end tangent magnitude:
python skills/exact-elastic-catenary/scripts/solve_exact_elastic_catenary.py `
--ax 0 --ay 0 --az 0 `
--bx 50 --by 0 --bz 50 `
--E-mpa 1.95e5 `
--A-mm2 7853.98163397448 `
--w-knpm 0.616537558266997 `
--TB-kN 408.57767134375 `
--places 30
Known lower-end tangent magnitude:
python skills/exact-elastic-catenary/scripts/solve_exact_elastic_catenary.py `
--ax 0 --ay 0 --az 0 `
--bx 50 --by 0 --bz 50 `
--E-mpa 1.95e5 `
--A-mm2 7853.98163397448 `
--w-knpm 0.616537558266997 `
--TA-kN 377.758705169268904111773320232169 `
--places 30
Known unstressed length:
python skills/exact-elastic-catenary/scripts/solve_exact_elastic_catenary.py `
--ax 0 --ay 0 --az 0 `
--bx 50 --by 0 --bz 50 `
--E-mpa 1.95e5 `
--A-mm2 7853.98163397448 `
--w-knpm 0.616537558266997 `
--L0-m 70.710689564065447049166818340686 `
--places 30
Known lower-end chord-direction force:
python skills/exact-elastic-catenary/scripts/solve_exact_elastic_catenary.py `
--ax 0 --ay 0 --az 0 `
--bx 50 --by 0 --bz 50 `
--E-mpa 1.95e5 `
--A-mm2 7853.98163397448 `
--w-knpm 0.616537558266997 `
--NA-kN 377.452295762535694739801666516683 `
--places 30
Known upper-end chord-direction force:
python skills/exact-elastic-catenary/scripts/solve_exact_elastic_catenary.py `
--ax 0 --ay 0 --az 0 `
--bx 50 --by 0 --bz 50 `
--E-mpa 1.95e5 `
--A-mm2 7853.98163397448 `
--w-knpm 0.616537558266997 `
--NB-kN 408.279178665602621965524806126744 `
--places 30
The script outputs:
lhcEAL0SHVA, VBTA, TBNA, NBx,y,zA as the first anchor and point B as the upper anchor in the solve plane.l = sqrt((xB-xA)^2 + (yB-yA)^2) and h = zB-zA.TB: solve the two exact unknowns H and L0TA: solve the two exact unknowns H and L0NA: solve the two exact unknowns H and L0NB: solve the two exact unknowns H and L0L0: solve the two exact unknowns H and VB, then back out TBAssume the cable lies in the vertical plane defined by the two anchors and gravity.
Assume w is the self weight per unit unstressed length, not per deformed length.
Use g = 9.8 m/s^2 as the default gravity acceleration whenever weight must be derived from mass-based inputs. If the user already provides w in kN/m, use it directly and do not multiply by g again.
Use the exact elastic catenary model, not the parabolic approximation.
Use high-precision decimal arithmetic for all nonlinear solves and angle calculations. Avoid binary floating-point unless the user explicitly accepts it.
Prefer the Newton solve with analytic Jacobian implemented in the bundled script. It is more reliable than ad hoc spreadsheet iteration.
If the user provides TB, attach that known upper-end tension to B.
If the user provides TA, interpret it as the lower-end tangent magnitude at A.
If the user provides NA or NB, interpret them as the projection of the end tangent-force vector onto the chord unit vector from A to B.
If the user provides the known L0, use the --L0-m mode and let the script compute TB as part of the result.
H is the constant horizontal force magnitude along the cable.
VA and VB are the vertical tangent-force components at A and B.
TA = sqrt(H^2 + VA^2) and TB = sqrt(H^2 + VB^2).
NA = (H l + VA h) / c and NB = (H l + VB h) / c, where c = sqrt(l^2 + h^2).
The global tangent-force vectors are built by projecting H onto the horizontal direction from A to B, then adding the vertical component.
The reported end angles are slope angles relative to the local horizontal projection plane, not azimuths in the global x-y plane.
Always check these before trusting a result:
sqrt(H^2 + VB^2) - TB is near zero.VB - VA - w L0 is near zero.(H l + VA h) / c - NA is near zero when NA is the input mode.(H l + VB h) / c - NB is near zero when NB is the input mode.h > 0, the chord angle atan(h/l) should normally lie between the two end tangent angles.TA, TB, NA, NB, and L0 should agree within the requested tolerance.Use scripts/solve_exact_elastic_catenary.py for the solve.
Read references/theory.md when you need the governing equations, the analytic Jacobian, or the audit logic.