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

Community Tip - Learn all about the Community Ranking System, a fun gamification element of the PTC Community. X

Summation Operator

SZ_11156868
4-Participant

Summation Operator

HI,

Could someone explain to me how to calculate the summation operator? I have attached a picture where you can see my formula. If I understand correctly, my condition formula should work like this: 0.1 + 0.2 + 0.3 + 0.4 + 0.5 = 1.5. However, Mathcad only gives 0.1. What am I doing wrong?

Screenshot 2024-09.-28. at 18.54.14.png

ACCEPTED SOLUTION

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

Ignore my previous suggestion.  While on my back home, I had a "Doh!" moment.  I'd temporarily forgotten that the Summation Operator automatically steps by 1.   I would suggest that the j specification needs to include the step value, but I can't figure out how to include it.  Hopefully, somebody will be along to say how it can be done.

 

In the meantime, however ... 

 

2024 09 28 C.png

 

Stuart

View solution in original post

13 REPLIES 13
StuartBruff
23-Emerald III
(To:SZ_11156868)

I’m not at my Mathcad at the moment, but try deleting the evaluation operator (= sign) after your expression and then evaluating Urms_new separately.

 

Stuart

StuartBruff
23-Emerald III
(To:SZ_11156868)

Ignore my previous suggestion.  While on my back home, I had a "Doh!" moment.  I'd temporarily forgotten that the Summation Operator automatically steps by 1.   I would suggest that the j specification needs to include the step value, but I can't figure out how to include it.  Hopefully, somebody will be along to say how it can be done.

 

In the meantime, however ... 

 

2024 09 28 C.png

 

Stuart

thank you very much

By the same token, do you know how to get the number of rows from the matrix t? I tried using the rows(t) command, but it doesn't work, and I can't find another way

SZ_11156868_1-1727558183970.png

 

StuartBruff
23-Emerald III
(To:SZ_11156868)

t is a range variable.  A range variable holds a range definition (range operator with values).  A range variable is effectively a promise to generate the specified numbers one at a time when the rv appears in an evaluation (=) or the right hand side of a definition ().  

 

It is NOT a vector.  Range variables and vectors have been confusing new users since time immemorial precisely because they look the same.

 

2024 09 28 G.png

 

Note that you need to be careful using Method.  Because Mathcad, like most maths apps, uses (64-bit) floating point arithmetic, you can have small internal differences from the exact decimal representation of a number.  So, scaling might not give the desired exact multiples of a number. It is sometimes best to use a rounding function (eg, round!) to avoid potential issues).

 

There are other methods of converting, and I'm confident somebody else will be along to show them (I always use vec and have it in my default template, so I don't need to rewrite it every time or copy/paste it).

 

Stuart

 

Werner_E
25-Diamond I
(To:StuartBruff)

@SZ_11156868 

Just some additional remarks.

Stuarts "vec" function assumes that you did not change the value of the system variable ORIGIN from the default value 0 to something else.
I, too prefer to have ORIGIN set to 0, but some people change it to ORIGIN:=1 because they want the first element in a vector to be indicated by the index 1 and not 0.

To be on the safe side you may slightly modify Stuarts function to make it immune against ORIGIN modifications

Werner_E_1-1727567857013.png

 

You can replace rows(t) in your formula by rows(vec(t)) and it should work OK.

 

Thank you for your response, but I think we didn't talk 🙂 I would like to take the number I show in the picture.

SZ_11156868_0-1727594921505.png

 

ttokoro
20-Turquoise
(To:SZ_11156868)

image.pngimage.png

image.pngimage.png

image.pngimage.pngimage.pngimage.png

SZ_11156868
4-Participant
(To:ttokoro)

My case 'last' function not working

SZ_11156868_0-1727606169807.png

if I write t= I got

SZ_11156868_1-1727606427720.png

It look how matrix, but is not matrix

 

StuartBruff
23-Emerald III
(To:SZ_11156868)

last doesn't work on t because t is *not* a vector.  t is a range variable, which is quite a different beast.  

 

A range comprises a range operator (_ , _ .. _) with values in the placeholders.  When you assign a range to a variable, that variable becomes known as a range variable.

 

When Mathcad encounters a range variable (RV), Mathcad treats the RV like an iterator.  Mathcad runs through each implied value within the range and each successive value to the user's equation(s).  When you evaluate an RV, Mathcad runs through the implied sequence and prints out each value. Unfortunately, the chosen format for this action looks identical to a vector, which causes no end of confusion for new (and even experienced) users.

 

To find the index of the last element of t, you need to convert t to a vector.  Here's one way:

 

2024 09 29 D.png

 

