Lineaarialgebra
3x2-yhtälöryhmän PNS-visualisointi
|
Seuraavassa on PNS-ratkaisun 3-ulotteinen visualisointi.
Voit skaalata akseleita siirtämällä ykkösiä.
Voit kokeilla konkreettisilla 3x2-yhtälöryhmillä valitsemalla luvut aij ja bi
sopiviksi liukuvalinnoilla.
${
1. 3x2 matrix least squares solution
#CODEBASE = "http://www.joensuu.fi/matematiikka/java/javasketchpad"
$}
#CODE = "GSP.class"
#CODEBASE = "../jsp"
#ARCHIVE = "jsp4.jar"
#WIDTH = 406
#HEIGHT = 420
#ALIGN = Center
*Frame = 1
*TextFont = "Helvetica"
*TextBold = 1
*TextSize = 18
*LabelFont = "Courier"
*LabelBold = 1
*MeasureFont = "Courier"
*MeasureSize = 14
*MeasureBold = 1
*MeasureInDegrees = 1
*DirectedAngles = 0
*Backblue = 255
*BackGreen = 255
*Backred = 255
$x1T FixedText( 10, 360,'x1')[ plain, font('Helvetica'), bold, red, justifyCenter];
$x2T FixedText(365, 300,'x2')[ plain, font('Helvetica'), bold, blue, justifyCenter];
$x3T FixedText(188, 10,'x3')[ plain, font('Helvetica'), bold, color(0,150,0), justifyCenter];
$reset FixedText(200, 10, 'Reset=''R''')[red,bold,justifyLeft];
$AText FixedText(50, 35, 'A')[black,bold,justifyCenter];
$xText FixedText(113, 35, 'x')[black,bold,justifyCenter];
$AxText FixedText(170, 35, 'Ax = b''')[black,bold,justifyCenter,hidden];
$x1Text FixedText(115, 57, 'x1')[black,bold,justifyCenter];
$x2Text FixedText(115, 75, 'x2')[black,bold,justifyCenter];
$eqsign FixedText(133, 65, '=')[black,bold,justifyCenter];
$bText FixedText(220, 35, 'b')[black,bold,justifyCenter];
${
The real line
$}
$LUpp FixedPoint(0,386)[hidden];
$LLow FixedPoint(0,420)[hidden];
$RLow FixedPoint(406,420)[hidden];
$RUpp FixedPoint(406,386)[hidden];
$ULine Line($LUpp,$RUpp)[black, hidden];
$RectA Polygon($LUpp,$LLow,$RLow,$RUpp,$LUpp)[yellow, hidden];
$RO FixedPoint(200,400)[black,label('0'), hidden];
$Ref Translation($RO,25,0)[hidden];
$Ray Ray($Ref,$RO)[black, hidden];
$Rykk Point on object($Ray,1)[white, label('1'), hidden];
$R1 FixedPoint(225,400)[white,label('1'), hidden];
$RL Line($Rykk,$RO)[black, hidden];
${
The real b line
$}
$LbUpp FixedPoint(372,0)[hidden];
$LbLow FixedPoint(372,386)[hidden];
$RbLow FixedPoint(406,386)[hidden];
$RbUpp FixedPoint(406,0)[hidden];
$UbLine Line($LUpp,$RUpp)[black, hidden];
$Rectb Polygon($LbUpp,$LbLow,$RbLow,$RbUpp,$LbUpp)[color(200,240,200), hidden];
$ROb FixedPoint(380,200)[black,label('0'), hidden];
$Refb Translation($ROb,0,25)[hidden];
$Rayb Ray($Refb,$ROb)[black, hidden];
$Rykkb Point on object($Rayb,1)[white, label('1'), hidden];
$R1b FixedPoint(380,175)[white,label('1'), hidden];
$RLb Line($Rykkb,$ROb)[black, hidden];
$bUp FixedPoint(380,0)[hidden];
$bLo FixedPoint(380,385)[hidden];
$SLb Segment($bUp,$bLo)[black,hidden];
$Rptb1 Point on object($RLb,4)[label('b1'), red, layer(10), hidden];
$b1 Ratio/Points($ROb,$Rykkb,$Rptb1,205,50,'')[red];
$Rptb2 Point on object($RLb,-3)[label('b2'), blue, layer(10), hidden];
$b2 Ratio/Points($ROb,$Rykkb,$Rptb2,205,65,'')[blue];
$Rptb3 Point on object($RLb,2)[label('b3'), color(0,150,0), layer(10), hidden];
$b3 Ratio/Points($ROb,$Rykkb,$Rptb3,205,80,'')[color(0,150,0)];
${
The virtual space
$}
$Origo FixedPoint(200,250)[black, label('0')];
$xykkRef Point(180,260)[red, hidden];
$yykkRef Point(225,255)[blue, hidden];
$zykkRef Point(200,230)[green,hidden];
$xRay Ray($xykkRef,$Origo)[ hidden];
$xykk Point on object( $xRay,1)[ white, label('1')];
$xRL Line($xykk,$Origo)[ red];
$yRay Ray($yykkRef,$Origo)[ hidden];
$yykk Point on object( $yRay,1)[ white, label('1')];
$yRL Line($yykk,$Origo)[ blue];
$zRay Ray($zykkRef,$Origo)[ hidden];
$zykk Point on object( $zRay,1)[ white, label('1')];
$zRL Line($zykk,$Origo)[color(0,150,0),hidden];
$zUp FixedPoint(200,0)[hidden];
$zLo FixedPoint(200,385)[hidden];
$zvisib Segment($zUp,$zLo)[color(0,150,0)];
$xb1 Dilation/3PtRatio($xykk,$Origo,$ROb,$Rykkb,$Rptb1)[red, label('b1')];
$yb2 Dilation/3PtRatio($yykk,$Origo,$ROb,$Rykkb,$Rptb2)[blue, label('b2')];
$zb3 Dilation/3PtRatio($zykk,$Origo,$ROb,$Rykkb,$Rptb3)[color(0,150,0), label('b3')];
$b1b2 VectorTranslation($xb1,$Origo,$yb2)[magenta, label('(b1,b2)')];
$Sb1b2x Segment($xb1,$b1b2)[blue];
$Sb1b2y Segment($yb2,$b1b2)[red];
$SOb1b2 Segment($Origo,$b1b2)[magenta];
$b VectorTranslation($b1b2,$Origo,$zb3)[black, label('b')];
$Sbb1b2 Segment($b1b2,$b)[color(0,150,0)];
$SOb Segment($Origo,$b)[black,thick];
$Rpta11 Point on object($RL,2)[label('a11'), red, layer(10),hidden];
$a11 Ratio/Points($RO,$Rykk,$Rpta11,0,50,'')[red];
$Rpta12 Point on object($RL,-3)[label('a12'), red, layer(10),hidden];
$a12 Ratio/Points($RO,$Rykk,$Rpta12,52,50,'')[red];
$Rpta21 Point on object($RL,3)[label('a21'), blue, layer(10),hidden];
$a21 Ratio/Points($RO,$Rykk,$Rpta21,0,65,'')[blue];
$Rpta22 Point on object($RL,-2)[label('a22'),blue, layer(10),hidden];
$a22 Ratio/Points($RO,$Rykk,$Rpta22,52,65,'')[blue];
$Rpta31 Point on object($RL,1)[label('a31'),color(0,150,0), layer(10),hidden];
$a31 Ratio/Points($RO,$Rykk,$Rpta31,0,80,'')[color(0,150,0)];
$Rpta32 Point on object($RL,1)[label('a32'),color(0,150,0), layer(10),hidden];
$a32 Ratio/Points($RO,$Rykk,$Rpta32,52,80,'')[color(0,150,0)];
$x1x2 Point(240,270)[red,label('x'),hidden];
$SOx1x2 Segment($Origo,$x1x2)[black,hidden];
$x1Parx2 Parallel($yRL,$x1x2)[blue,hidden];
$Rptx1 Intersect($xRL,$x1Parx2)[black, label('x1'),hidden];
$Sx1x2x1 Segment($x1x2,$Rptx1)[blue,hidden];
$x1 Ratio/Points($Origo,$xykk,$Rptx1,0,120,'x1 = ')[black,hidden];
$x2Parx2 Parallel($xRL,$x1x2)[red,hidden];
$Rptx2 Intersect($yRL,$x2Parx2)[black, label('x2'),hidden];
$Sx1x2x2 Segment($x1x2,$Rptx2)[red,hidden];
$x2 Ratio/Points($Origo,$yykk,$Rptx2,0,140,'x2 = ')[black,hidden];
${
The scalar products
$}
$a1x Calculate(145, 50,'','AB* CD* +')($a11,$x1,$a12,$x2)[red,hidden];
$a2x Calculate(145, 65,'','AB* CD* +')($a21,$x1,$a22,$x2)[blue,hidden];
$a3x Calculate(145, 80,'','AB* CD* +')($a31,$x1,$a32,$x2)[color(0,150,0),hidden];
$RptAx1 Dilation/MarkedRatio($xykk,$Origo,$a1x)[red,label('b1'''),hidden];
$RptAx2 Dilation/MarkedRatio($yykk,$Origo,$a2x)[blue,label('b2'''),hidden];
$RptAx3 Dilation/MarkedRatio($zykk,$Origo,$a3x)[color(0,150,0),label('b3'''),hidden];
$b1b2pr VectorTranslation($RptAx1,$Origo,$RptAx2)[magenta, label('(b1'',b2'')'),hidden];
$Sb1b2pr1 Segment($RptAx1,$b1b2pr)[blue,hidden];
$Sb1b2pr2 Segment($RptAx2,$b1b2pr)[red,hidden];
$SOb1b2pr Segment($Origo,$b1b2pr)[magenta,hidden];
$bpr VectorTranslation($b1b2pr,$Origo,$RptAx3)[black, label('b'''),hidden];
$Sbb1b2pr Segment($b1b2pr,$bpr)[color(0,150,0),hidden];
$SObpr Segment($Origo,$bpr)[black,thick,hidden];
${
The least squares solution X
$}
$A Calculate(205, 10,'A = ','A2^ B2^ + C2^ +')($a11,$a21,$a31)[black,hidden];
$B Calculate(205, 25,'B = ','AD* BE* + CF* +')($a11,$a21,$a31,$a12,$a22,$a32)[black,hidden];
$C Calculate(205, 40,'C = ','A2^ B2^ + C2^ +')($a12,$a22,$a32)[black,hidden];
$D Calculate(205, 55,'D = ','AD* BE* + CF* +')($a11,$a21,$a31,$b1,$b2,$b3)[black,hidden];
$E Calculate(205, 70,'E = ','AD* BE* + CF* +')($a12,$a22,$a32,$b1,$b2,$b3)[black,hidden];
$det Calculate(205, 85,'det = ','AC* BB* -')($A,$B,$C)[black,hidden];
$X1 Calculate(100,120,'X1 = ','AD* BC* - E /')($D,$B,$E,$C,$det)[black,hidden];
$X2 Calculate(100,140,'X2 = ','AD* BC* - E /')($A,$D,$B,$E,$det)[black,hidden];
$RptX1 Dilation/MarkedRatio($xykk,$Origo,$X1)[red, label('X1'),hidden];
$RptX2 Dilation/MarkedRatio($yykk,$Origo,$X2)[blue,label('X2'),hidden];
$X VectorTranslation($RptX1,$Origo,$RptX2)[magenta, label('X'),hidden];
$Xtr VectorTranslation($RptX1,$Origo,$RptX2)[magenta, label('X'),hidden,traced];
$SXX1 Segment($RptX1,$X)[blue,hidden];
$SXX2 Segment($RptX2,$X)[red,hidden];
$SOX Segment($Origo,$X)[magenta,hidden];
$ALeUp FixedPoint(0,38)[hidden];
$ARiUp FixedPoint(100,38)[hidden];
$ARiLo FixedPoint(100,85)[hidden];
$ALeLo FixedPoint( 0,85)[hidden];
$APol Polygon($ALeUp,$ARiUp,$ARiLo,$ALeLo)[yellow];
$xLeUp FixedPoint(103,45)[hidden];
$xRiUp FixedPoint(125,45)[hidden];
$xRiLo FixedPoint(125,78)[hidden];
$xLeLo FixedPoint(103,78)[hidden];
$xPol Polygon($xLeUp,$xRiUp,$xRiLo,$xLeLo)[color(220,220,220)];
$xLeUp2 FixedPoint( 0,110)[hidden];
$xRiUp2 FixedPoint(87,110)[hidden];
$xRiLo2 FixedPoint(87,142)[hidden];
$xLeLo2 FixedPoint( 0,142)[hidden];
$xPol2 Polygon($xLeUp2,$xRiUp2,$xRiLo2,$xLeLo2)[color(220,220,220),hidden];
$bprLeUp FixedPoint(140,38)[hidden];
$bprRiUp FixedPoint(198,38)[hidden];
$bprRiLo FixedPoint(198,85)[hidden];
$bprLeLo FixedPoint(140,85)[hidden];
$bprPol Polygon($bprLeUp,$bprRiUp,$bprRiLo,$bprLeLo)[color(240,200,200),hidden];
$bLeUp FixedPoint(202,38)[hidden];
$bRiUp FixedPoint(250,38)[hidden];
$bRiLo FixedPoint(250,85)[hidden];
$bLeLo FixedPoint(202,85)[hidden];
$bPol Polygon($bLeUp,$bRiUp,$bRiLo,$bLeLo)[color(200,240,200)];
$ObPol Polygon($Origo,$b, $b1b2, $Origo)[color(200,240,200),layer(10)];
$ObPolpr Polygon($Origo,$bpr,$b1b2pr,$Origo)[color(240,200,200),layer(10),hidden];
$SBx ShowButton( 0,87,'Try x')($x1x2,$SOx1x2,$Rptx1,$Sx1x2x1,$x1,$Rptx2,$Sx1x2x2,$x2,$xPol2)[red,bold];
$HBx HideButton(42,88,'Hide')( $x1x2,$SOx1x2,$Rptx1,$Sx1x2x1,$x1,$Rptx2,$Sx1x2x2,$x2,$xPol2)[red];
$SBXtr ShowButton( 0,160,'Trace X')($Xtr)[blue,hidden];
$HBXtr HideButton(60,160,'Stop')($Xtr)[blue,hidden];
$SBX ShowButton(100,87,'LSQR X')($X1,$X2,$RptX1,$RptX2,$X,$SXX1,$SXX2,$SOX,$SBXtr,$HBXtr)[magenta,bold];
$SBX HideButton(163,88,'Hide')( $X1,$X2,$RptX1,$RptX2,$X,$SXX1,$SXX2,$SOX,$SBXtr,$HBXtr)[magenta];
$SBRL ShowButton( 0,365,'Change A')($RO,$R1,$RL,$Rpta11,$Rpta12,$Rpta21,$Rpta22,$Rpta31,$Rpta32,$RectA)[black,bold];
$HBRL HideButton(72,366,'Fix')( $RO,$R1,$RL,$Rpta11,$Rpta12,$Rpta21,$Rpta22,$Rpta31,$Rpta32,$RectA)[black];
$SBRLb ShowButton(278,364,'Change b')($ROb,$R1b,$SLb,$Rptb1,$Rptb2,$Rptb3,$Rectb)[black,bold];
$HBRLb HideButton(346,365,'Fix')( $ROb,$R1b,$SLb,$Rptb1,$Rptb2,$Rptb3,$Rectb)[black];
$SRes Segment($b,$bpr)[cyan,hidden];
$Res Calculate(250, 35,'|Ax-b| = ','AB- 2^ CD- 2^ + EF- 2^ + @sqrt')($b1,$a1x,$b2,$a2x,$b3,$a3x)[black,hidden];
$SBRes ShowButton(271,0,'Residual')($Res,$SRes)[black,bold,hidden];
$HBRes HideButton(336,1,'Hide')( $Res,$SRes)[black,hidden];
$SBAx ShowButton(118,0,'Ax')( $AxText,$a1x,$a2x,$a3x,$bprPol,$b1b2pr,$Sb1b2pr1,$Sb1b2pr2,$SOb1b2pr,$bpr,$Sbb1b2pr,$SObpr,$ObPolpr,$SBRes,$HBRes)[color(240,200,200),bold];
$HBAx HideButton(145,0,'Hide')($AxText,$a1x,$a2x,$a3x,$bprPol,$b1b2pr,$Sb1b2pr1,$Sb1b2pr2,$SOb1b2pr,$bpr,$Sbb1b2pr,$SObpr,$ObPolpr,$SBRes,$HBRes,$Res,$SRes)[color(240,200,200)];
$SBeq ShowButton(0,0,'Equation')($a11,$a12,$b1,$a21,$a22,$b2,$a31,$a32,$b3,$AText,$xText,$x1Text,$x2Text,$eqsign,$bText,$APol,$xPol,$bPol)[black,bold];
$HBeq HideButton(65,0,'Hide')( $a11,$a12,$b1,$a21,$a22,$b2,$a31,$a32,$b3,$AText,$xText,$x1Text,$x2Text,$eqsign,$bText,$APol,$xPol,$bPol)[black,bold];
Martti.Pesonen@Joensuu.Fi 2003