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

Community Tip - Your Friends List is a way to easily have access to the community members that you interact with the most! X

Finding the index value in a vector for a given value

Callum1995
6-Contributor

Finding the index value in a vector for a given value

Good Morning, 


I am trying to determine the exact x-location where the maximum deflection occurs. So far I have got a match function: 

 

Callum1995_0-1647345979286.png

I wish to return the index k for which the displacement is maximum, the deflections have been calculated and stored in the vector delta-k. With the index found I can then determine the corresponding location where it is a maximum. 

 

I know there are various topics available on this however I have not been able to get it working so far. 

 

Thanks,

Callum 

ACCEPTED SOLUTION

Accepted Solutions

Callum,

 

In the Calculation tab, in the Worksheet Settings pane, change TOL to 10^-7

 

Or multiply your max value and entire delta vector by 10^4

KevinFinity_6-1647369873807.png

 

The calculation was working with only one decimal place. When the default unit is meters, 1 mm is within the tolerance of 10^-3 (default setting), and it apparently ignores all of those significant figures. 

 

You will also have to use the 0th index of the match to use it later on when referring to it in vector delta.

KevinFinity_7-1647370078908.png

 

This solves the problem!

View solution in original post

15 REPLIES 15

If you look at d, there are multiple locations with the max value:

the match function (read the help) returns a vector of the indices that match the requirement within TOL.  If you take a subscript of the match function you will get a single numerical answer, but it may not be the best answer:

Fred_Kohlhepp_1-1647349397244.png

note the change in TOL:

Fred_Kohlhepp_2-1647349444458.png

Sorting thru a vector may not be the best way to find a max value or its location.  Since you already have a function defined, why not find where it's slope is zero?  (Red circles are Express not recognizing previous answers on recalculation.)

Fred_Kohlhepp_3-1647349832094.png

 

 

 

 

Hi Fred, 

 

If you were looking for the maximum deflection at location x=? how would you go about solving. I am unsure on what the best approach would be so if there is an alternative to sorting through a vector that would be brilliant. 

 

Thanks,

Callum 

See the attached file.  The first derivative of a function is the slope.  When the slope is zero you're either at a maximum or a minimum.

Werner_E
25-Diamond I
(To:Callum1995)

I have no Prime 7 installed so I cannot open you file and am only using the pic you posted.

The match function always returns a vector of values and even if the result is just one index it will be a 1x1 matrix.

To get the index k you will have to write kmax:=match(.....)[0 to reference the first (and maybe only) element in the resulting vector. I am assuming that you use ORIGIN=0, otherwise you would have to change the index 0 to whatever you had chosen for ORIGIN.

The x value you are looking for should then be xmax:=xdelta[kmax

Remark "[" is the keyboard shortcut for the vector/matrix index

 

Another way to directly calculate the x-value could be using the lookup function -> xmax:=lookup(delta.max, delta, xdelta)

 

BTW, you may have your reasons doing so, but I think it would be easier to deal with the functions you seem to already have directly and don't bother working with vectors of values at all. In case of the max you would have Prime to find the zero(s) of the first derivative of the function delta.total.

 

Callum1995
6-Contributor
(To:Werner_E)

Thankyou for the reply, 

 

Suppose I have the following extract can you think of anyway to solve for when the function would be a maximum:

Callum1995_0-1647350190240.png

I wish to obtain a result that is of the form maximum deflection along the beam occurs as location x=?. 

 

Thanks,

Callum

 

Werner_E
25-Diamond I
(To:Callum1995)

So my suggestion using the index on match or using the lookup function did not work OK?

 

Its hard to debug a picture as I not even see what the error message is telling you.

If you can post an excerpt of your sheet just using the necessary variables and not using Prime7 features like combo boxes I might be able to convert your sheet and open with my Prime 6.

Just a stab in the dark - the symbolic "solve" will not solve for variables which already have been assigned a value.

The symbolic "solve" might also fails because of the use of units sometimes.

Another reason for the solve command failing might be the way the functions delta.Q and delta.G are defined. If the are piecewise constructed (using if-statements) the symbolic solve will also fail.

Generally its better to use the numeric "root" command or a numeric solve block with "find" instead of the symbolic "solve" if you don't need a generic symbolic result but just a single value.

 

Callum,

 

In the Calculation tab, in the Worksheet Settings pane, change TOL to 10^-7

 

Or multiply your max value and entire delta vector by 10^4

KevinFinity_6-1647369873807.png

 

The calculation was working with only one decimal place. When the default unit is meters, 1 mm is within the tolerance of 10^-3 (default setting), and it apparently ignores all of those significant figures. 

 

You will also have to use the 0th index of the match to use it later on when referring to it in vector delta.

KevinFinity_7-1647370078908.png

 

This solves the problem!

Thanks Kevin, 

 

This seems to be working now. 

 

Best Regards,

Callum 

Please find PDF file for preview in attachment.

Werner_E
25-Diamond I
(To:VladimirN)

Thanks. I expected the sheet to contain some new P7 feature like a Combo box because the usual trick (replacing the app.xml for one of a P6 file) to "convert" it to P6 did not work. But there seems to be no such box and the Excel component should not be the cause for the conversion failing.

LucMeekes
23-Emerald III
(To:Werner_E)

This should open in P6.

 

Luc

Werner_E
25-Diamond I
(To:LucMeekes)


@LucMeekes wrote:

This should open in P6.

 

Luc


Thanks, yes it opens with P6.

How did you manage to convert it?

 

LucMeekes
23-Emerald III
(To:Werner_E)

Via the same 'usual trick' that you tried, but with a little more care than just brute force.

I've extended my MathcadSheetView program with the necessary routines to do the replacement and throw out other stuff that is not supported by the previous version. What really strikes me is that this community software generally doesn't accept the resulting file, it apparently knows better what a valid Prime file is then Prime itself... I first have to open the file with the target Prime version, and save it, only then can I successfully attach it.

With P8 out now, there's some programming to be done.

 

Luc

Werner_E
25-Diamond I
(To:LucMeekes)

Ah, I thought the Sheetview program you posted in the past would only display Mathcad 15 (and older) files.

Several ways to find the x value where f(x) is maximum:

1. When using a solve block

Sometimes I use a solve block to go from my moment equation to my deflection equation, and then it's a function rather than a vector of values.

KevinFinity_0-1647368132662.png

Then you can use the root function to find the maxima

KevinFinity_1-1647368429873.png

Root of the derivative works because maxima always occur where the derivative of the function is zero.

Plot them to be sure you got the right one:

KevinFinity_2-1647368548790.png

 

2. built-in solver

Another way of finding maxima is to use the solver. Here is an example:

KevinFinity_3-1647368590467.png

 

3. When using vector

However, you are trying to use a vector of values rather than functions. Here is how I solved the trapezoidal loading on a simply supported beam. Because trapezoidal loading is a piecemeal function, the regular integral doesn't really work. I had to use the definition of an integral to integrate discretely. The programs below use 1000 steps to integrate the moment function into the angle function and then the angle function into the deflection function. 

KevinFinity_4-1647368715722.png

You might find this method useful for your application. 

 

For reference, here is the formula for trapezoidal loading on a beam. This is for a beam that can have different tributary widths on the left and right. It took me a long time to derive this. 

KevinFinity_5-1647369045192.png

 

 

Announcements

Top Tags