Bernstein basis polynomials: Difference between revisions

→‎{{header|ALGOL 68}}: Simplify a bit more
(→‎{{header|ALGOL 68}}: Simplify a little using features of Algol 68 not in Algol 60)
(→‎{{header|ALGOL 68}}: Simplify a bit more)
Line 391:
# coefficients q0, q1, q2 to the cubic Bernstein #
# coefficients c0, c1, c2, c3; #
PROCOP bern2to3 TOBERNTHREE = ( BERNTWO q, REF REAL c0, c1, c2, c3 )VOIDBERNTHREE:
BEGIN
c0HEAP :=BERNTHREE b0 OF qc;
c1 := ((1/3) * b0 OF q)c +:= ((2/3) * b1b0 OF q);
c2b1 OF c := ((21/3) * b1b0 OF q) + ((12/3) * b2b1 OF q);
c3b2 OF c := ((2/3) * b1 OF q) + ((1/3) * b2 OF q);
END # bern2to3 #b3 OF c := b2 OF q;
)c
END # TOBERNTHREE # );
 
BEGIN
Line 426 ⟶ 428:
OP SHOWEVAL = ( BERNTHREE p, REAL x )VOID:
print( ( " ", label OF p, " ( ", f( x ), " ) = ", f( p EVAL x ), newline ) );
# returns a string representation of the values of p #
OP TOSTRING = ( BERNTWO p )STRING:
print( ( " bern "( ", + f( b0 OF q2p ), + ", ", + f( b1 OF q2p ), + ", ", + f( b2 OF q2p ) + " )";
# returns a string representation of the values of p #
OP TOSTRING = ( BERNTHREE p )STRING:
, " ) --> bern ( ", + f( qc0b0 OF p ), + ", ", + f( qc1b1 OF p ), + ", ", + f( qc2b2 OF p ), + ", ", + f( qc3b3 OF p ) + " )";
 
BERNTWO p2 := BERNTWO ( "p", 0, 0, 0 );
BERNTWO q2 := BERNTWO ( "q", 0, 0, 0 );
Line 433 ⟶ 441:
BERNTHREE q3 := BERNTHREE( "q", 0, 0, 0, 0 );
BERNTHREE r3 := BERNTHREE( "r", 0, 0, 0, 0 );
 
REAL pc0 := 0, pc1 := 0, pc2 := 0, pc3 := 0;
REAL qc0 := 0, qc1 := 0, qc2 := 0, qc3 := 0;
 
REAL p0m = 1, p1m = 0, p2m = 0;
Line 445 ⟶ 450:
print( ( "Subprogram (1) examples:", newline ) );
print( ( " mono ( ", f( p0m ), ", ", f( p1m ), ", ", f( p2m )
, " ) --> bern ( ", f( b0 OFTOSTRING p2 ), ", ", f( b1 OF p2 ), ", ", f( b2 OF p2 )newline
, " )", newline
)
);
print( ( " mono ( ", f( q0m ), ", ", f( q1m ), ", ", f( q2m )
, " ) --> bern ( ", f( b0 OFTOSTRING q2 ), ", ", f( b1 OF q2 ), ", ", f( b2 OF q2 )newline
, " )", newline
)
);
Line 465 ⟶ 468:
tobern3( r0m, r1m, r2m, r3m, r3 );
print( ( "Subprogram (3) examples:", newline ) );
print( ( " mono ( ", f( p0m ), ", ", f( p1m ), ", ", f( p2m ), ", ", f( 0 )
, " ) --> bern ( ", f( b0 OFTOSTRING p3 ), ", ", f( b1 OF p3 ), ", ", f( b2 OF p3 ), ", ", f( b3 OF p3 )newline
, " )", newline
)
);
print( ( " mono ( ", f( q0m ), ", ", f( q1m ), ", ", f( q2m ), ", ", f( 0 )
, " ) --> bern ( ", f( b0 OFTOSTRING q3 ), ", ", f( b1 OF q3 ), ", ", f( b2 OF q3 ), ", ", f( b3 OF q3 )newline
, " )", newline
)
);
print( ( " mono ( ", f( r0m ), ", ", f( r1m ), ", ", f( r2m ), ", ", f( r3m )
, " ) --> bern ( ", f( b0 OFTOSTRING r3 ), ", ", f( b1 OF r3 ), ", ", f( b2 OF r3 ), ", ", f( b3 OF r3 )newline
, " )", newline
)
);
Line 489:
r3 SHOWEVAL 7.50;
 
bern2to3( p2, pc0, pc1, pc2, pc3 );
bern2to3( q2, qc0, qc1, qc2, qc3 );
print( ( "Subprogram (5) examples:", newline ) );
print( ( " bern ( ", f( b0 OFTOSTRING p2 ), ", --> bern ", f(TOSTRING b1 OFTOBERNTHREE p2 ), ",newline ", f( b2 OF p2) );
print( ( " bern ", TOSTRING q2, " ) --> bern ( ", f(TOSTRING pc0TOBERNTHREE )q2, ", ", f( pc1 newline ), ", ", f( pc2 ), ", ", f( pc3 )
 
, " )", newline
)
);
print( ( " bern ( ", f( b0 OF q2 ), ", ", f( b1 OF q2 ), ", ", f( b2 OF q2 )
, " ) --> bern ( ", f( qc0 ), ", ", f( qc1 ), ", ", f( qc2 ), ", ", f( qc3 )
, " )", newline
)
)
END
 
3,021

edits