Ejemplo de regla de Cramer con Basic PDS matriz Math cuadro

Seleccione idioma Seleccione idioma
Id. de artículo: 71779 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

El programa siguiente muestra una implementación de regla de Cramer utilizando las versiones 7.0 y 7.1 de matriz Math cuadro de herramientas de Microsoft Basic Professional desarrollo del sistema (PDS). Regla del Cramer es una fórmula matemática para determinar la solución de un sistema de ecuaciones lineales.

Más información

Regla del Cramer es una regla para resolver un sistema de ecuaciones lineal como
   A11*X + A12*Y = B1
   A21*X + A22*Y = B2            (1)
				
cuando el determinante de la matriz coeficiente, como sigue, es distinto de cero:
   D = det(A) = det | A11 A12 |
                    | A21 A22 |
				
(X e Y son dos valores desconocidos que resolución simultáneamente todas las ecuaciones en el sistema. A11, A12, B1, A21, A22 y B2 son constantes, también conocido como coeficientes, que definen la ecuación lineal en términos de X e Y.)

La solución de sistema de ecuaciones lineales en (1) es única cuando D no es igual a 0 y las fórmulas siguientes se puede calcular:
   X = det | B1 A12 |     ,     Y = det | A11 B1 |
           | B2 A22 |                   | A21 B2 |
         --------------               --------------
               D                             D
				
el numerador en la fórmula para X procede de reemplazar la primera columna A (la columna X) por la columna de las constantes B1 y B2 (la columna B). Sustituyendo la columna Y por la columna B proporciona el numerador de la solución Y.

Esta información procede de "Cálculo y analítica Geometry," Thomas y Finney, edición sexto, sección 6 A.

Ejemplo de código

El ejemplo de código siguiente muestra regla del Cramer para un sistema lineal de ecuaciones.

Compilar y vincular el programa de MS-DOS como sigue:
   BC CRAMERS.BAS;
   LINK CRAMERS,,,MATBEFR.LIB;

'This program uses Cramer's Rule to determine the solution to a linear
'system of equations. This example solves for a Current matrix (I)
'when given the Resistor matrix (R) and the Voltage matrix (V), using
'the equation R * I = V.
'Note that this example uses the Long data type and floating
'point values are not allowed as input. This program makes a call to
'the MatDetL% function to determine the Determinant of an array of
'LONG type. To run this program, the MATB.BAS matrix math
'module must be loaded, or the equivalent Quick library,
'MATBEFR.QLB, can be loaded when starting the QBX.EXE environment.
'For example:
'
'   QBX /L MATBEFR
'
'Note that the underscore character (_) shown here is for viewing
'convenience and should be taken out when implementing the program.
'(QB.EXE and BC.EXE automatically take out the underscore.)

DEFLNG A-Z                    'Define all variables to be LONG integer
DECLARE SUB InputMatrix (Resistor(), Voltage(), Current(), _
                                                  Scratch(), n%)
DECLARE SUB EraseMatrix (Resistor(), Voltage(), Current(), Scratch())
DECLARE SUB CramersRule (Resistor(), Voltage(), Current(), _
                                                  Scratch(), n%)
DECLARE FUNCTION MatDetL% (a() AS LONG, det&)
CONST TRUE = -1                  'Define true and false
CONST FALSE = NOT TRUE
REM $DYNAMIC                    'Make all arrays dynamic
OPTION BASE 1                   'Set the default base value for arrays
DIM MatrixDim AS INTEGER        'The dimension of the matrices
DIM okay AS INTEGER             'variable: checks for valid dimension

