cases and replacement of variable by value - Messages
I asked a simple question: "Why is the value of the canvas variable A not stored in the function, when cases is involved?"
Your answer has absolutely nothing to do with my question.
I have attended another screenshot to show the consequences of not storing the value.
cases behaves, as if there where a line operator.
cases.sm (9 KiB) downloaded 40 time(s).
Utilities Matrix Exclude Region.sm (35 KiB) downloaded 44 time(s).
Wrote.. generally, if/else is more convenient in program.
... refreshed
Utilities Matrix Exclude Region.sm (41 KiB) downloaded 40 time(s).
QuoteShouldn't the variable A be replaced by its value 1 when 'cases' is used instead of 'if/else'?
Davide can answer this for certain. However, I would imagine that it should not. Since cases() function is kind of like a wrapper for nested if() statements, I imagine that it stays completely symbolic until evaluated numerically.
This is just a guess. Otherwise I would imagine that when you evaluated a cases() statement symbolically you would see the nested if() instead.
Wrote
... However, I would imagine that it should not. Since cases() function is kind of like a wrapper for nested if() statements, I imagine that it stays completely symbolic until evaluated numerically.
This is just a guess. Otherwise I would imagine that when you evaluated a cases() statement symbolically you would see the nested if() instead.
The two expressions in the screenshot in my first post are evaluated symbolically.
I think I can remember that in the past when "hovering the mouse" it was was dissolved in a chain (product) of boolean expressions, without using if/else.
Wrote
I think I can remember that in the past when "hovering the mouse" it was was dissolved in a chain (product) of boolean expressions, without using if/else.
Yes, It looks like that may have changed about two years ago according to this post: https://en.smath.info/forum/yaf_postsm35489_Custom-Functions-plugin.aspx#post35489
Which leads me to believe the cases() functions worked different depending on the optimization.
You can see source code here: https://smath.info:8443/!/#public/view/head/plugins/CustomFunctions/SMathFunctions/Programming/cases.cs
I'm not well versed enough in plugin creation to know how this is handled with different optimizations.
WroteThe two expressions in the screenshot in my first post are evaluated symbolically.
Can't be evaluated otherwise => nothing is defined/assigned,
thus literal evaluation ... try this
Maybe you missed my other point about appropriate condition [De Boor]
You have that in much simpler instances, not visible and falsifying project.
QuoteShouldn't the variable A be replaced by its value 1 when 'cases' is used instead of 'if/else'?
I do not understand. The cases function works perfectly.
cases_ok.sm (4 KiB) downloaded 34 time(s).
Best Regards
Carlos
WroteFrom if/else, integrand is not scalar vs if/Otherwise.
... for this particular integration example, it is necessary and sufficeinet
to transform the domain of if/else [ infinitesimal ...] in scalar domain.
Here, we have it already done in term of integration.
Integrate Discontinuous [Nuance].sm (13 KiB) downloaded 36 time(s).
Wrote
I do not understand. The cases function works perfectly.
The difference comes when the value of A changes after the definition of f(x) and g(x).
For g(x) the original definition of A:=1 remains. However, for f(x) the value of A changes.
cases_ok_alyles.sm (5 KiB) downloaded 36 time(s).
QuoteAnd by assigning f to f they are!
And that seems to me like a kind of invisible line operator, because it behaves like one.
So I believe I understand what is going on a little better.
I've attached the same .sm file as before only this time with break points. If you open the debugger window and step through you can see exactly what happens.
When f(x) is defined it sets f(x) equal to cases(a,xNote when g(x) is defined it will step through and evaluate the if() function and each individual input parameter (xThe cases() function within f(x) doesn't actually evaluate until it is called with f(0).
This is why, as you described earlier, if you set f(x):=f(x) you finally get the result that you want, because at this point it will finally evaluate cases(a,x
I'm not sure if this is a plugin issue or if this is just how SMath handles it's plugin interface.
cases_ok_alyles_with_breakpoints.sm (5 KiB) downloaded 39 time(s).
-
New Posts
-
No New Posts