How do you Append a Symbolic Matrix?

asked 2016-01-31 17:57:49 -0500

updated 2016-02-02 20:33:45 -0500

To All:

I am trying to make a function that will take a set of dynamics and a set of independent variables that can or cannot be within the dynamics equations to create a "frozen" state space matrix, A. I would like to tell you all now that I am mostly a FORTRAN coder and am in the process of trying to understand SageMath, which is why I am coding in a brute force method.

I previously checked to make sure that the derivative function was producing reasonable answers and created the matrices like this.

rmag = r[0]^2 + r[1]^2 + r[2]^2; 
dyn = -mu*r/rmag^3; # spherical gravity assumption
ddyn_dx = dyn.derivative(r[0]);ddyn_dy = dyn.derivative(r[1]);ddyn_dz = dyn.derivative(r[2]);
pdyn_pr = (transpose(matrix([ddyn_dx,ddyn_dy,ddyn_dz])));

As you might have discovered, this is exceptionally tedious when the number of independent variables get larger. Therefore, I desired to code something like this:

def FindDynMatrix(dynamics,xvect):
    # Find the length of the vector defining the internal variables
    #    within dynamics are independent variables:
    leng = len(xvect);
    for j in range(leng):
        vect = dynamics.derivative(xvect[j]);
        if j == 0:
            mat = vect;
            #mat = mat.append(vect) # didn't work
    return mat

In "FindDynMatrix", symbolic vector that is dependent on a multitude of variables including those within the symbolic vector "xvect". The hope was to "black box" the production of the A matrix for a little controls tool that I am coding up.

However, I can not find a way to get this to work. Help would be appreciated.

edit retag flag offensive close merge delete


It would be easier for us to understand your question if you provide the definition if the list r in your first line (which seems different from the r you used in your second line), the type and an example of mu, xvect, dynamics, ... so that we can try.

tmonteil gravatar imagetmonteil ( 2016-02-01 15:51:04 -0500 )edit

'r' is a vector so the equation is correct. x,y,z = var('x,y,z') mu = var('mu') r = vector([x,y,z]) The variable 'dyn' is just an assumed spherical earth gravitational equation. 'mu' is a constant. One should be able to get 'pdyn_pr' as produced by the first set of equations by calling 'FindDynMatrix' like this, FindDynMatrix(dyn,r)

PleaseNoCyrillicVariables gravatar imagePleaseNoCyrillicVariables ( 2016-02-02 20:32:41 -0500 )edit

I believe that I have found the solution for part of this problem. By calling Jacobian(dyn,r), I can produce 'pdyn_pr'. Reference: (

However, I would still like to know how to append to symbolic matrices for future reference.

PleaseNoCyrillicVariables gravatar imagePleaseNoCyrillicVariables ( 2016-02-02 21:04:32 -0500 )edit