Where did this useful matrix decomposition come from for Nodal Analysis? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern)Ebers–Moll model aF? Where does it come from?Singular matrix in nodal analysis?Does the resistor values used for opamp circuits come from the equations?Finding current over controllable voltage source using nodal analysisDetermine Y-parameters for given circuit. [Used Nodal Analysis]

Asymptotics question

Why does electrolysis of aqueous concentrated sodium bromide produce bromine at the anode?

How to write capital alpha?

How can I prevent/balance waiting and turtling as a response to cooldown mechanics

Found this skink in my tomato plant bucket. Is he trapped? Or could he leave if he wanted?

What does 丫 mean? 丫是什么意思?

Was Kant an Intuitionist about mathematical objects?

What order were files/directories output in dir?

Is multiple magic items in one inherently imbalanced?

Random body shuffle every night—can we still function?

Getting out of while loop on console

Project Euler #1 in C++

Tannaka duality for semisimple groups

Moving a wrapfig vertically to encroach partially on a subsection title

Why complex landing gears are used instead of simple,reliability and light weight muscle wire or shape memory alloys?

Can two people see the same photon?

One-one communication

Where is the Next Backup Size entry on iOS 12?

Test print coming out spongy

How does light 'choose' between wave and particle behaviour?

Can an iPhone 7 be made to function as a NFC Tag?

Is openssl rand command cryptographically secure?

How to ask rejected full-time candidates to apply to teach individual courses?

I got rid of Mac OSX and replaced it with linux but now I can't change it back to OSX or windows



Where did this useful matrix decomposition come from for Nodal Analysis?



Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern)Ebers–Moll model aF? Where does it come from?Singular matrix in nodal analysis?Does the resistor values used for opamp circuits come from the equations?Finding current over controllable voltage source using nodal analysisDetermine Y-parameters for given circuit. [Used Nodal Analysis]



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








1












$begingroup$


Background



The equations formed when finding the nodal voltages of a circuit can be expressed using nodal analysis as a square system matrix $mathbfS$ (lets say $mtimes m$) which describes the connections and values of the conductances that correspond to these connections, and can express a whole circuit as
$$
mathbfSv = mathbfi
$$

where $mathbfv$ is the collection of nodal voltages and $mathbfi$ are the input current sources.



Super useful matrix decomposition



In this paper, I have seen this decomposed into (for a single impedance type, e.g. resistance)
$$
mathbfS = mathbfN G N^mathrmT
$$

where $mathbfN$ specifies the connections, and is an $mtimes m$ incidence matrix which contain only values of 1, 0 and -1, and $mathbfG$ is an $mtimes m$ diagonal matrix containing the conductance values.



This is a ridiculously useful property as it separates the conductances from the connections making them both easily readable. No matrix decompositions I've read up on have made it clear how this works or how you'd intuitively think to apply this decomposition. Could someone explain this?



Notes



The paper actually uses modified nodal analysis but this doesn't change the application as the decomposition is only used on the nodal aspects of the circuit, not the voltage sources.










share|improve this question