DO
 CLS
 LOCATE 1, 10
 PRINT "This uses Cramer's Rule to calculate matrix solutions"
 DO
  LOCATE 3, 5
  PRINT "Enter dimension of square (n x n) matrix--between 1 and 5= ";
  INPUT MatrixDim
  IF (MatrixDim < 6) AND (MatrixDim > 0) THEN
        okay = TRUE
  ELSE
        okay = FALSE
        PRINT "Number of dimensions must be between 1 and 5"
  END IF
 LOOP UNTIL okay

 LOCATE 4, 1
 PRINT STRING$(50, 32) 'clears line in case of input error
 REDIM Resistor(MatrixDim, MatrixDim)   'dimension dynamic arrays
 REDIM Voltage(MatrixDim)
 REDIM Current(MatrixDim)
 REDIM Scratch(MatrixDim, MatrixDim)
 CALL InputMatrix(Resistor(),Voltage(),Current(),Scratch(),MatrixDim)
 CALL CramersRule(Resistor(),Voltage(),Current(),Scratch(),MatrixDim)
 CALL EraseMatrix(Resistor(), Voltage(), Current(), Scratch())
 INPUT "Do another? ", answer$
LOOP UNTIL UCASE$(answer$) = "N"
END

SUB CramersRule (Resistor(), Voltage(), Current(), Scratch(), n%)

    'Subroutine that evaluates determinates of matrixes according to
    'Cramer's Rule. N% is the dimension of the Square matrix.

DIM i, j, column AS INTEGER

ErrorCode = MatDetL%(Resistor(), DetSoln)
IF (ErrorCode <> -1 AND ErrorCode <> -2) THEN  'check for Det = 0 and
                                           'that matrix is square

'Below are the loops that exchange columns of the Resistor matrix
'with the Voltage matrix. Column tells which column is being replaced.
   FOR column = 1 TO n%
        FOR i = 1 TO n%
            FOR j = 1 TO n%
                IF j = column THEN      'replace column #n w/ solution
                     Scratch(i, j) = Voltage(i)
                ELSE
                     Scratch(i, j) = Resistor(i, j)
                END IF
            NEXT j
        NEXT i
        ErrorCode = MatDetL%(Scratch(), Current(column))
        IF ErrorCode > -2 THEN
          PRINT "I"; LTRIM$(STR$(column)); " = ";   'Tell which value
          PRINT Current(column) / DetSoln     'of I and the solution.
        END IF
   NEXT column
ELSE
        PRINT "Determinant = 0 or Not Square Matrix"
END IF
END SUB

SUB EraseMatrix (Resistor(), Voltage(), Current(), Scratch())
'Deallocate memory used by dynamic arrays
ERASE Resistor
ERASE Voltage
ERASE Current
ERASE Scratch
END SUB

SUB InputMatrix (Resistor(), Voltage(), Current(), Scratch(), MatDim%)
'This subroutine gets the Resistor and Voltage matrix values

DIM i, j AS INTEGER

LOCATE 9, 13: PRINT "R"            'Tell user where Resistor matrix is
FOR i = 1 TO MatDim%               'displayed
        FOR j = 1 TO MatDim%
           'loop to setup which resistor value is being entered

           a$ = "R" + LTRIM$(STR$(i)) + LTRIM$(STR$(j))
           LOCATE 4, 1: PRINT "Enter Resistor Matrix "; a$; " =   ";
           LOCATE 4, 26: INPUT Resistor(i, j)
           LOCATE 10 + i, 7 * j: PRINT USING "#######"; Resistor(i, j)
        NEXT j
NEXT i
LOCATE 9, 51: PRINT "V"             'Tell user where Voltage matrix is
FOR i = 1 TO MatDim%                'displayed
    'loop to setup which Voltage value is being entered
        a$ = "V" + LTRIM$(STR$(i))
        LOCATE 5, 1: PRINT "Enter voltage "; a$; " =   ";
        LOCATE 5, 18: INPUT Voltage(i)
        LOCATE 10 + i, 50: PRINT Voltage(i)
NEXT i
END SUB
				
para obtener más información en el cuadro de matriz Math, consulta las palabras siguientes:
básico y PDS y matriz y matemáticas

Propiedades

Id. de artículo: 71779 - Última revisión: lunes, 20 de octubre de 2003 - Versión: 3.0
La información de este artículo se refiere a:
  • Microsoft BASIC Professional Development System 7.1
  • Microsoft BASIC Professional Development System 7.0
Palabras clave: 
kbmt KB71779 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 71779
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com