Community Tip - When posting, your subject should be specific and summarize your question. Here are some additional tips on asking a great question. X
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
Solved! Go to Solution.
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
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
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?
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