Sample Maplet Application: Matrix Norm
This worksheet demonstrates how to write a Maplet application that functions similarly to the LinearAlgebra[MatrixNorm] Maplet application available in the Maplets[Examples] package. It is designed for experienced Maple authors.
The MatrixNorm Maplet application provides a graphical interface to the LinearAlgebra[MatrixNorm] function.
The matrix norm of a matrix M is a function that satisfies all the conditions of a norm and |||M||| such that || M.v || <= |||M||| ||v|| for all vectors v.
By using user input, this procedure returns the calling sequence required to find the matrix norm or evaluates the result.
Thus, the Maplet application requests:
1. The norm, one of: infinity, 1, Euclidean (2), or Frobenius.
2. Whether the matrix is real-valued.
3. Whether the result is to be evaluated (or the calling sequence is to be returned).
|
Example Code
|
|
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][MatrixNorm] 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 matrix norm.
TextBox( "A matrix norm is a function ||.|| which satisfies all the "
"properties of a norm and also ||M.N|| <= ||M||*||N|| where M "
"and N are matrices.",
'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.
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.
result := Maplets[Display](maplet);
|
Once the result from the Maplet application has been returned, check if the user clicked Cancel (by checking for a NULL 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 indicates 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[MatrixNorm]( M, n, conjugate = c );
else
answer := ''LinearAlgebra[MatrixNorm]''( M, n, conjugate = c );
end if;
end if:
answer;
|
|
|
Maplets[Examples][LinearAlgebra][MatrixNorm]
|
|
The Maplets[Examples][LinearAlgebra][MatrixNorm] 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,MatrixNorm
|
To view the source code, enter:
>
|
print( Maplets[Examples][LinearAlgebra][MatrixNorm] );
|
|
Return to Index for Example Worksheets
|