cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

Community Tip - Need to share some code when posting a question or reply? Make sure to use the "Insert code sample" menu option. Learn more! X

Backsolving springs with known lamdas - 4x4 Matrix Determinant

EricHong
1-Visitor

Backsolving springs with known lamdas - 4x4 Matrix Determinant

I have a mass-spring system.  I am trying to back-solve four springs (provided in the attached file).

There are four masses at which summation of forces are performed and A matrices are obtained.  The attached file shows them in the (Lamda*I - A) format. These springs and masses are configured in four different ways and their first mode natural frequencies are known.

Therefore, in my mind, I should be able to use Given/Find in order to find the unknown springs with four equations while setting the determinants of the four matrices to zero.

The solver doesn't converge.

What is the problem here?  Can this be done?  If not, how else?

Your help will be greatly appreciated.

Thanks,

Eric

ACCEPTED SOLUTION

Accepted Solutions
StuartBruff
23-Emerald III
(To:EricHong)

Eric Hong wrote:

I have a mass-spring system.  I am trying to back-solve four springs (provided in the attached file).

There are four masses at which summation of forces are performed and A matrices are obtained.  The attached file shows them in the (Lamda*I - A) format. These springs and masses are configured in four different ways and their first mode natural frequencies are known.

Therefore, in my mind, I should be able to use Given/Find in order to find the unknown springs with four equations while setting the determinants of the four matrices to zero.

The solver doesn't converge.

What is the problem here?  Can this be done?  If not, how else?

I've just had a quick look at it and there are one definite problem and one potential problem.

The definite problem is that |..| is set to mean the Absolute Value not determinant.

Correcting this (right-click, select Determinant) still won't let Find live up to its name.  Applying the cond functions seems to indicate that your matrices aren't well-conditioned, plus the determinants are quite large.  This is usually a sign that numerical solvers (Mathcad, Matlab, etc) will have problems because the matrices are very sensitive to small changes in variables.

Using Minerr instead of Find gives a solution, but only two of the determinants equal zero; the other two are still quite large.   I think you will need to examine your numbers to see if you can scale the data to make the problem more tractable numerically.

Stuart

View solution in original post

6 REPLIES 6
StuartBruff
23-Emerald III
(To:EricHong)

Eric Hong wrote:

I have a mass-spring system.  I am trying to back-solve four springs (provided in the attached file).

There are four masses at which summation of forces are performed and A matrices are obtained.  The attached file shows them in the (Lamda*I - A) format. These springs and masses are configured in four different ways and their first mode natural frequencies are known.

Therefore, in my mind, I should be able to use Given/Find in order to find the unknown springs with four equations while setting the determinants of the four matrices to zero.

The solver doesn't converge.

What is the problem here?  Can this be done?  If not, how else?

I've just had a quick look at it and there are one definite problem and one potential problem.

The definite problem is that |..| is set to mean the Absolute Value not determinant.

Correcting this (right-click, select Determinant) still won't let Find live up to its name.  Applying the cond functions seems to indicate that your matrices aren't well-conditioned, plus the determinants are quite large.  This is usually a sign that numerical solvers (Mathcad, Matlab, etc) will have problems because the matrices are very sensitive to small changes in variables.

Using Minerr instead of Find gives a solution, but only two of the determinants equal zero; the other two are still quite large.   I think you will need to examine your numbers to see if you can scale the data to make the problem more tractable numerically.

Stuart

Thank you.  Two things you pointed out are the causes: absolute value instead of determinant and wrong equations.

I am getting now reasonable answers (still getting negative numbers which just indicates I have a sign error somewhere).

Thank you again,

Eric

StuartBruff
23-Emerald III
(To:EricHong)

Eric Hong wrote:

Thank you.  Two things you pointed out are the causes: absolute value instead of determinant and wrong equations.

I am getting now reasonable answers (still getting negative numbers which just indicates I have a sign error somewhere).

Thank you again,

Eric

No problem, Eric.  I've learned the hard way to check whether it's a determinant or abs value!

Stuart

I went through the equations and found some typos.  Also, it should have been "M^-1*K - lamda*I" is what I want to take the determinant of.  So, I changed that as well.  However, still a similar issue, having to use minerr instead of find.

Does that mean that this problem is quite indeterminate?  What exactly does having high values with cond/norm1,2,e, i mean?

StuartBruff
23-Emerald III
(To:EricHong)

Eric Hong wrote:

I went through the equations and found some typos.  Also, it should have been "M^-1*K - lamda*I" is what I want to take the determinant of.  So, I changed that as well.  However, still a similar issue, having to use minerr instead of find.

Does that mean that this problem is quite indeterminate?  What exactly does having high values with cond/norm1,2,e, i mean?

Sorry for the delay in replying, Eric ... I got sidetracked.  Given the matrix equation A x = b, the condition number is a measure of how sensitive A is to small changes in b.   This is important in numerical solvers because

a) they work by making small changes in parameters and looking at how much closer this gets to the goal - a large change in number for a small change in parameter may have the system bouncing around or, there are multiple local minima moving "over the hill" into an adjacent (incorrect) valley from which it can't escape.

b) floating point precision is ~ 10-16, which for a condition number of the order of  1011 can mean that the solver just can't get close enough to the real answer (eg, within 10-5) to allow it to determine its met the constraints.  Find will give up whilst minerr may give results that minimize the error but still end up nowhere near the desired solution.

The following link gives a nice, concise explanation: web.mit.edu/ehliu/Public/Yelp/conditioning_and_precision.pdf

Stuart

Thank you very much.  Yes it makes sense.  Is there a way to tell Mathcad the acceptable amount of error in a result?  The springs I'm trying to calculate are very stiff ones ranging from few 100Ks and millions lbf/in.  I don't mind a few 1000 lbf/in off.

Thank you for your help so far.

Let me know.

Thanks,

Eric

Announcements

Top Tags