|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
/*
* This file:
* http://anggtwu.net/MAXIMA/2024-2-C2-partfrac.mac.html
* http://anggtwu.net/MAXIMA/2024-2-C2-partfrac.mac
* (find-angg "MAXIMA/2024-2-C2-partfrac.mac")
* Author: Eduardo Ochs <eduardoochs@gmail.com>
*
* (defun e () (interactive) (find-angg "MAXIMA/2024-2-C2-partfrac.mac"))
* (find-es "maxima" "2024.2-C2-P1")
* (c2m242p1p 9 "gab-2")
* (c2m242p1a "gab-2")
*
* «.test-solve» (to "test-solve")
* «.test-build» (to "test-build")
* «.test-solve2» (to "test-solve2")
* «.test-ratcoeff» (to "test-ratcoeff")
*/
partfrac_all() := (
[q,r] : divide(fup, fdn, x),
fup2 : fdn*q + r,
fdn2 : factor(fdn),
f1 : fup/fdn,
f2 : fup2/fdn,
f3 : (fdn*q)/fdn + r/fdn,
f4 : (fdn*q)/fdn + r/fdn2,
f5 : (fdn*q)/fdn + partfrac(r/fdn2, x),
F1 : 'integrate(f1,x),
F2 : 'integrate(f5,x),
F3 : integrate(f5,x),
M : align_eqss([[fup, fup2],
[fdn, fdn2],
[f1,f2,f3,f4,f5],
[F1,F2,F3]
]))$
/* «test-solve» (to ".test-solve")
* (eepitch-maxima)
* (eepitch-kill)
* (eepitch-maxima)
load("2024-2-C2-partfrac.mac");
f : (x^3 + 6*x^2 - 22*x - 55) / (x^2 + 4*x - 21);
fup : (x^3 + 6*x^2 - 22*x - 55);
fdn : (x^2 + 4*x - 21);
"2025.1"$
f : (2*x^3 - 6*x^2 - 15*x + 55) / (x^2 - 2*x - 15);
fup : (2*x^3 - 6*x^2 - 15*x + 55);
fdn : (x^2 - 2*x - 15);
linel : 110;
partfrac_all()$
M;
** «test-build» (to ".test-build")
** (c2m242vrp1p)
** (c2m242vrp1a)
F : 2/(x+7) + 4/(x-3) - 2 + x;
F : radcan(F);
fup : num(F);
fdn : denom(F);
partfrac_all()$
M;
*/
/* «test-solve2» (to ".test-solve2")
* (eepitch-maxima)
* (eepitch-kill)
* (eepitch-maxima)
load("2024-2-C2-partfrac.mac");
F : (x^4 -10*x^2 + 3*x + 1) / (x^2 - 4);
F : (2*x^3 - 6*x^2 - 15*x + 55) / (x^2 - 2*x - 15);
fup : num(F);
fdn : denom(F);
partfrac_all()$
M;
*/
/* «test-ratcoeff» (to ".test-ratcoeff")
* (eepitch-maxima)
* (eepitch-kill)
* (eepitch-maxima)
load("2024-2-C2-partfrac.mac");
F : (4*x+5) / ((x+2)*(x-3));
G : A/(x+2) + B/(x-3);
F = G;
G2 : radcan(G);
[numF, numG] : [num(F), num(G2)];
eq : numF=numG;
solve(eq, [A,B]); "bad: mentions x,%r1,%r2"$
eq1 : ratcoeff(numF=numG, x, 1);
eq0 : ratcoeff(numF=numG, x, 0);
sol : solve([eq1,eq0], [A,B]); "good"$
sol2 : subst(sol, F=G);
radcan(sol2);
*/