$endgroup$


















    1












    $begingroup$


    Background



    The equations formed when finding the nodal voltages of a circuit can be expressed using nodal analysis as a square system matrix $mathbfS$ (lets say $mtimes m$) which describes the connections and values of the conductances that correspond to these connections, and can express a whole circuit as
    $$
    mathbfSv = mathbfi
    $$

    where $mathbfv$ is the collection of nodal voltages and $mathbfi$ are the input current sources.



    Super useful matrix decomposition



    In this paper, I have seen this decomposed into (for a single impedance type, e.g. resistance)
    $$
    mathbfS = mathbfN G N^mathrmT
    $$

    where $mathbfN$ specifies the connections, and is an $mtimes m$ incidence matrix which contain only values of 1, 0 and -1, and $mathbfG$ is an $mtimes m$ diagonal matrix containing the conductance values.



    This is a ridiculously useful property as it separates the conductances from the connections making them both easily readable. No matrix decompositions I've read up on have made it clear how this works or how you'd intuitively think to apply this decomposition. Could someone explain this?



    Notes



    The paper actually uses modified nodal analysis but this doesn't change the application as the decomposition is only used on the nodal aspects of the circuit, not the voltage sources.










    share|improve this question









    $endgroup$














      1












      1








      1





      $begingroup$


      Background



      The equations formed when finding the nodal voltages of a circuit can be expressed using nodal analysis as a square system matrix $mathbfS$ (lets say $mtimes m$) which describes the connections and values of the conductances that correspond to these connections, and can express a whole circuit as
      $$
      mathbfSv = mathbfi
      $$

      where $mathbfv$ is the collection of nodal voltages and $mathbfi$ are the input current sources.



      Super useful matrix decomposition



      In this paper, I have seen this decomposed into (for a single impedance type, e.g. resistance)
      $$
      mathbfS = mathbfN G N^mathrmT
      $$

      where $mathbfN$ specifies the connections, and is an $mtimes m$ incidence matrix which contain only values of 1, 0 and -1, and $mathbfG$ is an $mtimes m$ diagonal matrix containing the conductance values.



      This is a ridiculously useful property as it separates the conductances from the connections making them both easily readable. No matrix decompositions I've read up on have made it clear how this works or how you'd intuitively think to apply this decomposition. Could someone explain this?



      Notes



      The paper actually uses modified nodal analysis but this doesn't change the application as the decomposition is only used on the nodal aspects of the circuit, not the voltage sources.










      share|improve this question









      $endgroup$




      Background



      The equations formed when finding the nodal voltages of a circuit can be expressed using nodal analysis as a square system matrix $mathbfS$ (lets say $mtimes m$) which describes the connections and values of the conductances that correspond to these connections, and can express a whole circuit as
      $$
      mathbfSv = mathbfi
      $$

      where $mathbfv$ is the collection of nodal voltages and $mathbfi$ are the input current sources.



      Super useful matrix decomposition



      In this paper, I have seen this decomposed into (for a single impedance type, e.g. resistance)
      $$
      mathbfS = mathbfN G N^mathrmT
      $$

      where $mathbfN$ specifies the connections, and is an $mtimes m$ incidence matrix which contain only values of 1, 0 and -1, and $mathbfG$ is an $mtimes m$ diagonal matrix containing the conductance values.



      This is a ridiculously useful property as it separates the conductances from the connections making them both easily readable. No matrix decompositions I've read up on have made it clear how this works or how you'd intuitively think to apply this decomposition. Could someone explain this?



      Notes



      The paper actually uses modified nodal analysis but this doesn't change the application as the decomposition is only used on the nodal aspects of the circuit, not the voltage sources.







      math nodal-analysis






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked 7 hours ago









      loudnoisesloudnoises

      1,382920




      1,382920




















          2 Answers
          2






          active

          oldest

          votes


















          1












          $begingroup$

          According to the document you linked, it appears to me that $mathbfN$ isn't $mtimes m$. Instead, it has one row per two-terminal circuit element (from a quick reading) and one column for each circuit node.



          This technique has been used for decades in computing to create connections. I've used them for finding Hamiltonian cycles in graphs, for example. It's a really simple way of expressing connections.



          For example, here's a 35-year old piece of code I wrote to test out a method for finding the existence of such cycles:



          #include <stdio.h>
          #include <stdlib.h>
          typedef enum false= 0, true= 1 bool_t;
          void hamPrint( int n, int *path )
          int i;
          for ( i= 0; i < n; ++i )
          printf( " %d ", path[i] );
          printf( " %dn", path[0] );
          return;

          bool_t hamOkay( int n, int v, bool_t *graph, int *path, int pos )
          int i;
          if ( graph[ path[pos-1]*n + v ] == false ) return false;
          for ( i= 0; i < pos; ++i ) if ( path[i] == v ) return false;
          return true;

          bool_t hamCycleSolver( int n, bool_t *graph, int *path, int pos )
          int v;
          if ( pos == n )
          return graph[ path[pos-1]*n + path[0] ];
          for ( v= 1; v < n; ++v )
          if ( hamOkay( n, v, graph, path, pos ) )
          path[pos]= v;
          if ( hamCycleSolver( n, graph, path, pos+1 ) == true )
          return true;
          path[pos]= -1;

          return false;

          bool_t hamCycleExist( int n, bool_t *graph )
          bool_t stat;
          int i, *path= (int *) malloc( sizeof(int) * n );
          if ( path == NULL ) return false;
          for ( i= 0; i < n; ++i )
          path[i]= -1;
          path[0]= 0;
          stat= hamCycleSolver( n, graph, path, 1 );
          if ( stat == true ) hamPrint( n, path );
          free( path );
          return stat;

          bool_t graph[][5]= */
          0, 1, 0, 0, 1 , /* ;
          int main( void )
          if ( hamCycleExist( sizeof(graph)/sizeof(graph[0]), (bool_t *) graph ) )
          printf( "Graph is Hamiltoniann" );
          else
          printf( "Graph is not Hamiltoniann" );
          return 0;



          Take note of the use of a connection matrix in the matrix graph. In this case, the connections must be specified in both directions. So there are "1"s specified to connect, for example, node 0 to node 1 and also node 1 to node 0. So it's easy to change this matrix to specify a path from node 0 to node 1 without specifying a path from node 1 to node 0, here. I just didn't do that, in the above case. All connections there are explicitly arranged to work in both directions.



          If interested, you can simply multiply such a matrix by an appropriate vector to get a vector of connections for each entry in the appropriate vector, too.



          In any case, here is a web page I readily found on google that may also help demonstrate that these ideas have been around for a long time and are in regular use:
          Graph representations.



          I had simply borrowed the idea, myself. I didn't invent it. So it pre-dates my use. And that means it is practically ancient. ;) I wouldn't be the least bit surprised to hear it dates into the 1800's.






          share|improve this answer











          $endgroup$




















            1












            $begingroup$

            I'm no mathematician but I feel strongly this is related to the singular value decomposition (SVD) or eigendecomposition.



            I first came across SVD in the context of modelling MIMO communication systems, particularly those using spatial multiplexing. I'll try to detail this to explain why I think it relates to your problem which I am not able to answer directly.



            Consider a time-invariant, noiseless MIMO channel. This can be represented as.



            $
            mathbfy = H(omega)mathbfx
            $



            Where H is a matrix of transfer functions between the various parallel channels. Ideally, H would be diagonal and there would be no coupling between each channel. The presence of off-diagonal entries means that equalization will be required to prevent the channels interfering.



            The SVD decomposes H into



            $
            H = ULambda V^*
            $



            Where $U$ and $V$ can be thought of as rotations and $Lambda $ is a diagonal matrix that simply scales each channel individually. $U$ and $V$ are both unitary matrices, so their inverses are their conjugate transposes. The columns of U and V also form orthonormal basis, so they can be thought of as the natural 'coordinate system' for solving the problem.



            Intuitively, it takes the input channels, which are not orthogonal, and applies a transformation at the input and output that makes the behavior of the channel very simple, just attenuation (the matrix $Lambda $).



            This has application to equalization, if we pre-multiply our input signals with $V$, pass it through the channel, and apply $U^*$ to the output. We get,



            $
            mathbfy = U^*ULambda V^*Vmathbfx \
            mathbfy = Lambda mathbfx
            $



            Which gives us completely orthogonal channels that do not interfere. This reminds me very much of your problem, the connection matrices being the natural orthogonal basis to use, and the conductances simply scaling these.



            The SVD also has some interesting applications in image processing



            Edit: The decomposition in question is definitely an eigenvalue decomposition, of which the SVD can be thought of as a generalization.






            share|improve this answer









            $endgroup$













              Your Answer






              StackExchange.ifUsing("editor", function ()
              return StackExchange.using("schematics", function ()
              StackExchange.schematics.init();
              );
              , "cicuitlab");

              StackExchange.ready(function()
              var channelOptions =
              tags: "".split(" "),
              id: "135"
              ;
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function()
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled)
              StackExchange.using("snippets", function()
              createEditor();
              );

              else
              createEditor();

              );

              function createEditor()
              StackExchange.prepareEditor(
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: false,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: null,
              bindNavPrevention: true,
              postfix: "",
              imageUploader:
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              ,
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              );



              );













              draft saved

              draft discarded


















              StackExchange.ready(
              function ()
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2felectronics.stackexchange.com%2fquestions%2f433641%2fwhere-did-this-useful-matrix-decomposition-come-from-for-nodal-analysis%23new-answer', 'question_page');

              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              1












              $begingroup$

              According to the document you linked, it appears to me that $mathbfN$ isn't $mtimes m$. Instead, it has one row per two-terminal circuit element (from a quick reading) and one column for each circuit node.



              This technique has been used for decades in computing to create connections. I've used them for finding Hamiltonian cycles in graphs, for example. It's a really simple way of expressing connections.



              For example, here's a 35-year old piece of code I wrote to test out a method for finding the existence of such cycles:



              #include <stdio.h>
              #include <stdlib.h>
              typedef enum false= 0, true= 1 bool_t;
              void hamPrint( int n, int *path )
              int i;
              for ( i= 0; i < n; ++i )
              printf( " %d ", path[i] );
              printf( " %dn", path[0] );
              return;

              bool_t hamOkay( int n, int v, bool_t *graph, int *path, int pos )
              int i;
              if ( graph[ path[pos-1]*n + v ] == false ) return false;
              for ( i= 0; i < pos; ++i ) if ( path[i] == v ) return false;
              return true;

              bool_t hamCycleSolver( int n, bool_t *graph, int *path, int pos )
              int v;
              if ( pos == n )
              return graph[ path[pos-1]*n + path[0] ];
              for ( v= 1; v < n; ++v )
              if ( hamOkay( n, v, graph, path, pos ) )
              path[pos]= v;
              if ( hamCycleSolver( n, graph, path, pos+1 ) == true )
              return true;
              path[pos]= -1;

              return false;

              bool_t hamCycleExist( int n, bool_t *graph )
              bool_t stat;
              int i, *path= (int *) malloc( sizeof(int) * n );
              if ( path == NULL ) return false;
              for ( i= 0; i < n; ++i )
              path[i]= -1;
              path[0]= 0;
              stat= hamCycleSolver( n, graph, path, 1 );
              if ( stat == true ) hamPrint( n, path );
              free( path );
              return stat;

              bool_t graph[][5]= */
              0, 1, 0, 0, 1 , /* ;
              int main( void )
              if ( hamCycleExist( sizeof(graph)/sizeof(graph[0]), (bool_t *) graph ) )
              printf( "Graph is Hamiltoniann" );
              else
              printf( "Graph is not Hamiltoniann" );
              return 0;



              Take note of the use of a connection matrix in the matrix graph. In this case, the connections must be specified in both directions. So there are "1"s specified to connect, for example, node 0 to node 1 and also node 1 to node 0. So it's easy to change this matrix to specify a path from node 0 to node 1 without specifying a path from node 1 to node 0, here. I just didn't do that, in the above case. All connections there are explicitly arranged to work in both directions.



              If interested, you can simply multiply such a matrix by an appropriate vector to get a vector of connections for each entry in the appropriate vector, too.



              In any case, here is a web page I readily found on google that may also help demonstrate that these ideas have been around for a long time and are in regular use:
              Graph representations.



              I had simply borrowed the idea, myself. I didn't invent it. So it pre-dates my use. And that means it is practically ancient. ;) I wouldn't be the least bit surprised to hear it dates into the 1800's.






              share|improve this answer











              $endgroup$

















                1












                $begingroup$

                According to the document you linked, it appears to me that $mathbfN$ isn't $mtimes m$. Instead, it has one row per two-terminal circuit element (from a quick reading) and one column for each circuit node.



                This technique has been used for decades in computing to create connections. I've used them for finding Hamiltonian cycles in graphs, for example. It's a really simple way of expressing connections.



                For example, here's a 35-year old piece of code I wrote to test out a method for finding the existence of such cycles:



                #include <stdio.h>
                #include <stdlib.h>
                typedef enum false= 0, true= 1 bool_t;
                void hamPrint( int n, int *path )
                int i;
                for ( i= 0; i < n; ++i )
                printf( " %d ", path[i] );
                printf( " %dn", path[0] );
                return;

                bool_t hamOkay( int n, int v, bool_t *graph, int *path, int pos )
                int i;
                if ( graph[ path[pos-1]*n + v ] == false ) return false;
                for ( i= 0; i < pos; ++i ) if ( path[i] == v ) return false;
                return true;

                bool_t hamCycleSolver( int n, bool_t *graph, int *path, int pos )
                int v;
                if ( pos == n )
                return graph[ path[pos-1]*n + path[0] ];
                for ( v= 1; v < n; ++v )
                if ( hamOkay( n, v, graph, path, pos ) )
                path[pos]= v;
                if ( hamCycleSolver( n, graph, path, pos+1 ) == true )
                return true;
                path[pos]= -1;

                return false;

                bool_t hamCycleExist( int n, bool_t *graph )
                bool_t stat;
                int i, *path= (int *) malloc( sizeof(int) * n );
                if ( path == NULL ) return false;
                for ( i= 0; i < n; ++i )
                path[i]= -1;
                path[0]= 0;
                stat= hamCycleSolver( n, graph, path, 1 );
                if ( stat == true ) hamPrint( n, path );
                free( path );
                return stat;

                bool_t graph[][5]= */
                0, 1, 0, 0, 1 , /* ;
                int main( void )
                if ( hamCycleExist( sizeof(graph)/sizeof(graph[0]), (bool_t *) graph ) )
                printf( "Graph is Hamiltoniann" );
                else
                printf( "Graph is not Hamiltoniann" );
                return 0;



                Take note of the use of a connection matrix in the matrix graph. In this case, the connections must be specified in both directions. So there are "1"s specified to connect, for example, node 0 to node 1 and also node 1 to node 0. So it's easy to change this matrix to specify a path from node 0 to node 1 without specifying a path from node 1 to node 0, here. I just didn't do that, in the above case. All connections there are explicitly arranged to work in both directions.



                If interested, you can simply multiply such a matrix by an appropriate vector to get a vector of connections for each entry in the appropriate vector, too.



                In any case, here is a web page I readily found on google that may also help demonstrate that these ideas have been around for a long time and are in regular use:
                Graph representations.



                I had simply borrowed the idea, myself. I didn't invent it. So it pre-dates my use. And that means it is practically ancient. ;) I wouldn't be the least bit surprised to hear it dates into the 1800's.






                share|improve this answer











                $endgroup$















                  1












                  1








                  1





                  $begingroup$

                  According to the document you linked, it appears to me that $mathbfN$ isn't $mtimes m$. Instead, it has one row per two-terminal circuit element (from a quick reading) and one column for each circuit node.



                  This technique has been used for decades in computing to create connections. I've used them for finding Hamiltonian cycles in graphs, for example. It's a really simple way of expressing connections.



                  For example, here's a 35-year old piece of code I wrote to test out a method for finding the existence of such cycles:



                  #include <stdio.h>
                  #include <stdlib.h>
                  typedef enum false= 0, true= 1 bool_t;
                  void hamPrint( int n, int *path )
                  int i;
                  for ( i= 0; i < n; ++i )
                  printf( " %d ", path[i] );
                  printf( " %dn", path[0] );
                  return;

                  bool_t hamOkay( int n, int v, bool_t *graph, int *path, int pos )
                  int i;
                  if ( graph[ path[pos-1]*n + v ] == false ) return false;
                  for ( i= 0; i < pos; ++i ) if ( path[i] == v ) return false;
                  return true;

                  bool_t hamCycleSolver( int n, bool_t *graph, int *path, int pos )
                  int v;
                  if ( pos == n )
                  return graph[ path[pos-1]*n + path[0] ];
                  for ( v= 1; v < n; ++v )
                  if ( hamOkay( n, v, graph, path, pos ) )
                  path[pos]= v;
                  if ( hamCycleSolver( n, graph, path, pos+1 ) == true )
                  return true;
                  path[pos]= -1;

                  return false;

                  bool_t hamCycleExist( int n, bool_t *graph )
                  bool_t stat;
                  int i, *path= (int *) malloc( sizeof(int) * n );
                  if ( path == NULL ) return false;
                  for ( i= 0; i < n; ++i )
                  path[i]= -1;
                  path[0]= 0;
                  stat= hamCycleSolver( n, graph, path, 1 );
                  if ( stat == true ) hamPrint( n, path );
                  free( path );
                  return stat;

                  bool_t graph[][5]= */
                  0, 1, 0, 0, 1 , /* ;
                  int main( void )
                  if ( hamCycleExist( sizeof(graph)/sizeof(graph[0]), (bool_t *) graph ) )
                  printf( "Graph is Hamiltoniann" );
                  else
                  printf( "Graph is not Hamiltoniann" );
                  return 0;



                  Take note of the use of a connection matrix in the matrix graph. In this case, the connections must be specified in both directions. So there are "1"s specified to connect, for example, node 0 to node 1 and also node 1 to node 0. So it's easy to change this matrix to specify a path from node 0 to node 1 without specifying a path from node 1 to node 0, here. I just didn't do that, in the above case. All connections there are explicitly arranged to work in both directions.



                  If interested, you can simply multiply such a matrix by an appropriate vector to get a vector of connections for each entry in the appropriate vector, too.



                  In any case, here is a web page I readily found on google that may also help demonstrate that these ideas have been around for a long time and are in regular use:
                  Graph representations.



                  I had simply borrowed the idea, myself. I didn't invent it. So it pre-dates my use. And that means it is practically ancient. ;) I wouldn't be the least bit surprised to hear it dates into the 1800's.






                  share|improve this answer











                  $endgroup$



                  According to the document you linked, it appears to me that $mathbfN$ isn't $mtimes m$. Instead, it has one row per two-terminal circuit element (from a quick reading) and one column for each circuit node.



                  This technique has been used for decades in computing to create connections. I've used them for finding Hamiltonian cycles in graphs, for example. It's a really simple way of expressing connections.



                  For example, here's a 35-year old piece of code I wrote to test out a method for finding the existence of such cycles:



                  #include <stdio.h>
                  #include <stdlib.h>
                  typedef enum false= 0, true= 1 bool_t;
                  void hamPrint( int n, int *path )
                  int i;
                  for ( i= 0; i < n; ++i )
                  printf( " %d ", path[i] );
                  printf( " %dn", path[0] );
                  return;

                  bool_t hamOkay( int n, int v, bool_t *graph, int *path, int pos )
                  int i;
                  if ( graph[ path[pos-1]*n + v ] == false ) return false;
                  for ( i= 0; i < pos; ++i ) if ( path[i] == v ) return false;
                  return true;

                  bool_t hamCycleSolver( int n, bool_t *graph, int *path, int pos )
                  int v;
                  if ( pos == n )
                  return graph[ path[pos-1]*n + path[0] ];
                  for ( v= 1; v < n; ++v )
                  if ( hamOkay( n, v, graph, path, pos ) )
                  path[pos]= v;
                  if ( hamCycleSolver( n, graph, path, pos+1 ) == true )
                  return true;
                  path[pos]= -1;

                  return false;

                  bool_t hamCycleExist( int n, bool_t *graph )
                  bool_t stat;
                  int i, *path= (int *) malloc( sizeof(int) * n );
                  if ( path == NULL ) return false;
                  for ( i= 0; i < n; ++i )
                  path[i]= -1;
                  path[0]= 0;
                  stat= hamCycleSolver( n, graph, path, 1 );
                  if ( stat == true ) hamPrint( n, path );
                  free( path );
                  return stat;

                  bool_t graph[][5]= */
                  0, 1, 0, 0, 1 , /* ;
                  int main( void )
                  if ( hamCycleExist( sizeof(graph)/sizeof(graph[0]), (bool_t *) graph ) )
                  printf( "Graph is Hamiltoniann" );
                  else
                  printf( "Graph is not Hamiltoniann" );
                  return 0;



                  Take note of the use of a connection matrix in the matrix graph. In this case, the connections must be specified in both directions. So there are "1"s specified to connect, for example, node 0 to node 1 and also node 1 to node 0. So it's easy to change this matrix to specify a path from node 0 to node 1 without specifying a path from node 1 to node 0, here. I just didn't do that, in the above case. All connections there are explicitly arranged to work in both directions.



                  If interested, you can simply multiply such a matrix by an appropriate vector to get a vector of connections for each entry in the appropriate vector, too.



                  In any case, here is a web page I readily found on google that may also help demonstrate that these ideas have been around for a long time and are in regular use:
                  Graph representations.



                  I had simply borrowed the idea, myself. I didn't invent it. So it pre-dates my use. And that means it is practically ancient. ;) I wouldn't be the least bit surprised to hear it dates into the 1800's.







                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited 5 hours ago

























                  answered 6 hours ago









                  jonkjonk

                  35.3k12876




                  35.3k12876























                      1












                      $begingroup$

                      I'm no mathematician but I feel strongly this is related to the singular value decomposition (SVD) or eigendecomposition.



                      I first came across SVD in the context of modelling MIMO communication systems, particularly those using spatial multiplexing. I'll try to detail this to explain why I think it relates to your problem which I am not able to answer directly.



                      Consider a time-invariant, noiseless MIMO channel. This can be represented as.



                      $
                      mathbfy = H(omega)mathbfx
                      $



                      Where H is a matrix of transfer functions between the various parallel channels. Ideally, H would be diagonal and there would be no coupling between each channel. The presence of off-diagonal entries means that equalization will be required to prevent the channels interfering.



                      The SVD decomposes H into



                      $
                      H = ULambda V^*
                      $



                      Where $U$ and $V$ can be thought of as rotations and $Lambda $ is a diagonal matrix that simply scales each channel individually. $U$ and $V$ are both unitary matrices, so their inverses are their conjugate transposes. The columns of U and V also form orthonormal basis, so they can be thought of as the natural 'coordinate system' for solving the problem.



                      Intuitively, it takes the input channels, which are not orthogonal, and applies a transformation at the input and output that makes the behavior of the channel very simple, just attenuation (the matrix $Lambda $).



                      This has application to equalization, if we pre-multiply our input signals with $V$, pass it through the channel, and apply $U^*$ to the output. We get,



                      $
                      mathbfy = U^*ULambda V^*Vmathbfx \
                      mathbfy = Lambda mathbfx
                      $



                      Which gives us completely orthogonal channels that do not interfere. This reminds me very much of your problem, the connection matrices being the natural orthogonal basis to use, and the conductances simply scaling these.



                      The SVD also has some interesting applications in image processing



                      Edit: The decomposition in question is definitely an eigenvalue decomposition, of which the SVD can be thought of as a generalization.






                      share|improve this answer









                      $endgroup$

















                        1












                        $begingroup$

                        I'm no mathematician but I feel strongly this is related to the singular value decomposition (SVD) or eigendecomposition.



                        I first came across SVD in the context of modelling MIMO communication systems, particularly those using spatial multiplexing. I'll try to detail this to explain why I think it relates to your problem which I am not able to answer directly.



                        Consider a time-invariant, noiseless MIMO channel. This can be represented as.



                        $
                        mathbfy = H(omega)mathbfx
                        $



                        Where H is a matrix of transfer functions between the various parallel channels. Ideally, H would be diagonal and there would be no coupling between each channel. The presence of off-diagonal entries means that equalization will be required to prevent the channels interfering.



                        The SVD decomposes H into



                        $
                        H = ULambda V^*
                        $



                        Where $U$ and $V$ can be thought of as rotations and $Lambda $ is a diagonal matrix that simply scales each channel individually. $U$ and $V$ are both unitary matrices, so their inverses are their conjugate transposes. The columns of U and V also form orthonormal basis, so they can be thought of as the natural 'coordinate system' for solving the problem.



                        Intuitively, it takes the input channels, which are not orthogonal, and applies a transformation at the input and output that makes the behavior of the channel very simple, just attenuation (the matrix $Lambda $).



                        This has application to equalization, if we pre-multiply our input signals with $V$, pass it through the channel, and apply $U^*$ to the output. We get,



                        $
                        mathbfy = U^*ULambda V^*Vmathbfx \
                        mathbfy = Lambda mathbfx
                        $



                        Which gives us completely orthogonal channels that do not interfere. This reminds me very much of your problem, the connection matrices being the natural orthogonal basis to use, and the conductances simply scaling these.



                        The SVD also has some interesting applications in image processing



                        Edit: The decomposition in question is definitely an eigenvalue decomposition, of which the SVD can be thought of as a generalization.






                        share|improve this answer









                        $endgroup$















                          1












                          1








                          1





                          $begingroup$

                          I'm no mathematician but I feel strongly this is related to the singular value decomposition (SVD) or eigendecomposition.



                          I first came across SVD in the context of modelling MIMO communication systems, particularly those using spatial multiplexing. I'll try to detail this to explain why I think it relates to your problem which I am not able to answer directly.



                          Consider a time-invariant, noiseless MIMO channel. This can be represented as.



                          $
                          mathbfy = H(omega)mathbfx
                          $



                          Where H is a matrix of transfer functions between the various parallel channels. Ideally, H would be diagonal and there would be no coupling between each channel. The presence of off-diagonal entries means that equalization will be required to prevent the channels interfering.



                          The SVD decomposes H into



                          $
                          H = ULambda V^*
                          $



                          Where $U$ and $V$ can be thought of as rotations and $Lambda $ is a diagonal matrix that simply scales each channel individually. $U$ and $V$ are both unitary matrices, so their inverses are their conjugate transposes. The columns of U and V also form orthonormal basis, so they can be thought of as the natural 'coordinate system' for solving the problem.



                          Intuitively, it takes the input channels, which are not orthogonal, and applies a transformation at the input and output that makes the behavior of the channel very simple, just attenuation (the matrix $Lambda $).



                          This has application to equalization, if we pre-multiply our input signals with $V$, pass it through the channel, and apply $U^*$ to the output. We get,



                          $
                          mathbfy = U^*ULambda V^*Vmathbfx \
                          mathbfy = Lambda mathbfx
                          $



                          Which gives us completely orthogonal channels that do not interfere. This reminds me very much of your problem, the connection matrices being the natural orthogonal basis to use, and the conductances simply scaling these.



                          The SVD also has some interesting applications in image processing



                          Edit: The decomposition in question is definitely an eigenvalue decomposition, of which the SVD can be thought of as a generalization.






                          share|improve this answer









                          $endgroup$



                          I'm no mathematician but I feel strongly this is related to the singular value decomposition (SVD) or eigendecomposition.



                          I first came across SVD in the context of modelling MIMO communication systems, particularly those using spatial multiplexing. I'll try to detail this to explain why I think it relates to your problem which I am not able to answer directly.



                          Consider a time-invariant, noiseless MIMO channel. This can be represented as.



                          $
                          mathbfy = H(omega)mathbfx
                          $



                          Where H is a matrix of transfer functions between the various parallel channels. Ideally, H would be diagonal and there would be no coupling between each channel. The presence of off-diagonal entries means that equalization will be required to prevent the channels interfering.



                          The SVD decomposes H into



                          $
                          H = ULambda V^*
                          $



                          Where $U$ and $V$ can be thought of as rotations and $Lambda $ is a diagonal matrix that simply scales each channel individually. $U$ and $V$ are both unitary matrices, so their inverses are their conjugate transposes. The columns of U and V also form orthonormal basis, so they can be thought of as the natural 'coordinate system' for solving the problem.



                          Intuitively, it takes the input channels, which are not orthogonal, and applies a transformation at the input and output that makes the behavior of the channel very simple, just attenuation (the matrix $Lambda $).



                          This has application to equalization, if we pre-multiply our input signals with $V$, pass it through the channel, and apply $U^*$ to the output. We get,



                          $
                          mathbfy = U^*ULambda V^*Vmathbfx \
                          mathbfy = Lambda mathbfx
                          $



                          Which gives us completely orthogonal channels that do not interfere. This reminds me very much of your problem, the connection matrices being the natural orthogonal basis to use, and the conductances simply scaling these.



                          The SVD also has some interesting applications in image processing



                          Edit: The decomposition in question is definitely an eigenvalue decomposition, of which the SVD can be thought of as a generalization.







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered 3 hours ago









                          jramsay42jramsay42

                          595127




                          595127



























                              draft saved

                              draft discarded
















































                              Thanks for contributing an answer to Electrical Engineering Stack Exchange!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid


                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.

                              Use MathJax to format equations. MathJax reference.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function ()
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2felectronics.stackexchange.com%2fquestions%2f433641%2fwhere-did-this-useful-matrix-decomposition-come-from-for-nodal-analysis%23new-answer', 'question_page');

                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              Popular posts from this blog

                              یوتیوب محتویات پیشینه[ویرایش] فناوری‌های ویدئویی[ویرایش] شوخی‌های آوریل[ویرایش] سانسور و فیلترینگ[ویرایش] آمار و ارقامی از یوتیوب[ویرایش] تأثیر اجتماعی[ویرایش] سیاست اجتماعی[ویرایش] نمودارها[ویرایش] یادداشت‌ها[ویرایش] پانویس[ویرایش] پیوند به بیرون[ویرایش] منوی ناوبریبررسی شده‌استYouTube.com[بروزرسانی]"Youtube.com Site Info""زبان‌های یوتیوب""Surprise! There's a third YouTube co-founder"سایت یوتیوب برای چندمین بار در ایران فیلتر شدنسخهٔ اصلیسالار کمانگر جوان آمریکایی ایرانی الاصل مدیر سایت یوتیوب شدنسخهٔ اصلیVideo websites pop up, invite postingsthe originalthe originalYouTube: Overnight success has sparked a backlashthe original"Me at the zoo"YouTube serves up 100 million videos a day onlinethe originalcomScore Releases May 2010 U.S. Online Video Rankingsthe originalYouTube hits 4 billion daily video viewsthe originalYouTube users uploading two days of video every minutethe originalEric Schmidt, Princeton Colloquium on Public & Int'l Affairsthe original«Streaming Dreams»نسخهٔ اصلیAlexa Traffic Rank for YouTube (three month average)the originalHelp! YouTube is killing my business!the originalUtube sues YouTubethe originalGoogle closes $A2b YouTube dealthe originalFlash moves on to smart phonesthe originalYouTube HTML5 Video Playerنسخهٔ اصلیYouTube HTML5 Video Playerthe originalGoogle tries freeing Web video with WebMthe originalVideo length for uploadingthe originalYouTube caps video lengths to reduce infringementthe originalAccount Types: Longer videosthe originalYouTube bumps video limit to 15 minutesthe originalUploading large files and resumable uploadingthe originalVideo Formats: File formatsthe originalGetting Started: File formatsthe originalThe quest for a new video codec in Flash 8the originalAdobe Flash Video File Format Specification Version 10.1the originalYouTube Mobile goes livethe originalYouTube videos go HD with a simple hackthe originalYouTube now supports 4k-resolution videosthe originalYouTube to get high-def 1080p playerthe original«Approximate YouTube Bitrates»نسخهٔ اصلی«Bigger and Better: Encoding for YouTube 720p HD»نسخهٔ اصلی«YouTube's 1080p – Failure Depends on How You Look At It»نسخهٔ اصلیYouTube in 3Dthe originalYouTube in 3D?the originalYouTube 3D Videosthe originalYouTube adds a dimension, 3D goggles not includedthe originalYouTube Adds Stereoscopic 3D Video Support (And 3D Vision Support, Too)the original«Sharing YouTube Videos»نسخهٔ اصلی«Downloading videos from YouTube is not supported, except for one instance when it is permitted.»نسخهٔ اصلی«Terms of Use, 5.B»نسخهٔ اصلی«Some YouTube videos get download option»نسخهٔ اصلی«YouTube looks out for content owners, disables video ripping»«Downloading videos from YouTube is not supported, except for one instance when it is permitted.»نسخهٔ اصلی«YouTube Hopes To Boost Revenue With Video Downloads»نسخهٔ اصلی«YouTube Mobile»نسخهٔ اصلی«YouTube Live on Apple TV Today; Coming to iPhone on June 29»نسخهٔ اصلی«Goodbye Flash: YouTube mobile goes HTML5 on iPhone and Android»نسخهٔ اصلی«YouTube Mobile Goes HTML5, Video Quality Beats Native Apps Hands Down»نسخهٔ اصلی«TiVo Getting YouTube Streaming Today»نسخهٔ اصلی«YouTube video comes to Wii and PlayStation 3 game consoles»نسخهٔ اصلی«Coming Up Next... YouTube on Your TV»نسخهٔ اصلی«Experience YouTube XL on the Big Screen»نسخهٔ اصلی«Xbox Live Getting Live TV, YouTube & Bing Voice Search»نسخهٔ اصلی«YouTube content locations»نسخهٔ اصلی«April fools: YouTube turns the world up-side-down»نسخهٔ اصلی«YouTube goes back to 1911 for April Fools' Day»نسخهٔ اصلی«Simon Cowell's bromance, the self-driving Nascar and Hungry Hippos for iPad... the best April Fools' gags»نسخهٔ اصلی"YouTube Announces It Will Shut Down""YouTube Adds Darude 'Sandstorm' Button To Its Videos For April Fools' Day"«Censorship fears rise as Iran blocks access to top websites»نسخهٔ اصلی«China 'blocks YouTube video site'»نسخهٔ اصلی«YouTube shut down in Morocco»نسخهٔ اصلی«Thailand blocks access to YouTube»نسخهٔ اصلی«Ban on YouTube lifted after deal»نسخهٔ اصلی«Google's Gatekeepers»نسخهٔ اصلی«Turkey goes into battle with Google»نسخهٔ اصلی«Turkey lifts two-year ban on YouTube»نسخهٔ اصلیسانسور در ترکیه به یوتیوب رسیدلغو فیلترینگ یوتیوب در ترکیه«Pakistan blocks YouTube website»نسخهٔ اصلی«Pakistan lifts the ban on YouTube»نسخهٔ اصلی«Pakistan blocks access to YouTube in internet crackdown»نسخهٔ اصلی«Watchdog urges Libya to stop blocking websites»نسخهٔ اصلی«YouTube»نسخهٔ اصلی«Due to abuses of religion, customs Emirates, YouTube is blocked in the UAE»نسخهٔ اصلی«Google Conquered The Web - An Ultimate Winner»نسخهٔ اصلی«100 million videos are viewed daily on YouTube»نسخهٔ اصلی«Harry and Charlie Davies-Carr: Web gets taste for biting baby»نسخهٔ اصلی«Meet YouTube's 224 million girl, Natalie Tran»نسخهٔ اصلی«YouTube to Double Down on Its 'Channel' Experiment»نسخهٔ اصلی«13 Some Media Companies Choose to Profit From Pirated YouTube Clips»نسخهٔ اصلی«Irate HK man unlikely Web hero»نسخهٔ اصلی«Web Guitar Wizard Revealed at Last»نسخهٔ اصلی«Charlie bit my finger – again!»نسخهٔ اصلی«Lowered Expectations: Web Redefines 'Quality'»نسخهٔ اصلی«YouTube's 50 Greatest Viral Videos»نسخهٔ اصلیYouTube Community Guidelinesthe original«Why did my YouTube account get closed down?»نسخهٔ اصلی«Why do I have a sanction on my account?»نسخهٔ اصلی«Is YouTube's three-strike rule fair to users?»نسخهٔ اصلی«Viacom will sue YouTube for $1bn»نسخهٔ اصلی«Mediaset Files EUR500 Million Suit Vs Google's YouTube»نسخهٔ اصلی«Premier League to take action against YouTube»نسخهٔ اصلی«YouTube law fight 'threatens net'»نسخهٔ اصلی«Google must divulge YouTube log»نسخهٔ اصلی«Google Told to Turn Over User Data of YouTube»نسخهٔ اصلی«US judge tosses out Viacom copyright suit against YouTube»نسخهٔ اصلی«Google and Viacom: YouTube copyright lawsuit back on»نسخهٔ اصلی«Woman can sue over YouTube clip de-posting»نسخهٔ اصلی«YouTube loses court battle over music clips»نسخهٔ اصلیYouTube to Test Software To Ease Licensing Fightsthe original«Press Statistics»نسخهٔ اصلی«Testing YouTube's Audio Content ID System»نسخهٔ اصلی«Content ID disputes»نسخهٔ اصلیYouTube Community Guidelinesthe originalYouTube criticized in Germany over anti-Semitic Nazi videosthe originalFury as YouTube carries sick Hillsboro video insultthe originalYouTube attacked by MPs over sex and violence footagethe originalAl-Awlaki's YouTube Videos Targeted by Rep. Weinerthe originalYouTube Withdraws Cleric's Videosthe originalYouTube is letting users decide on terrorism-related videosthe original«Time's Person of the Year: You»نسخهٔ اصلی«Our top 10 funniest YouTube comments – what are yours?»نسخهٔ اصلی«YouTube's worst comments blocked by filter»نسخهٔ اصلی«Site Info YouTube»نسخهٔ اصلیوبگاه YouTubeوبگاه موبایل YouTubeوووووو

                              Magento 2 - Auto login with specific URL Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Customer can't login - Page refreshes but nothing happensCustom Login page redirectURL to login with redirect URL after completionCustomer login is case sensitiveLogin with phone number or email address - Magento 1.9Magento 2: Set Customer Account Confirmation StatusCustomer auto connect from URLHow to call customer login form in the custom module action magento 2?Change of customer login error message magento2Referrer URL in modal login form

                              Rest API with Magento using PHP with example. Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?How to update product using magento client library for PHP?Oauth Error while extending Magento Rest APINot showing my custom api in wsdl(url) and web service list?Using Magento API(REST) via IXMLHTTPRequest COM ObjectHow to login in Magento website using REST APIREST api call for Guest userMagento API calling using HTML and javascriptUse API rest media management by storeView code (admin)Magento REST API Example ErrorsHow to log all rest api calls in magento2?How to update product using magento client library for PHP?