Invert matrix without "circular definition" error

slehar shared this question 7 years ago
Answered

I've got a matrix that displays in 3-D,


https://www.geogebra.org/st...


and I'd like to add a button [Invert] to invert the matrix on the fly, but I get the "circular definition" error when I try M := Invert[M].


I tried making a new matrix MI = Invert[M], but all my graphics routines that draw the matrix are still defined with reference to the original matrix M, and neither can I assign M := MI, that too triggers "circular definition".


Is there a simple solution to this?

Comments (6)

photo
1

Hi,


If M is free, SetValue[M,invert[M]] work


But M isn't free object...then, SetValue[xmag,Elément[Mi,1,1]]....etc

https://ggbm.at/1388489

https://ggbm.at/1388491

photo
1

I've got a matrix that displays in 3-D,

http://tube.geogebra.org/st...

and I'd like to add a button [Invert] to invert the matrix on the fly, but I get the "circular definition" error when I try M := Invert[M].

I tried making a new matrix MI = Invert[M], but all my graphics routines that draw the matrix are still defined with reference to the original matrix M, and neither can I assign M := MI, that too triggers "circular definition".

Is there a simple solution to this?

M':reverse[M] M := Invert[M]

M':inversa[M]

e

photo
1

Hi Patrick,


That worked perfectly for the inverse function, thank you very much!


But when I tried to create a "Transpose" button exactly the same way, that did NOT work!


I created MI = Invert[M] and MT = Transpose[M] which both show the correct values in the Algebra view.


037cb9521e35543fd60e127fc7ec8fee


When I click Invert everything works as expected. But when I click Transpose all three matrices get reset to the identity matrix!


f2cdfe5878cba71fadec39b6d02a4b04


Here is the On Click script for the Invert button, exactly as you suggested (thanks again!)


    SetValue[xmag,Element[MI,1,1]]

    SetValue[xymag,Element[MI,1,2]]

    SetValue[xzmag,Element[MI,1,3]]

    SetValue[yxmag,Element[MI,2,1]]

    SetValue[ymag,Element[MI,2,2]]

    SetValue[yzmag,Element[MI,2,3]]

    SetValue[zxmag,Element[MI,3,1]]

    SetValue[zymag,Element[MI,3,2]]

    SetValue[zmag,Element[MI,3,3]]


And here is the On Click code for the Transpose button, done exactly the same way!


    SetValue[xmag,Element[MT,1,1]]

    SetValue[xymag,Element[MT,1,2]]

    SetValue[xzmag,Element[MT,1,3]]

    SetValue[yxmag,Element[MT,2,1]]

    SetValue[ymag,Element[MT,2,2]]

    SetValue[yzmag,Element[MT,2,3]]

    SetValue[zxmag,Element[MT,3,1]]

    SetValue[zymag,Element[MT,3,2]]

    SetValue[zmag,Element[MT,3,3]]


I even tried doing the transpose "manually" from the original matrix M, i.e. just swapping i,j to j,i, ...


photo
1

Save your work first.


Make a new check box; say b, with text label "Invert?"


Then use the input bar: "N = if[b, invert[M], M]".


Change your vectors to get their values from N using element[N, ,<row>, <column>] instead of referring back to the sliders.


(edited some mistakes)

photo
1

Hi,


Michel said : "in the same time..." !!! :flushed:


thank you Michel : my first file inverseMatrice.ggb is wrong !

because command in script are execute one bye one...and M is degenerated...


In new version Mi and Mt are free objects and are not modified by the script when SetValue[xmag...


(Mii and Mtt are just here to verify...)

https://ggbm.at/1388495

photo
1

Thank you timstudiesmath! That works perfectly!


And to add an Inverted checkbox as well as the Transposed checkbox I made a third inverted-transposed matrix MTI that depends on the transposed matrix MT that depends on the original matrix M.


    M = {{A1, B1, C1}, {A2, B2, C2}, {A3, B3, C3}}

    MT = If[checktransposed, Transpose[M], M]

    MTI = If[checkinverted, Invert[MT], MT]

I'm beginning to understand the "chain of dependencies" idea in geogebra.


Thanks everyone for your help! Here is the result:


http://tube.geogebra.org/st...

© 2022 International GeoGebra Institute