Create real function from symbolic sum formula

  • Context: Mathematica 
  • Thread starter Thread starter Swamp Thing
  • Start date Start date
  • Tags Tags
    Formula Function Sum
Click For Summary

Discussion Overview

The discussion revolves around creating a real function from a symbolic sum formula in Mathematica, specifically focusing on how to handle both integer and non-integer inputs for functions defined by summation. Participants explore methods to achieve this and share their experiences with Mathematica's evaluation behavior.

Discussion Character

  • Exploratory
  • Technical explanation
  • Debate/contested

Main Points Raised

  • One participant defines a function for the sum of the first x integers and seeks to adapt it for real arguments.
  • Another suggests using Evaluate to modify the function's behavior when handling real numbers.
  • A participant proposes a conditional approach where the function returns a different expression based on whether x is an integer or real.
  • There is a discussion about the utility of defining functions directly with algebraic expressions versus using summation definitions for flexibility with other sums.
  • Participants discuss the implications of using Evaluate in Mathematica and how it affects the evaluation of expressions based on the attributes of functions like Sum and SetDelayed.

Areas of Agreement / Disagreement

Participants express differing views on the best approach to defining the function, with some favoring direct algebraic definitions while others prefer the summation method for its generalizability. The discussion remains unresolved regarding the optimal strategy for handling real versus integer inputs.

Contextual Notes

Participants note that the behavior of Evaluate and the attributes of functions like SetDelayed and Sum play a crucial role in how expressions are evaluated, but there is uncertainty about how these attributes influence rounding and evaluation in practice.

Who May Find This Useful

Individuals interested in Mathematica programming, particularly those working with symbolic mathematics and seeking to understand function definitions that accommodate both integer and real inputs.

Swamp Thing
Insights Author
Messages
1,047
Reaction score
798
In this code, I define a function of x as the sum of the first x integers.
Code:
In[7]:= fnSum[x_] := Sum[k, {k, 1, x}]

In[8]:= fnSum[x]

Out[8]= 1/2 x (1 + x)

In[9]:= fnSum[3.5]

Out[9]= 6

I would like now to take the symbolic formula underlying fnSum, and use it with real arguments. How can I assign that formula to a new real function, such that fnSum[3.5] will return the correct non-integer value instead of just 6 ?

Of course, this is just an example -- I would like to know how to do this in general.
 
Physics news on Phys.org
In your function definition use Evaluate on the right hand side
 
  • Informative
Likes   Reactions: Swamp Thing
Let me see if i understand you. You want the function, if ##x## is integer to return $$\sum_{n=1}^{x}n$$ but if x is real you want it to return $$(\sum_{n=1}^{[x]}n)+x-[x]$$

where the symbols [x] denote the integer part of x.

Did i get this right?
 
Ok well if i understand you now, why not define the function as ##\frac{x}{2}(x+1)## in first place instead of the sum definition?
 
Because I want to do the same with other sums like x^3, x^5 etc and it would be tedious to type each formula.

Using the Evaluate suggestion, I just do:
fnSum3[x_] = Evaluate[Sum[k*k*k, {k, 1, x}]]

which I might even generalize with a variable power.
 
  • Like
Likes   Reactions: Dale
Ok i see now thanks. Well its good thing that @Dale was very helpful with his suggestion.
 
It has taken me over a year to understand the power of Mathematica when it comes to this kind of thing, and now I'm able to ask sensible questions anticipating that neat solutions will exist.
 
  • Like
Likes   Reactions: Dale
Swamp Thing said:
It has taken me over a year to understand the power of Mathematica when it comes to this kind of thing, and now I'm able to ask sensible questions anticipating that neat solutions will exist.
Yes, it is very powerful. I have used it for everything from learning physics to helping my wife design a good patchwork quilt.

Do you understand why using Evaluate had the result that it did?
 
  • #10
Dale said:
Do you understand why using Evaluate had the result that it did?

Not really.

I looked at the Wolfram page on Evaluate, and it says "causes expr to be evaluated even if it appears as the argument of a function whose attributes specify that it should be held unevaluated."

If I type in Attributes[Sum], it includes "HoldFirst" in the list, i.e. the first argument is to be held unevaluated.

But if I define my own function with OR without evaluate, it doesn't list any attributes, e.g. Attributes[MyFunction] is empty.

In any case, it's not clear how deferring evaluation (or not) would affect whether the argument is to be rounded off or not before calculation.
 
  • #11
Actually, the important part is not Sum, it is := which is SetDelayed. SetDelayed has the attribute HoldAll, so the entire right hand side is unevaluated and gets evaluated fresh each time the left hand side is called.

When Sum is evaluated, if x is a number then it evaluates the Sum numerically, and if x is a symbol it evaluates the Sum symbolically.

So, without Evaluate the Sum is held unevaluated until the left hand side is called and then it is evaluated either way depending on if the argument is numeric or symbolic.

But with Evaluate the Sum is evaluated immediately, while x is still symbolic. This returns the algebraic expression which is then evaluated when the left hand side is called.
 
  • Informative
Likes   Reactions: Swamp Thing

Similar threads

  • · Replies 10 ·
Replies
10
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 6 ·
Replies
6
Views
7K
  • · Replies 3 ·
Replies
3
Views
5K
  • · Replies 13 ·
Replies
13
Views
3K
Replies
5
Views
4K
  • · Replies 4 ·
Replies
4
Views
4K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K