Polynomial derivative: Difference between revisions
(julia example) |
(add FreeBASIC) |
||
Line 40: | Line 40: | ||
Derivative of -x4-x3+x+1: 1 - 3*x^2 - 4*x^3 |
Derivative of -x4-x3+x+1: 1 - 3*x^2 - 4*x^3 |
||
</pre> |
</pre> |
||
=={{header|FreeBASIC}}== |
|||
<lang freebasic>sub polydiff( p() as integer ) |
|||
'differentiates the polynomial |
|||
'p(0) + p(1)x + p(2)x^2 +... + p(n)x^n |
|||
'in place |
|||
dim as integer i, n = ubound(p) |
|||
if n=0 then |
|||
p(0)=0 |
|||
return |
|||
end if |
|||
for i = 0 to n - 1 |
|||
p(i) = (i+1)*p(i+1) |
|||
next i |
|||
redim preserve p(0 to n-1) |
|||
return |
|||
end sub |
|||
sub print_poly( p() as integer ) |
|||
'quick and dirty display of the poly |
|||
if ubound(p)=0 and p(0)=0 then |
|||
print 0 |
|||
return |
|||
end if |
|||
for i as integer = 0 to ubound(p) |
|||
if i = 0 then print p(i);" "; |
|||
if i = 1 and p(i)>0 then print using "+ #x";p(i); |
|||
if i = 1 and p(i)<0 then print using "- #x";-p(i); |
|||
if i > 1 and p(i)>0 then print using "+ #x^#";p(i);i; |
|||
if i > 1 and p(i)<0 then print using "- #x^#";-p(i);i; |
|||
next i |
|||
print |
|||
end sub |
|||
'test cases |
|||
redim as integer p(0) |
|||
p(0) = 5 |
|||
print_poly(p()) |
|||
print "Differentiates to " |
|||
polydiff(p()) |
|||
print_poly(p()): print |
|||
redim as integer p(1) |
|||
p(0) = 4 : p(1) = -3 |
|||
print_poly(p()) |
|||
print "Differentiates to " |
|||
polydiff(p()) |
|||
print_poly(p()): print |
|||
redim as integer p(2) |
|||
p(0) = -1 : p(1) = 6 : p(2) = 5 |
|||
print_poly(p()) |
|||
print "Differentiates to " |
|||
polydiff(p()) |
|||
print_poly(p()): print |
|||
redim as integer p(3) |
|||
p(0) = 4 : p(1) = 3 : p(2) = -2 : p(3) = 1 |
|||
print_poly(p()) |
|||
print "Differentiates to " |
|||
polydiff(p()) |
|||
print_poly(p()): print |
|||
redim as integer p(4) |
|||
p(0) = 1 : p(1) = 1 : p(2) = 0 : p(3) = -1 : p(4) = -1 |
|||
print_poly(p()) |
|||
print "Differentiates to " |
|||
polydiff(p()) |
|||
print_poly(p()): print</lang> |
|||
{{out}}<pre> |
|||
5 |
|||
Differentiates to |
|||
0 |
|||
4 - 3x |
|||
Differentiates to |
|||
-3 |
|||
-1 + 6x+ 5x^2 |
|||
Differentiates to |
|||
6 + %10x |
|||
4 + 3x- 2x^2+ 1x^3 |
|||
Differentiates to |
|||
3 - 4x+ 3x^2 |
|||
1 + 1x- 1x^3- 1x^4 |
|||
Differentiates to |
|||
1 - 3x^2- 4x^3</pre> |
Revision as of 08:53, 9 November 2021
Given a polynomial, represented by an ordered list of its coefficients by increasing degree (e.g. [-1, 6, 5] represents 5x2+6x-1), calculate the polynomial representing the derivative. For example, the derivative of the aforementioned polynomial is 10x+6, represented by [6, 10]. Test cases: 5, -3x+4, 5x2+6x-1, x3-2x2+3x-4, -x4-x3+x+1
Factor
<lang factor>USING: math.polynomials prettyprint ;
{ -1 6 5 } pdiff .</lang>
- Output:
{ 6 10 }
The implementation of pdiff
:
<lang factor>USING: kernel math.vectors sequences ; IN: math.polynomials
- pdiff ( p -- p' ) dup length <iota> v* rest ;</lang>
Julia
<lang julia>using Polynomials
testcases = [
("5", [5]), ("-3x+4", [4, -3]), ("5x2+6x-1", [-1, 6, 5]), ("x3-2x2+3x-4", [-4, 3, -2, 1]), ("-x4-x3+x+1", [1, 1, 0, -1, -1]),
]
for (s, coef) in testcases
println("Derivative of $s: ", derivative(Polynomial(coef)))
end
</lang>
- Output:
Derivative of 5: 0 Derivative of -3x+4: -3 Derivative of 5x2+6x-1: 6 + 10*x Derivative of x3-2x2+3x-4: 3 - 4*x + 3*x^2 Derivative of -x4-x3+x+1: 1 - 3*x^2 - 4*x^3
FreeBASIC
<lang freebasic>sub polydiff( p() as integer )
'differentiates the polynomial 'p(0) + p(1)x + p(2)x^2 +... + p(n)x^n 'in place dim as integer i, n = ubound(p) if n=0 then p(0)=0 return end if for i = 0 to n - 1 p(i) = (i+1)*p(i+1) next i redim preserve p(0 to n-1) return
end sub
sub print_poly( p() as integer )
'quick and dirty display of the poly if ubound(p)=0 and p(0)=0 then print 0 return end if for i as integer = 0 to ubound(p) if i = 0 then print p(i);" "; if i = 1 and p(i)>0 then print using "+ #x";p(i); if i = 1 and p(i)<0 then print using "- #x";-p(i); if i > 1 and p(i)>0 then print using "+ #x^#";p(i);i; if i > 1 and p(i)<0 then print using "- #x^#";-p(i);i; next i print
end sub
'test cases redim as integer p(0) p(0) = 5 print_poly(p()) print "Differentiates to " polydiff(p()) print_poly(p()): print
redim as integer p(1) p(0) = 4 : p(1) = -3 print_poly(p()) print "Differentiates to " polydiff(p()) print_poly(p()): print
redim as integer p(2) p(0) = -1 : p(1) = 6 : p(2) = 5 print_poly(p()) print "Differentiates to " polydiff(p()) print_poly(p()): print
redim as integer p(3) p(0) = 4 : p(1) = 3 : p(2) = -2 : p(3) = 1 print_poly(p()) print "Differentiates to " polydiff(p()) print_poly(p()): print
redim as integer p(4) p(0) = 1 : p(1) = 1 : p(2) = 0 : p(3) = -1 : p(4) = -1 print_poly(p()) print "Differentiates to " polydiff(p()) print_poly(p()): print</lang>
- Output:
5Differentiates to
04 - 3xDifferentiates to -3
-1 + 6x+ 5x^2 Differentiates to
6 + %10x4 + 3x- 2x^2+ 1x^3Differentiates to
3 - 4x+ 3x^21 + 1x- 1x^3- 1x^4Differentiates to
1 - 3x^2- 4x^3