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