Output from imleqn.sas |
Source
0 Graphs |
---|
NOTE: %INCLUDE (level 1) file n:\psy6140\examples\iml\imleqn.sas is file n:\psy6140\examples\iml\imleqn.sas.
416 +title 'IMLEQN: Solution of Systems of Equations'; 417 + *-- ------- ---------------------------------; 418 +proc iml;
IML Ready
419 + reset print log fuzz fw=5; 420 + %include iml(matlib);
NOTE: %INCLUDE (level 2) file IML(matlib) is file c:\sasuser\iml\matlib.SAS.
NOTE: Module R defined. NOTE: Module COFACTOR defined. NOTE: Module PROJ defined. NOTE: Module LEN defined. NOTE: Module DEV defined. NOTE: Module CORR defined. NOTE: %INCLUDE (level 2) ending. NOTE: %INCLUDE (level 1) resuming.
506 +*-- [1.] 3 EQUATIONS IN 3 UNKNOWNS (Consistent); 507 +A= {1 1 -4, 1 -2 1, 1 1 1};
A 3 rows 3 cols (numeric) 1 1 -4 1 -2 1 1 1 1
508 +b= {2, 1, 0};
B 3 rows 1 col (numeric) 2 1 0
509 +xx = t('X1' : 'X3');
XX 3 rows 1 col (character, size 2) X1 X2 X3
510 +print A '*' xx '=' b;
A XX B 1 1 -4 * X1 = 2 1 -2 1 X2 1 1 1 1 X3 0
511 +* they are consistent, since r(A) = r(A b); 512 +print (r(A)) (r(A || b));
#TEM1001 #TEM1003 3 3
513 +*-- A solution exists: use inv() or solve(); 514 +x = inv(A) * b;
X 3 rows 1 col (numeric) 0.733 -0.33 -0.4
515 +x = solve(A,b);
X 3 rows 1 col (numeric) 0.733 -0.33 -0.4
516 +print A ' * ' x '=' (A * x) '=' b;
A X #TEM1001 B 1 1 -4 * 0.733 = 2 = 2 1 -2 1 -0.33 1 1 1 1 1 -0.4 0 0
517 +*-- Echelon form of (A || b) shows solution; 518 +r = echelon(A || b);
R 3 rows 4 cols (numeric) 1 0 0 0.733 0 1 0 -0.33 0 0 1 -0.4
519 +*-- [2.] 4 EQUATIONS IN 3 UNKNOWNS (Consistent); 520 +A= {1 1 -4, 1 -2 1, 1 1 1, 2 -1 2};
A 4 rows 3 cols (numeric) 1 1 -4 1 -2 1 1 1 1 2 -1 2
521 +b= {2, 1, 0, 1};
B 4 rows 1 col (numeric) 2 1 0 1
522 +* they are consistent, since r(A) = r(A b); 523 +print (r(A)) (r(A || b));
#TEM1001 #TEM1003 3 3
524 +*-- A solution exists, but more equations than unknowns, 525 + so use ginv; 526 +x = ginv(A) * b;
X 3 rows 1 col (numeric) 0.733 -0.33 -0.4
527 +print A ' * ' x '=' (A * x) '=' b;
A X #TEM1001 B 1 1 -4 * 0.733 = 2 = 2 1 -2 1 -0.33 1 1 1 1 1 -0.4 0 0 2 -1 2 1 1
528 +*-- Echelon form of (A || b) shows solution; 529 +r = echelon(A || b);
R 4 rows 4 cols (numeric) 1 0 0 0.733 0 1 0 -0.33 0 0 1 -0.4 0 0 0 0
530 +*-- [3.] 3 EQUATIONS IN 3 UNKNOWNS (Inconsistent); 531 +A={1 3 1, 1 -2 -2, 2 1 -1};
A 3 rows 3 cols (numeric) 1 3 1 1 -2 -2 2 1 -1
532 +b={2,3,6};
B 3 rows 1 col (numeric) 2 3 6
533 +*-- inconsistent, since r(A) < r(A b); 534 +print (r(A)) (r(A || b));
#TEM1001 #TEM1003 2 3
535 +r = echelon(A || b);
R 3 rows 4 cols (numeric) 1 0 -0.8 0 0 1 0.6 0 0 0 0 1
536 +*-- inv() fails, since A is singular; 537 +x = inv(A) * b;
ERROR: (execution) Matrix should be non-singular.
operation : INV at line 537 column 8 operands : A A 3 rows 3 cols (numeric) 1 3 1 1 -2 -2 2 1 -1 statement : ASSIGN at line 537 column 1
538 +* g-inverse provides approx. solution; 539 +x = ginv(A) * b;
X 3 rows 1 col (numeric) 1.947 0.54 -1.23
540 +print A '*' x ' = ' (A * x);
A X #TEM1001 1 3 1 * 1.947 = 2.333 1 -2 -2 0.54 3.333 2 1 -1 -1.23 5.667
541 +*-- change rhs to give consistent set; 542 +b = {2,3,5};
B 3 rows 1 col (numeric) 2 3 5
543 +r = r(A || b);
R 1 row 1 col (numeric) 2
544 +r = echelon(A || b);
R 3 rows 4 cols (numeric) 1 0 -0.8 2.6 0 1 0.6 -0.2 0 0 0 0
545 +*-- since r(A) < ncol(a) solution is not unique; 546 +* but ginv finds a solution; 547 +x = ginv(A) * b;
X 3 rows 1 col (numeric) 1.72 0.46 -1.1
548 +print A '*' x ' = ' (A * x) '=' b;
A X #TEM1001 B 1 3 1 * 1.72 = 2 = 2 1 -2 -2 0.46 3 3 2 1 -1 -1.1 5 5
549 +*-- Equivalent way of producing a solution; 550 +A11 = A[{1 2},{1 2}];
A11 2 rows 2 cols (numeric) 1 3 1 -2
551 +A12 = A[{1 2}, 3];
A12 2 rows 1 col (numeric) 1 -2
552 +b1 = b[{1 2},];
B1 2 rows 1 col (numeric) 2 3
553 +x2 = -1.1;
X2 1 row 1 col (numeric) -1.1
554 +* solve for 2 independent unknowns; 555 +x1 = inv(A11) * b1 - inv(A11) * A12 * x2;
X1 2 rows 1 col (numeric) 1.72 0.46
556 +quit;
Exiting IML.
NOTE: The PROCEDURE IML used 0.38 seconds. NOTE: %INCLUDE (level 1) ending.