Sample Maplet Application: Condition NumberThis worksheet demonstrates how to write a Maplet application that functions similarly to the LinearAlgebra[ConditionNumber] Maplet application available in the Maplets[Examples] package. It is designed for experienced Maple authors.The ConditionNumber Maplet application provides a graphical interface to the LinearAlgebra[ConditionNumber] function.The condition number of a matrix is the norm of the matrix multiplied by the norm of its inverse.
By using user input, this procedure returns the calling sequence required to find the condition number or evaluates the result.Thus, the Maplet application requests:1. The norm, one of: infinity, 1, Euclidean (2), or Frobenius.2. Whether the matrix has real entries.3. Whether the result is to be evaluated (or the calling sequence is to be returned).
<Text-field style="Heading 1" layout="Heading 1" bookmark="bkmrk0">Example Code</Text-field>restart:Invoke the Maplets Elements subpackage.with(Maplets[Elements]):Since it is not most efficient to enter a matrix in a Maplet application, the Maplets[Examples][LinearAlgebra][ConditionNumber] example Maplet application requires that the user include the matrix as an input.
For this example, the following matrix is used.M := <<1,2,3>|<2,3,5>|<3,5,12>>;This example displays a Maplet application that queries the user for the inputs required, and then processes the results. The variable continue is used to determine whether a previous section failed as a result of errors in user input or a Cancel click in either Maplet application.# Define the Maplet application.
maplet := Maplet(BoxLayout('vertical'=true,
# A paragraph describing the condition number.
TextBox( "The condition number of a matrix is equal to the norm of"
" the matrix multiplied by the norm of its inverse.",
'height' = 3, 'width' = 35, 'editable' = 'false' ),
# Three rows, each requesting the user for various
# forms of input. The first check box has a default
# value determined by the return value of a Maple call.
# The second check box is selected by default.
BoxRow(
BoxCell( "Norm:", 'halign'='left' ),
BoxCell( DropDownBox['DDB1'](["infinity", "1", "Euclidean (2)",
"Frobenius"]), 'halign'='right' )
),
BoxRow(
BoxCell( "Matrix has real entries:", 'halign'='left' ),
BoxCell( CheckBox['ChB1'](not has(M, I)), 'halign'='right' )
),
BoxRow(
BoxCell( "Evaluate result:", 'halign'='left' ),
BoxCell( CheckBox['ChB2'](true), 'halign'='right' )
),
BoxRow(
# The OK button shuts down the Maplet application and
# returns the results in the drop-down and check boxes
# as specified in the list ['DDB1', 'ChB1', 'ChB2'].
BoxCell( Button("OK", Shutdown(['DDB1', 'ChB1', 'ChB2'])),
'halign'='left' ),
# The Cancel button shuts down the Maplet application
# without returning any results.
BoxCell( Button("Cancel", Shutdown()), 'halign'='right' )
)
)):# Display runs the Maplet application.
continue := false;
result := Maplets[Display](maplet);Once the result from the Maplet application has been returned, check if the user clicked Cancel (by checking for a LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYkLUkjbWlHRiQ2JVElTlVMTEYnLyUnaXRhbGljR1EldHJ1ZUYnLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy9GM1Enbm9ybWFsRic= result) or OK.
If the user selected OK, analyze the results. Since the Maplet application required no user input, there is no need to check the output.
If the user indicated that the matrix has real entries, then the conjugate option need not be set. if type( result, list ) then
continue := true;
n := subs( ["infinity" = infinity, "1" = 1, "Euclidean (2)" = 2, "Frobenius" = Frobenius], result[1] );
c := not parse( result[2] );
er := parse( result[3] );
else
continue := false;
end if:Finally, we set the options, and assign the answer depending on whether the user requested an evaluation.
For this example, since answer is global, it evaluates fully. The extra level of unevaluation quotes is not necessary inside a procedure.if continue then
if er then
answer := LinearAlgebra[ConditionNumber]( M, n, conjugate = c );
else
answer := ''LinearAlgebra[ConditionNumber]''( M, n, conjugate = c );
end if;
end if:
answer;
<Text-field style="Heading 1" layout="Heading 1" bookmark="bkmrk1">Maplets[Examples][LinearAlgebra][ConditionNumber]</Text-field>The Maplets[Examples][LinearAlgebra][ConditionNumber] displays a Maplet application similar to that of the previous examples, though everything is wrapped in a procedure.For help on this Maplet application, see:?Maplets,Examples,ConditionNumberTo view the source code, enter:print( Maplets[Examples][LinearAlgebra][ConditionNumber] );
<Text-field style="Heading 1" layout="Heading 1" bookmark="bkmrk2">See Also</Text-field>Maplets[Examples][LinearAlgebra], LinearAlgebra[ConditionNumber]Return to Index for Example Worksheets