A note of caution.  You must use vec in a definition to get a vector result.  If you look at the vec(t) evaluation, you should see that Mathcad has iterated through t, applying vec to each value it generates, producing a pseudo=vector of one-element arrays.  Assigning vec(t) to a variable (t in this case) does return a vector.   Rather than create a vector if all you want is the index number of the last element, you can create a function that does the job for you; variables within a function are volatile and should not affect memory use except when 

actually called.

 

Stuart

 

 

 

 

Werner_E
25-Diamond I
(To:StuartBruff)

While the range cannot be defined directly in the sum operator, we could combine its definition and the some in a self-contained two-liner

Werner_E_0-1727567389539.png

 

StuartBruff
23-Emerald III
(To:Werner_E)

True, and that nicely hides j from the outside world.

 

I did a search for "summation operator step size" in the Community to see if anybody had mentioned this before.  Nothing sprang to vision, but I did see that @VladimirN  had posted the M11 User's Guide, so I had a look in that to see if it offered any guidance.  Indeed it does:

 

Summation: Description: Performs iterated addition of X over i = m, m + 1, ... ,mX can be any expression; it need not involve i but it usually does. m and n must be integers. If m = -∞ or n = ∞, the evaluation must be performed symbolically.

I'm going to guess that the changing the step size was overlooked during the revamp of the summation operator (so that "m, n are real numbers. n > m").  Restricting the step size to 1 might make sense when m and n are integers, but not so much when they're reals.


Apart from not being able to specify step sizes in the summation and product operators, my absolute number one gripe wrt to the range operator is that it butchered a number of my M11 worksheets.  I used to frequently use for loop constructs such eg, for x ε 0,1,5,9 or x ε 1,3,(7,9..13),18, which M11 would happily iterate over.  And I could even use a range definition directly as an parameter for a function - vec(0.1, 0.2 .. 0.9) was perfectly legal in M11..M15.  Prime? Nah.  I had a whine at time about it, but was inevitably ignored.

Of relevance to ranges and step sizes, is an M11 function I wrote called getrngpattern that guesses the step size.   Converting to MP gives an "This expression could not be interpreted" error and pretty picture of the offending item.

2024 09 29 A.png

 

I'd even long ago suggested generalizing the 'range operator' to a sequence operator.  This would have the virtue of being a pathway to having an arbitrary number of function arguments - just specify what you want as a sequence and let your function internals deal with "missing" parameters. And it would allow smarter sequences, such as fitting a polynomial to a range (1, 2, 4 .. 32 would fit a parabola to the numbers (*) ... it would need thinking about to remove ambiguities, I admit. I was even more roundly ignored.  Oh, another suggestion was allowing characters as well as numbers, eg "a" .. "d" would produce the values "a", "b", "c", "d".  

Stuart

(*) I have a function seqfit that will do such a fit (including on strings should anyone have a reason to do so) . I've also got a function seq that will generate successive characters in a given range, and a version that will generate successive words in a restricted range (eg, "a" .. "y", "z", "aa", "ab" .. "zz", "aaa" ... 

Werner_E
25-Diamond I
(To:StuartBruff)

Here is a workaround, but unfortunately Prime won't allow to type in the range - we have to use copy & paste

Werner_E_1-1727574954402.png

 

StuartBruff
23-Emerald III
(To:Werner_E)

Edited to add Mathcad worksheet.

 

Indeed, and that is how I get around the problem using one of my many vec implementations.  But, ...

 

Well, well, well. Three holes in the ground ... as the saying goes.  I made a discovery. I take some of my criticism back. Direct entry of range variables as a function parameter is only 3/8 broken.  You can type a 1-step range operator into a function parameter if you enclose it in parentheses.  You can't type a 3-place range operator into the argument position, but you can paste one into it.  Go figure.  Doubtless, an oversight that will soon be corrected ...  ☹️

 

2024 09 29 B.png

 

I'm not sure why I never noticed that before.  In M11..M15, I routinely surrounded ranges in parentheses if they were part of a for-loop sequence or to remove ambiguity.

 

@DJNewman  Dave, I don't know whether this (range operator arguments) might be useful to you for a Mathcad article?

 

Stuart

 

I have a set of string-specific string-to-char_vector functions available in my standard utility library. There's a simple version that pouts when it hits an illegal character, and there's a hardier version that simply shrugs and ignores such trifles. Here's an Express version.

 

2024 09 29 C.png

 

However, I tend to either copy only what I need from the standard library to a new blank worksheet or delete everything I don't need from my default template (which includes the standard library), as that can speed up load times.  So, having a more versatile vec saves faffing around deciding what to keep and what to delete.

Announcements

Top Tags