MCPcopy Create free account
hub / github.com/cortex-js/compute-engine / genTrinomialPartsX

Function genTrinomialPartsX

src/compute-engine/rubi/rubi-utils.ts:1976–2028  ·  view source on GitHub ↗

Rubi GeneralizedTrinomialParts → {a,b,c,n,q}: * u ≡ a·x^q + b·x^n + c·x^(2n−q)

(u: Expression, x: string)

Source from the content-addressed store, hash-verified

1974 const f = rec(u);
1975 if (f === null || vAcc === null) return null;
1976 return { f, v: vAcc, n: nAcc! };
1977}
1978
1979/** Rubi BinomialParts product combination: (a+b·x^m)·(c+d·x^n) */
1980function combineBinProduct(p: BinParts, q: BinParts): BinParts | null {
1981 const aZ = p.a.isSame(0) || zeroQ(p.a);
1982 const cZ = q.a.isSame(0) || zeroQ(q.a);
1983 const { b, n: m } = p;
1984 const { b: d, n } = q;
1985 if (aZ && cZ)
1986 return {
1987 a: p.a.engine.Zero,
1988 b: b.mul(d).evaluate(),
1989 n: m.add(n).evaluate(),
1990 };
1991 if (aZ && zeroQ(m.add(n)))
1992 return { a: b.mul(d).evaluate(), b: b.mul(q.a).evaluate(), n: m };
1993 if (cZ && zeroQ(m.add(n)))
1994 return { a: b.mul(d).evaluate(), b: p.a.mul(d).evaluate(), n };
1995 if (zeroQ(m.sub(n)) && zeroQ(p.a.mul(d).add(b.mul(q.a))))
1996 return {
1997 a: p.a.mul(q.a).evaluate(),
1998 b: b.mul(d).evaluate(),
1999 n: m.mul(2).evaluate(),
2000 };
2001 return null;
2002}
2003
2004/** Rubi TrinomialParts[u,x] → {a,b,c,n} with u ≡ a + b·x^n + c·x^(2n) */
2005function trinomialPartsX(u: Expression, x: string): TriParts | null {
2006 const ce = u.engine;
2007 if (!u.has(x)) return null;
2008
2009 const coeffs0 = polyCoeffsX(u, x);
2010 if (coeffs0 !== null) {
2011 const coeffs = trimZeros(coeffs0);
2012 const L = coeffs.length;
2013 if (L < 3 || L % 2 === 0) return null;
2014 const mid = (L - 1) / 2;
2015 if (coeffs[mid].isSame(0) || zeroQ(coeffs[mid])) return null;
2016 for (let i = 1; i < L - 1; i++)
2017 if (i !== mid && !(coeffs[i].isSame(0) || zeroQ(coeffs[i]))) return null;
2018 return {
2019 a: coeffs[0],
2020 b: coeffs[mid],
2021 c: coeffs[L - 1],
2022 n: ce.number(mid),
2023 };
2024 }
2025
2026 const ops = u.ops;
2027 if (!ops) return null;
2028 const scaleTri = (s: Expression, t: TriParts): TriParts => ({
2029 a: s.mul(t.a).evaluate(),
2030 b: s.mul(t.b).evaluate(),
2031 c: s.mul(t.c).evaluate(),

Callers 1

rubi-utils.tsFile · 0.85

Calls 13

monoClassesXFunction · 0.85
zeroQFunction · 0.85
realNumFunction · 0.85
posQFunction · 0.85
safeSimplifyFunction · 0.85
splitMonoFactorFunction · 0.85
trinomialPartsXFunction · 0.85
hasMethod · 0.65
isSameMethod · 0.65
subMethod · 0.65
mulMethod · 0.65
addMethod · 0.65

Tested by

no test coverage detected