MATLAB Answers

How can I get system Matrix A,B and C for my state space system of Spring-Mass damper system of n blocks arranged in uniform way?

10 views (last 30 days)
I am trying to generate equations of motion for Spring mass (damper) system consisting of N blocks. I want to write such a function that automatically creates equations of motion(that fills these matrices A,B,C) just by passing a value of number of masses in a function input arguement. This is what I want ideally. I know the pattern for equation of motion. My system matrix A is something like
[ -2k k 0 0... 0(n);
k -3k k 0.... 0(n);
0 k -3k k 0... 0(n);
0 0 k -3k k 0 .... 0(n);
.. 0(n);
.. 0(n);
0 0............. k -2k ]
where k is stiffness of the spring. This matrix has some kind of uniform pattern as you can see. How can I write a function to this?

  3 Comments

Sandeep Parameshwara
Sandeep Parameshwara on 1 Dec 2019
With n as my function input argument, what i need is n by n matrix as output. So 0(n) just tells that its last zero in n'th column. Sorry for the confusion. Its just a zero. I hope its clear now. So I am looking to generate n by n matrix with above pattern.
Sandeep Parameshwara
Sandeep Parameshwara on 1 Dec 2019
matrix.PNG
Here's a sample matrix to avoid any confusion with my question. Suppose I want to write a function to this pattern(similar to my question above) how do I write a general function?

Sign in to comment.

Accepted Answer

Dhananjay Kumar
Dhananjay Kumar on 4 Dec 2019
I think this should be very simple (Writing the generalized matrix in the image). You just need to know array indexing and for loop in MATLAB.
Take as input, a k vector, and a constant n.
Create a nxn zeros-only-matrix A with the help of zeros function.
For n>=3, loop through i= 2 to n-1, and update the matrix values according to the values in the image (you will need to write just 3 assgnment statements inside the for loop for the three values). For i=1 and i=n update the matrix values outside the loop (total 4 assignment statement).
For n<3, you can update the values in the matrix without loop.
Please first try yourself and then post your doubts here.

  1 Comment

Sandeep Parameshwara
Sandeep Parameshwara on 4 Dec 2019
Hi Mr. Kumar, thanks for your reply. Yes, its simple and I should have tried harder before posting. I was able to code it something like this.
A=[];
A(1,:,:)=[-2*d d zeros(1,n-2) -2*k k zeros(1,n-2)];
for i=2:n-1
A(i,i-1,:)=d;
A(i,i,:)=-3*d;
A(i,i+1,:)=d;
A(i,n+i-1,:)=k;
A(i,n+i,:)=-3*k;
A(i,n+i+1,:)=k;
end
A(n,:,:)=[zeros(1,n-2) d -2*d zeros(1,n-2) k -2*k];
for i=n+1:2*n
A(i,i-n,:)=1;
end
In my case, I had operations involving concatenation of three dimensional array and hence was unclear. Anyway, thanks again.

Sign in to comment.

More Answers (0)