Ableiten von Polynomen
> restart;
interface(displayprecision = 1):
> diffPol:= proc(term, x)
local n, i, koeff, dterm, ablterm, term_is_poly;
Falls in term kein "x" vorkommt,
liefert diffPol den Wert 0 zurück:
if not has(term, x) then RETURN (0)
else
Bestimmung des höchsten Exponenten in term:
if degree(term) = FAIL then
n:= degree(term, x)
else n:= degree(term):
fi:
Es gibt keine Polynome mit negativem Grad,
der Fall n = 0 ist bereits erledigt, also:
if (n < 1) then n:= 1: fi:
Ist term ein Polynom?
term_is_poly:= false;
for i to n do
if ispoly(term, i, x) then
term_is_poly:= true:
break:
fi:
od:
if term_is_poly then
n:= i:
Bestimmung der Koeffizienten des Polynoms:
for i from 0 to n do
koeff[i]:= coeff(term, x, i):
od:
Anwendung der Potenzregel:
for i from n by -1 to 1 do
dterm[i-1]:= i*koeff[i]*x^(i-1):
od:
Anwendung der Summenregel:
ablterm:= 0;
for i from n-1 by -1 to 0 do
ablterm:= ablterm + dterm[i];
od:
RETURN (ablterm)
else RETURN (`Term ist kein Polynom.`):
fi:
fi:
end;
Falls in term kein "x" vorkommt,
liefert diffPol den Wert 0 zurück:
if not has(term, x) then RETURN (0)
else
Bestimmung des höchsten Exponenten in term:
if degree(term) = FAIL then
n:= degree(term, x)
else n:= degree(term):
fi:
Es gibt keine Polynome mit negativem Grad,
der Fall n = 0 ist bereits erledigt, also:
if (n < 1) then n:= 1: fi:
Ist term ein Polynom?
term_is_poly:= false;
for i to n do
if ispoly(term, i, x) then
term_is_poly:= true:
break:
fi:
od:
if term_is_poly then
n:= i:
Bestimmung der Koeffizienten des Polynoms:
for i from 0 to n do
koeff[i]:= coeff(term, x, i):
od:
Anwendung der Potenzregel:
for i from n by -1 to 1 do
dterm[i-1]:= i*koeff[i]*x^(i-1):
od:
Anwendung der Summenregel:
ablterm:= 0;
for i from n-1 by -1 to 0 do
ablterm:= ablterm + dterm[i];
od:
RETURN (ablterm)
else RETURN (`Term ist kein Polynom.`):
fi:
fi:
end;
Testen der Prozedur diffPol:
> diffPol(x^2, x);
> diffPol((2*x^5 + x^3)*(-3*x^2 - 4), x);
> diffPol(4*sin(x)^2, x);
> diffPol((2*x^2)^4, x);
> diffPol(2*t^3 - x^2, t);
> diffPol(x^(-1), x);
> diffPol(x^(-1), z);
> diffPol(3, x);
> diffPol(a*b*x^4 - 2*x^7, x);
> diffPol(a^5*x^2, x);
> diffPol(sin(bc)*x - z^2*sqrt(bb) + 2.5*x^3, x);
> diffPol(tt^5*ab^3*x^2 - (5*s^10)*x, x);