Group Abstract Group Abstract

Message Boards Message Boards

10
|
49.6K Views
|
302 Replies
|
227 Total Likes
View groups...
Share
Share this post:
GROUPS:

[WSG24] Daily Study Group: Programming Proficiency

Posted 2 years ago
POSTED BY: Arben Kalziqi
302 Replies

Hi folks! We've been enjoying your Level 2 certification submissions so far. If you're curious about whether an idea you have would be fit to submit, please feel free to ask in this thread. (If you have technical questions, however, please wait for the next Programming Proficiency Office Hour session, which is currently scheduled for July 25.)

POSTED BY: Arben Kalziqi

Hi Arben,

Thank you for the quiz update.

Problem 7 is broken: none of the choices yields a correct answer. I know which answer I like best though, teehee!

Lori

POSTED BY: Lori Johnson

Thanks for pointing this out, Lori! When I updated the question, the number of answer choices changed and messed up the key—but I'd failed to notice it. It should be fixed soon.

POSTED BY: Arben Kalziqi

Thank you, Arben!

I hope you like my function. I'm still adding to it!

POSTED BY: Lori Johnson

Could you please advise if this program would be suitable for me if I only know how to set up and configure development environments and have just started learning programming languages?

POSTED BY: Ellis Miller
Posted 2 years ago
POSTED BY: Phil Earnhardt
POSTED BY: Ellis Miller
Posted 2 years ago
POSTED BY: B. Cornas
Posted 2 years ago
POSTED BY: Doug Beveridge
Posted 2 years ago
POSTED BY: B. Cornas
Posted 2 years ago

blank

POSTED BY: Doug Beveridge
Posted 2 years ago
POSTED BY: Doug Beveridge
Posted 2 years ago

Thanks Doug. Works great.

I wonderful (and sometimes confusing) to see in how many different ways something can be coded in Wolfram.

POSTED BY: B. Cornas
Posted 2 years ago
POSTED BY: Doug Beveridge
Posted 2 years ago

Yes but it is still confusing

listA /. x_List /; First[x] == b :> ReplaceAll[x , {a -> b, b -> a}]

{{a, b, a}, {a, b, b}, {a, b, a, b}, {a, b, b, a, a}, {a, b, a, 
  b}, {a, a, b}, {a, b, a, b}, {a, b, a, b, a}, {a, a, a, a}}

works
but

listA /. x_List /; First[x] == b :> x /. {a -> b, b -> a}

{{b, a, b}, {a, b, b}, {b, a, b, a}, {b, a, a, b, b}, {a, b, a, 
  b}, {a, a, b}, {b, a, b, a}, {a, b, a, b, a}, {b, b, b, b}}

does not .......

Maybe Arben can tell us why ?????

POSTED BY: Doug Beveridge
POSTED BY: Arben Kalziqi
Posted 2 years ago

Thanks Arbin

Yes it is the Parenthesis (good to know )

listA /. x_List /; First[x] == b :> (x /. {a -> b, b -> a})

{{a, b, a}, {a, b, b}, {a, b, a, b}, {a, b, b, a, a}, {a, b, a, 
  b}, {a, a, b}, {a, b, a, b}, {a, b, a, b, a}, {a, a, a, a}}
POSTED BY: Doug Beveridge
Posted 2 years ago
POSTED BY: B. Cornas
Posted 2 years ago

The issue is here:

/; _First

The /; means that you write some test afterward—not only is _First not a component of a test, but it's not the correct pattern syntax. Recall that what follows a Blank (_) should be a head to be matched; i.e. you can't put an arbitrary function there and take it to be acting on whatever the blank is.

If you have

listA= {{a, b, a}, {b, a, a}, {a, b, a, b}, {a, b, b, a, a}, {b, a, b, a}, {b, b, a}, {a, b, a, b}, {b, a, b, a, b},{ a, a, a, a}} (*i removed the errant comma*)

and want to do {a -> b, b -> a} on any sublist that starts with b, you could do something like

listA /. l_List /; First[l] == b :> (l /. {a -> b, b -> a})

if you wanted to use Condition. Better yet, just match the pattern directly:

listA /. {b, rest__} :> ({b, rest} /. {a -> b, b -> a})
POSTED BY: Updating Name
POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: B. Cornas
POSTED BY: Arben Kalziqi
Posted 2 years ago

You reply faster than I can edit. Wow :-)

POSTED BY: B. Cornas
POSTED BY: Michael Ulrey
POSTED BY: Arben Kalziqi
POSTED BY: Michael Ulrey
POSTED BY: Arben Kalziqi

Thanks!

POSTED BY: Michael Ulrey
Posted 2 years ago
POSTED BY: B. Cornas

Yeah, it can definitely be useful for exploring—it can also definitely be a little frustrating for reasons you touch upon, but so it goes :)

POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: Gerald Dorfman
Posted 2 years ago

give me your timing for a much smaller problem .

{<|"a" -> 1, "b" -> 2|>, <|"a" -> 3, "b" -> 4|>, <|"a" -> 5, "b" -> 6|>}

POSTED BY: Doug Beveridge
Posted 2 years ago

Using

shortListOfAssoc = {<|"a" -> 1, "b" -> 2|>, <|"a" -> 3, "b" -> 4|>, <|    "a" -> 5, "b" -> 6|>}; 

I added Timing, AbsoluteTiming, and Repeated timing to the file I uploaded before, TimingExample_1mar24,nb , which is attached. (I also added RepeatedTiming for listOfAssoc that I ran previously.) My respective results for shortListOfAssoc using Power, anonymous function with tags, and anonymous function with indices are as follows:

Timing: all three were 0.

AbsoluteTiming: 0.0000124, 0.0000111, 0.0000101

RepeatedTiming: 1.3700510^-6, 2.1609110^-6, 4.3709*10^-6

POSTED BY: Gerald Dorfman
POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: B. Cornas
POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: B. Cornas

By 1:1 I mean it in the sense of functions—as in, "in some given sequence, can any one particular output subsequence only be generated by one input?" If you don't have that, I don't think it's feasible.

POSTED BY: Arben Kalziqi

What is the deadline for using the Level 2 discount code I received? (I took the first WSG24 this year)

I have a project idea but haven't had much time since the course ended and probably won't for a couple weeks longer.

POSTED BY: David Snyder

@David Snyder, the $50 promo offer is good through June 30, 2024.

POSTED BY: Jamie Peterson

Never mind, (content removed)

POSTED BY: Carl Hahn
Posted 2 years ago
POSTED BY: B. Cornas
POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: B. Cornas
POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: B. Cornas

Since you're Apply-ing, you get rid of the List structure. In that context, what does #[[2]] or #[[1]] mean?

POSTED BY: Arben Kalziqi
Posted 2 years ago

...

POSTED BY: lara wag
Posted 2 years ago
POSTED BY: lara wag

Hi Lara—keys in an association can be basically whatever you want, and certainly be in the form of "company_name" for example. If you need to access them via "slot" notation, you can just wrap them in quotes:

In[280]:= #"company_name" &@<|"company_name" -> 2|>

Out[280]= 2
POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: lara wag
Posted 2 years ago
POSTED BY: Rohit Namjoshi
Posted 2 years ago
POSTED BY: lara wag
POSTED BY: Mitchell Sandlin

I think you just do exactly what you said you want to do, i.e. assign the variables before you take the derivative:

D[
Log[x^2 + y^2 + z^2] /. {x -> Sin[t], y -> Cos[t], z -> Tan[t]}
, t]

Or even before you take the Log, but I think that gives you the same answer:

D[Log[(x^2 + y^2 + z^2) /. {x -> Sin[t], y -> Cos[t], z -> Tan[t]}],
  t]
POSTED BY: Carl Hahn
Posted 2 years ago
POSTED BY: Rohit Namjoshi
POSTED BY: Arben Kalziqi

Arben, I don't think I understand what you just said (a rare thing...). How would you re-write the expression?

I liked the elegance of the "Hold" and "Release Hold" solution, but only because it's explicit. However, I do get the same answer by using ReplaceAll within the brackets of the Derivative forcing it to happen before the derivative is taken. I've noticed in other people's examples that you can stick the /. operation all over the place. What is wrong with that?

(my own answer would be that if you are writing longer code, it gets hard to read and understand - I'm just asking a more generic question about WL grammar rules) Carl

POSTED BY: Carl Hahn
Posted 2 years ago
POSTED BY: Phil Earnhardt
Posted 2 years ago

That's a fine and helpful tip for the newbies to the Language. I'm having to constantly look up and flip over to several views or points. The Docs but There are many "points" in the docs to look at. I have to reference a LOT. So that's one thing I'm learning. It's not enough just to read one part.

I often remind myself. I'm doing it wrong! What am I missing? What can I not see?

Does anyone have any experience with Reeturn[] I'm not able to use it on TraceDialog. With this error message.

"TraceDialog::dgbgn: Entering Dialog; use Return[] to exit." I didn't get a dialog and my process was stuck running. I had to close the window to get it to stop.

Cheers.

POSTED BY: Zachary Wertz
Posted 2 years ago

Will there be another one of these classes?

POSTED BY: Paul Nielan
Posted 2 years ago

Will there be another one of these classes?

POSTED BY: Paul Nielan
Posted 2 years ago
POSTED BY: Zachary Wertz
Posted 2 years ago
POSTED BY: Zachary Wertz
Posted 2 years ago
POSTED BY: Steven Brawer

This is a nice talk! Glad to see that I've naturally settled on many of the same explanations as Richard gives here :)

POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: Zachary Wertz
POSTED BY: Mitchell Sandlin
Posted 2 years ago
POSTED BY: Steven Brawer

Hey Mitch! I also remember coming to this comparatively late in my math career (though frankly I'm sure it was in our diff eq class and I missed it because I was boooooored). As is indicated by Steve, probably the easiest inroad to the idea of the total derivative is the chain rule. To that end, check out the corresponding lesson from our multivariable calculus MOOC (including lesson notebook, lecture video, and exercises with solutions)—it's lesson 15 here.

POSTED BY: Arben Kalziqi
POSTED BY: David Snyder
POSTED BY: Lori Johnson

(confirming here for, well, official confirmation.)

POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: B. Cornas
Posted 2 years ago

Use Partition. It can be done in one instruction, but to make it clearer, I break it down:

lst = {1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0};

par = Partition[lst, 3, 1]

Cases[par, {0, 1, 0}]
POSTED BY: Gerald Dorfman
Posted 2 years ago
POSTED BY: B. Cornas
Posted 2 years ago
Attachments:
POSTED BY: Gerald Dorfman
Posted 2 years ago

Hi Gerald, thanks for your help. I just downloaded your example Nb and will look into it. I'll come back on it later.

POSTED BY: B. Cornas
Posted 2 years ago

I worked through your Nb. Thanks for the work you've done. It works well and I learned a thing or two, which I can apply on other places in my project.

Really appreciate your help, as well as Rohit's.

POSTED BY: B. Cornas
Posted 2 years ago
POSTED BY: Gerald Dorfman
Posted 2 years ago
POSTED BY: B. Cornas
Posted 2 years ago

Yes. I put the parentheses around the pure function for clarity. Doing stuff like that was recommended in class. For myself, given how simple that pure function is, I would not have bothered.

POSTED BY: Gerald Dorfman
Posted 2 years ago

I thought so, but a useful practice :-)

POSTED BY: B. Cornas

one quick note here: parentheses are still good for clarity, but we did—in version 13.x for some value of x—introduce something to help here. namely, when you type & after a pure function, it will quickly highlight the function it's "closing" so you can be sure that you have things grouped correctly. (the common case here is when doing something like ColorFunction->#1^2&—you need the parentheses after the -> because otherwise it thinks the pure function to be closed is ColorFunction->#1^2 rather than just #1^2.)

POSTED BY: Arben Kalziqi
Posted 2 years ago

I have not run any benchmarks but I suspect that using the built-in PalindromeQ may be faster than # === Reverse[#] &.

POSTED BY: Rohit Namjoshi
Posted 2 years ago
POSTED BY: B. Cornas
Posted 2 years ago

Use the Sequence* family of functions

list = {1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0}

SequenceCases[list, {0, 1, 0}, Overlaps -> True]

SequencePosition[list, {0, 1, 0}]

Overlaps -> True is the default for SequencePosition which is a little inconsistent

POSTED BY: Rohit Namjoshi
Posted 2 years ago

Great Rohit, this works very well. Thanks.

In which sense is Overlaps -> True inconsistent? I saw in the docs, that SequencePosition has the same Overlaps option. Is it also inconsistent there?

Would you also have some suggestions for the following :

This checks for 'repetitions'. How could I test for mirror symmetry? E.g. {0,0,0,1,0,1,1,0,1}. here 1,0,1 is a symmetry as well as 1,0,1,1,0,1 How could I test for Permutations of the pattern? E.g. {1,0,1,x,x,x,x 0,1,1,x,x,x,x,1,1,0}. here are 3 permutations of {1,0,1} present. How to detect them?

POSTED BY: B. Cornas
Posted 2 years ago
POSTED BY: Updating Name
Posted 2 years ago

Thanks Rohit, i get the 'inconsistency' and I agree.

Your solutions for Symmetry and Permutations work fine and I can extend on them :-)

POSTED BY: B. Cornas
Posted 2 years ago
POSTED BY: Updating Name
Posted 2 years ago
POSTED BY: Rohit Namjoshi
Posted 2 years ago

Great Rohit, thanks.

I had understood that {x,y,x} was different from {x,x,x} as a pattern .

I had the 'Overlaps -> True' first, but as I did not have x != y , I got about way too much solutions.

Now it works fine :-)

Best , Bert

POSTED BY: B. Cornas
Posted 2 years ago
POSTED BY: Rohit Namjoshi

Precisely! When I talk about pattern matching, I always talk about x_ as "something—call it x" for exactly this reason.

POSTED BY: Arben Kalziqi
Posted 2 years ago

Rohit & Arben, I get it. Great help. Cheers , Bert

POSTED BY: B. Cornas
Posted 2 years ago
POSTED BY: Doug Beveridge
Posted 2 years ago

Ok , it is correct

POSTED BY: Doug Beveridge
Posted 2 years ago
POSTED BY: Phil Earnhardt
POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: B. Cornas
Posted 2 years ago
POSTED BY: B. Cornas

Hey Bert! I didn't know the answer to this one off the top of my head. After some investigation, I have to say "it's complicated."

From the Advanced Dynamic Functionality Tutorial:

Dynamic expressions can be nested, and the system takes great care to update them only when necessary. Particularly when the contents of a Dynamic contain further interactive elements, it is important to keep track of what will stay static and what will update, when a given variable is changed.

It seems as if for any given dynamic expression, there's a step which involves "tracking down" what pieces of the expression can/will change when certain dynamic variables are updated, and it's those pieces which end up being reevaluated.

POSTED BY: Arben Kalziqi
Posted 2 years ago

Thanks Arben, for your help and work.

It certainly is quite complicated and I started wondering after I found that the code inside Manipulate is not necessarily executed from top to bottom. It is getting even more complicated if there are Dynamic functions explicit withing the Manipulate. Maybe I can come up with some Flags that get set when some line of code is re-executed. I'll have to try.

I will read through the Advanced manipulate and Dynamic paper again :-)

Best, Bert

POSTED BY: B. Cornas
POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: B. Cornas

I am having email problems. How do I join the class without today's link? Sorry about this!

POSTED BY: Paul Tikotin
POSTED BY: Jamie Peterson
POSTED BY: Paul Tikotin
Posted 2 years ago
POSTED BY: Gerald Dorfman

As we're fleshing out project ideas for the level 2 certification, is there someone we can meet with to make sure we're on the right track?

POSTED BY: Kari Ruggles
Posted 2 years ago

How about a separate Wolfram Community discussion to speculate/brainstorm about L2 cert projects? Anyone can create a new discussion, but it might be good to have the "seal of approval" if @Arben Kalziqi or @Jamie Peterson were to create it. :)

I am looking at a Wolfram Examples project showing muscle co-activation of hand flexors/extensors, arm flexors/extensors, and arm pronators/supinators. The beautiful Anatomy package has the ability to do color illustrations; I can graphically show the muscles involved in particular co-activations. Apparently, the Anatomy package also has identifiers for the antagonist pairs; I need to investigate that. Apologies if those words make no sense; it's better in pictures.

POSTED BY: Phil Earnhardt

I really like this idea! @Arben Kalziqi, @Jamie Peterson, can we make this happen?

POSTED BY: Kari Ruggles
POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: Phil Earnhardt

In that case, I support y'all wholeheartedly (imagine I could use emojis here and added a :sweat_smile: at the end there, okay).

POSTED BY: Arben Kalziqi
POSTED BY: Jamie Peterson
POSTED BY: Kari Ruggles
POSTED BY: Lori Johnson

Same! I can't get enough of these webinars and try to do every one that looks like it's even remotely related to something I might use. Or just looks particularly interesting.

POSTED BY: Kari Ruggles
POSTED BY: Lori Johnson
POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: Updating Name
POSTED BY: Philip Van Riper
Posted 2 years ago

Hi Philip,

The code you posted is incomplete, there are several symbols that are not defined sEDNH, pressure, defGrad, ....

I also don't understand what you are trying to accomplish with combined. It just adds an additional level of nesting to dgrad because names includes all of the elements in dgrad

dgrad == First /@ combined
(* True *)

If you just want to pick out the matches to names here is a functional way to do it. There is no need to initialize combined

combined = Select[dgrad, MemberQ[names, First@#] &]
POSTED BY: Rohit Namjoshi

Hey Philip—agree with Rohit here; I'm not sure what you're trying to do exactly. If you could upload a version of the notebook where you've defined everything that you're using and where you've explained what each "step" is supposed to do (like by saying "i have [input], and it does [xyz], resulting in [output]"), I'm sure I'd be able to help.

POSTED BY: Arben Kalziqi
POSTED BY: Philip Van Riper
Posted 2 years ago
Attachments:
POSTED BY: Rohit Namjoshi

Rohit, Thanks for the solution. It looks much better that the Do loop and gives me new avenues to explore. Phil

POSTED BY: Philip Van Riper
Posted 2 years ago

package question

All examples of creating a package (after foo::usage=...;bar::usage=...., etc) use

Begin["`Private`"]

and then function bodies follow. Does the word "Private" have some particular significance. What would be the problem with using some other word like

Begin["`NotPrivateAtAll`"]

How is this designation actually used?

POSTED BY: Steven Brawer
Posted 2 years ago
POSTED BY: Phil Earnhardt
Posted 2 years ago
POSTED BY: Steven Brawer
Posted 2 years ago

If there are bugs/shortcomings in the documentation, you can file a support ticket with Wolfram.

As far as Private not being a keyword, I just looked up that word in the documentation. Simple. "Private" the String is used as an option in some functions, but that doesn't leak out and affect other things. If a word isn't mentioned in the doc entry for some function, it shouldn't have any magic way to affect that function.

The other thing I noticed with your questions: if you're curious what happens when you do X, just try it. If the kernel behaves in some inexplicable way, that's the point in time to investigate further. I imagine Stephen Wolfram sitting (or standing) in his office in MA; I bet it's in his muscle memory just to try something about before looking it up in the docs or (gasp!) asking another staffer for clarification.

POSTED BY: Phil Earnhardt
Posted 2 years ago
POSTED BY: Artur Piekosz
POSTED BY: Jamie Peterson
Posted 2 years ago
POSTED BY: Rohit Namjoshi

Hi Andres—here are a few implementations that should get your thoughts moving,

If you have access to V1 and V2 directly, you can do:

new = AssociationThread[{"Diameter", "Height", "LogDiameter"} -> #] & /@ 
   Transpose[{V1, V2, V3}];

If you only have direct access to data, you could do this (honestly, I'd do something like this anyway):

new = <|"Diameter" -> #Diameter, "Height" -> #Height, 
     "LogDiameter" -> Log@#Diameter|> & /@ data;

The fastest and shortest way has got to be something like:

new = Append[#, "LogDiameter" -> Log@#Diameter] & /@ data;
POSTED BY: Arben Kalziqi
POSTED BY: Michael O'Connor
Posted 2 years ago

When I click on the Grading Rubric link on this page I get

HTTP Error Code 403 Sorry, you do not have permission to access this item.

POSTED BY: Rohit Namjoshi

Hi Rohit, this should be fixed now—works for me, as well. You may need to clear cookies/cache to get it to work, though, as a version with the wrong permissions may be cached on your end.

POSTED BY: Arben Kalziqi
POSTED BY: Taiboo Song

It will depend on your keyboard layout, but a QWERTY layout should have the | accessible by pressing shift and . The < is just a less-than sign, so that's <|association here|>.

POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: Rohit Namjoshi

oh god, it escapes even when there's nothing in front of it? blegh, thanks Rohit!

Taiboo: indeed, you want shift + backslash—shift + \

POSTED BY: Arben Kalziqi

Hello Arben: You are an excellent instructor and learning a lot.

When I open your filled-out notebook file, the file shows up as the notebook, with nice colors. But when I open the file class file, it looks different. Why is that and how to get into a nice notebook format for your class notes?

POSTED BY: Taiboo Song

Hey Taiboo—we have two versions of our notebooks, generally speaking. One is the instructor version, which I use when teaching live and which we use for making edits. Then, there's a more monochrome "handout" version which has some formatting changed for consistency's sake and to work nicely on the cloud.

POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: Updating Name
POSTED BY: Arben Kalziqi

The quizzes used to indicate which ones were incorrect, but within the last year that was changed. I found the old method of indicating which answers were correct educational and the new method not so much.

Thanks,

Mitch Sandlin

POSTED BY: Mitchell Sandlin
Posted 2 years ago
POSTED BY: B. Cornas
POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: B. Cornas
Posted 2 years ago
Attachments:
POSTED BY: B. Cornas
Posted 2 years ago

TOPICS

It would be great if the following topics are covered, OR if there are other courses which cover them (I appreciate that some of these were touched on a bit):

custom packages , non-trivial function bodies, ordinary looping (includingPython-type looping), IDEs which work well, custom types (as in OO programming), name spaces, enums.

At least indicate what Wolfram language calls these structures, and where they are.

For example, list indexing was covered to excess, but there was only just brief touches of defining complicated functions. Custom packages are crucial for organizing any but the simplest programs, and ditto for IDEs. Sometimes speed is not important but flexibility in looping might be needed. Etc.

Thank you

POSTED BY: Steven Brawer

Thanks for the suggestions, Steven—we'll cover some of this in the coming days, and the full course offers a bit more insight than the slightly condensed study group. Once the full course is out later this month, please feel free to attend and tell us directly what you thought, if you'd like!

POSTED BY: Arben Kalziqi

Not in the file provided.

POSTED BY: Taiboo Song
POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: Doug Beveridge
Posted 2 years ago

Doug, it would be great to have a 3D Slider. Unfortunately that is not possible on a 2D screen. How would you want to adjust the 3rd (z) axis on a 2D surface? I have been thinking more than 15 years about this and only have come up with complicated solutions, which are not truly 3D.

POSTED BY: B. Cornas
Posted 2 years ago
POSTED BY: Doug Beveridge
Posted 2 years ago

We create 3D images on a 2D surface by means of perspective. To actually control 3 independent axes, you'll need 3 independent 'movements'. Of course, with extra buttons or scroll-wheels, you can add 3 third dimension, but never with a onscreen 3D slider.

What you could do, is assign the z direction to e.g. the y direction when ta button is pressed. But again, this would not be a real 3D slider, more of a work around.

POSTED BY: B. Cornas
Posted 2 years ago
POSTED BY: Phil Earnhardt
POSTED BY: Arben Kalziqi
POSTED BY: David Snyder
Posted 2 years ago
POSTED BY: Phil Earnhardt
Posted 2 years ago

I did NOT receive this email.

POSTED BY: Steven Brawer

Please contact our staff at wolfram-u@wolfram.com if you need assistance with webinar email notifications from bigmarker.com. This is the mechanism that is used to send Daily Study Group reminders and recording notifications.

POSTED BY: Jamie Peterson
Posted 2 years ago
POSTED BY: Phil Earnhardt

@Phil Earnhardt, I really like this idea! We have, in fact, had brainstorming sessions about building a Wolfram U portal that would help to archive links to past sessions and courses, certifications, and other useful information. It's good to be reminded there is interest out there. Thanks!

POSTED BY: Jamie Peterson
Posted 2 years ago
POSTED BY: Phil Earnhardt
Posted 2 years ago

Trying to understand what Trace is telling me here. I have your words but still do not quite follow. Is it possible to step through this?

Attachment

Attachments:
POSTED BY: Coe Miles
POSTED BY: Arben Kalziqi

Folks, it was indeed a trivial yet embarrassing issue—I still had expr defined as a + (b c)/d from last week's lecture :|. You can just do this, and it'll work:

integralAPI = APIFunction[
   {"func" -> "MathExpression"},
   "The integral of " <> ToString[#func] <> " is " <> 
     ToString@Integrate[#func, x] &
   ];

integralAPIDeployed = CloudPublish[
  integralAPI,
  "IntegralAPI"
  ]

As you can see in my deployed version here: https://www.wolframcloud.com/obj/online-courses/PracticalProgramming/IntegralAPI?func=sinx

POSTED BY: Arben Kalziqi

Hi Arben;

Last week you showed an example of Function[] used with a variable as well as a #. Was it your intention to compare a prime function and a non-prime function or a prime function using a # compared to another prime function using a name?

Thanks,

Mitch Sandlin

POSTED BY: Mitchell Sandlin

Hey Mitch—"pure" function! But the idea was primarily just to show the "spectrum" from a full, named function with named variables down to a function with no name and whose variables were unnamed. Function of any kind is technically a pure/anonymous function, even if you provide "dummy variable" names for the inputs just like you would in a definition like myNameFunc[x_]:=....

The progression I have in mind is:

mySineAdder[num_]:=num+Sin[num]
Function[num,num+Sin[num]]
Function[#+Sin[#]]
#+Sin[#]&

The first function is a named ("nonymous", you could say, had history taken a different turn). The last three are pure or "anonymous" functions.

POSTED BY: Arben Kalziqi
Posted 2 years ago
Attachments:
POSTED BY: Mauro Bertani
POSTED BY: Arben Kalziqi
Posted 2 years ago

Ok, Arben. I think to have understood where I have made a mistake. It's very fuzzy, how speak with someone change our prospective, by only to expose the problem. Thanks Mauro

POSTED BY: Mauro Bertani

I understand—trying to figure out how to frame and phrase the problem to somebody else is often half the battle!

POSTED BY: Arben Kalziqi
POSTED BY: Carl Hahn

I believe this is how it works: polygonMaker had two definitions entered into the database. When the function is called, the first version entered is called first, but if the type of the input type isn't an integer, then the next definition is called, which does have a response to anything else. The point is that the domain of polygonMaker was extended by adding that second step, but that extension is only checked when needed.(Technically it would be better for polygonMaker to catch integers less than three)

Here's another example to ponder (entered in successive cells).

f[x_Integer] := x*1.0  
f[x_Real] := IntegerPart[x]  
f[3]  
Out[187]= 3. 
f[3.0]. (* the first version can't be applied to 3.0 so the second version is called *)  
Out[188]= 3
POSTED BY: David Snyder
POSTED BY: Arben Kalziqi

I had not picked up on that nuance even though I have used it (subconsciously?) as in the examples on recursion. I had not formally articulated in my head. WL does not pay attention to the sequence of definitions in code first, but yes to the hierarchy of precedence, which of course it does. Particular takes precedence over global. It's a grammar thing.

But if definitions have equal precedence, then it picks the most recent one. (Correct?)

POSTED BY: Carl Hahn
POSTED BY: Arben Kalziqi
Posted 2 years ago

For details on precedence / ordering see the documentation.

POSTED BY: Rohit Namjoshi
Posted 2 years ago
Attachment

Attachments:
POSTED BY: B. Cornas
POSTED BY: David Snyder
Posted 2 years ago

Thanks :-)

POSTED BY: B. Cornas

The spaces are really just a visual choice made by some programmers—I tend not to use them, and it shouldn't have this effect. I'll try to remember to check the full cell expression after today's class and see if I can figure out what's going on—if you look at the recording, you may note that I didn't expect that to look like that and am messing with it a little to investigate!

EDIT: Yeah, it's just written into the cell manually that that should have a particular background color. If you start typing into that space/editing it, you'll retain the color choice.

POSTED BY: Arben Kalziqi
Posted 2 years ago

Hi Arben, I do not understand what you mean by your last lines -after the EDIT:

I want to use different text colors for the comments in one cell. But of course still bracketet by (.........) to indicate that it is a comment. As some comments are temporarely (like (* FIX this later *) and other comments are permament, I would like different colors for the different kind of comments. As everything is adjustable in Mathematica, I would be surprised if this is not possible. Thanks, Bert

POSTED BY: B. Cornas
POSTED BY: Arben Kalziqi
POSTED BY: Carl Hahn
Posted 2 years ago

I don't see an option to start a new Topic, so I just reply. I just saw Ahmed Elbanna's post, 4 days ago, and I agree :-)

Great webinars series. Arben is the absolute BEST presenter I have seen in all the webinars I have already watched. He does it just right on every level and in every detail. Arben, you're a fantastic teacher. You opened my eyes & understanding to new levels in things I already knew. I hope you'll be doing much more presentations.

My question : Is there a way to change the default color of a comment (* Comment *)? I can change the Size, Face, but not the color. This would be really convienient as to make an easy distinction between comments : * Explaining the code and function * Things that need repair, seriously * Things that need brushing up or speed enhancement * Alternative versions * Spots in the code that need extensions in the future * Etc.

It would really be great to have this color function. I know that I could do this with 'text' parts, but that will break the possibility to run the complete code with one Shift+ Enter.

POSTED BY: B. Cornas
Posted 2 years ago

Re. changing the default color of comments look at Preferences / Appearance

enter image description here

POSTED BY: Rohit Namjoshi
Posted 2 years ago
POSTED BY: B. Cornas
POSTED BY: Fredrik Doberl

Let me know if I have this wrong, but I believe that LetterCounts is always automatically reverse-sorted by value and thus the first n elements—as taken by Take, for example—should always be the 20 most frequent elements. Do you have a counterexample in mind? (Or perhaps this behavior was different on an older version, perhaps pre-13 or even pre-12?)

EDIT: Oh, I see—there's an issue with the version where stopwords are deleted. Thanks for pointing that out; I'll fix it!

POSTED BY: Arben Kalziqi

Arben,

First thank you for teaching this class. This has been very helpful.

I am running into some unexpected behavior. I just downloaded Version 14, and when I do TreeForm of a list I get:

enter image description here

but when I do the same thing using Plus, I get:

enter image description here

I was expecting to get the same thing but with List replaced with Plus. I am a bit puzzled.

Many thanks for your help. Michael O'Connor

POSTED BY: Michael O'Connor

Hey Michael! The reason this happens is the order of evaluation. I have two suggestions for you to try which I think will clarify this behavior:

  1. Trace[TreeForm[Plus[1,2]]]

  2. TreeForm[List[a,b]] (=== TreeForm[{a,b}])

Let me know if this illuminates the difference for you.

POSTED BY: Arben Kalziqi

Also, Plus has the NumericFunction attribute whereas List does not. Thus one sees the following behavior from TreeForm:

enter image description here

POSTED BY: David Snyder

Arben, this does help! Thank you very much!!!

POSTED BY: Michael O'Connor
Posted 2 years ago

From yesterday's lesson, does anyone understand why

    larger[x_, y_] := If[x > y, x, y];
    Fold[larger, {3, 1, 2, 6, 5}]

returns larger[larger[larger[larger[3, 1], 2], 6], 5] and not 6?

POSTED BY: Coe Miles
Posted 2 years ago

I get 6 on my notebook.

POSTED BY: Steven Brawer
POSTED BY: Arben Kalziqi
Posted 2 years ago

Try removing the semicolon

POSTED BY: Steven Brawer
Posted 2 years ago

map mystery

Can someone explain what is going on in the expressions below the tree, or would this be too advanced for the level of this course (which, if it is, is OK with me)?

(See attached png file)

Attachment

Attachments:
POSTED BY: Steven Brawer

Hey Steven—I think that these three points in concert are enough to answer your question, but please let me know if they don't:

  • Map[f,expr,n] maps f to expr down to level n
  • Map[f,expr,{n}] maps f to expr only at level n
  • Map[f,x] = x for AtomQ[x]==True (cf. our discussion yesterday: Map goes into the inside of an expression to work on its parts; atoms don't have parts so Map has nowhere to put the f—this could have been designed to produce an error message, but the decision was to have Map function such that if it can't map a function f somewhere, it just returns the object onto which f was asked to be mapped)
POSTED BY: Arben Kalziqi

Hey Arben,

Loving your class. Got a little exercise:

The transfer function of non linear power amplifiers produces inter-modulation products between the tones at their inputs. If the transfer function is expressed as a simple 5th order odd polynomial, and the input x is made of two sine waves at frequencies w1 and w2, you can easily find the mess that shows up at the output. It includes 3rd and 5th order inter-modulation products around the two tones, 3rd and 5th harmonics, and inter-modulation products around the harmonics. In RF systems we use band-pass filters to select only the fundamental tones and those tones around the fundamentals w1 and w2 (usually assumed to be closely spaced compared to the frequencies of the harmonics... Although audio systems will not be so cooperative.)

I've been playing around with some of the concepts I thought I was learning to take the output and literally select them, but it's not working yet. In the past I've just given up and brute forced it (yuk). This time round I'd like to learn how to do it right...help?

POSTED BY: Carl Hahn

We really do abhor a brute force solution. This is a fun little question; please see embedded response!

PLEASE SEE THE NOTEBOOK ATTACHED TO THIS COMMENT

Attachments:
POSTED BY: Arben Kalziqi

Thank you, Arben!!!

That's a really neat approach. Had not yet thought along the path of creating a list of all the terms. But entirely consistent with thinking about the heads and changing them. That's a powerful analytical tool.

Your solution has a lot of pedagogical value. I am going to be staring at it a bit.

If you are on a roll, I've got another one coming as soon as I can figure out how to ask it properly. Let me take a crack and if it needs more let me know: It has to do with a problem in FM theory, where recognizing that Cos (B Sin [w t]) can be expanded as a Fourier series whose coefficients are an ordinary Bessel Function of the first kind

= Jo(B) + 2 Sum (J2n(B) Cos (2 n w t) )

Then you have to truncate the series to get the coefficients of interest. There is a similar expansion for Sin(B Sin (w t). You can sample an FM signal and do an FFT and just see the spectrum, but recognizing the Bessel Function behavior provides an intuitive understanding of FM theory (bandwidth, mod index, S/N properties etc) that even when FM was really popular few people grasped. Now it's beginning to be a lost art. What I never figured out how to do was use WL pattern matching and mapping tools to "recognize" and derive this classical solution. It has other analytical advantages for other problems too.

POSTED BY: Carl Hahn
POSTED BY: Arben Kalziqi

Thanks Arben, I will get back to you on that FM question. I have to find my notes on when I last tried to do it.

"If I'm reading your (original) post correctly, you could also do pattern-matching or selection by going directly into the cosine terms, extracting the coefficients of the omegas with CoefficientList and grabbing only those cosine terms for which the absolute value of the difference is 1"

That sounds kinda like what I was originally trying to do but unsuccessfully. Could you show an example?

POSTED BY: Carl Hahn

Let's see:

PLEASE SEE THE NOTEBOOK ATTACHED TO THIS COMMENT

EDIT: Really better just to use Coefficient. I don't like CoefficientList anymore; it's dead to me. So this is probably the most efficiently and extensibly you could write it?

Cases[yexp, 
 c___*Cos[arg_] /; 
  Abs@Total@Coefficient[arg, {ω1, ω2}] == 1]
Attachments:
POSTED BY: Arben Kalziqi

Delicious!!! Once again a pedagogical Rosetta Stone. Thank you , Carl

POSTED BY: Carl Hahn
Posted 2 years ago

Hey everyone, care to take a stab at explaining why:

Total[{{a, b, c}, {u, v, w}, {x, y, z}}]

returns

{a + u + x, b + v + y, c + w + z}  (*One of our Day 4 "Check Your Understanding" questions*)

I've looked at the documentation for "Total" and still can't figure out how this result is obtained. Thanks in advance,

POSTED BY: Coe Miles
POSTED BY: Arben Kalziqi
Posted 2 years ago

Arben - Thank you very much for the detailed explanation. I am finding this material somewhat difficult but rich and rewarding when something sticks.

POSTED BY: Coe Miles
Posted 2 years ago
POSTED BY: Steven Brawer

I don't think that this is an inconsistency: if you do extract a head with [[0]], that head does not have some internal structure that you can probe by asking to get its parts. What is the second part of Graphics?

POSTED BY: Arben Kalziqi
Posted 2 years ago

It seems to me the Head is just a node. I don't understand why it should be different from any other node. If it doesn't have a structure, why should any other node have a structure? I suppose there is something in the engine which interprets the head node differently from other nodes.

POSTED BY: Steven Brawer
POSTED BY: Arben Kalziqi
Posted 2 years ago

Thanks. That's really helpful.

POSTED BY: Steven Brawer

In the "Check Your Understanding" exercise for pure functions we are told that Function[u, 3+#][x] is the correct syntax for returning 3+x given x as an argument.

I think that's incorrect (?)

POSTED BY: Paul Tikotin

Good catch! I've fixed this in our repo and it will be fixed in our next deployment.

POSTED BY: Arben Kalziqi
Posted 2 years ago
POSTED BY: Phil Earnhardt
POSTED BY: Ahmed Elbanna
POSTED BY: Oliver Jandette
Posted 2 years ago

Hi Everybody!

I would like to produce documents effectively (so programmatically) and I need to find help about producing cells, sometimes cells within cells (within cells?). Can anybody give a good reference? Such things as TextData, BoxData, ToBoxes, ToString and similar.

POSTED BY: Artur Piekosz

Yes, I also found that I couldn't use the code output by those boxes in situ. Entering it into a new code cell works fine.

POSTED BY: Arben Kalziqi
POSTED BY: Jack I Houng

I'd highly recommend Professor Richard J. Gaylord's Wolfram Language Fundamentals

Posted 2 years ago

Hate to redundant, I still can't get by this. If this is a real error, other errors I get may be me or Mathematica - can't tell. Btw, $Version returns: 14.0.0 for Mac OS X ARM (64-bit) (December 13, 2023).
enter image description here

POSTED BY: Coe Miles

Please see the answers downthread—the easiest way I know to explain this is that if you say ax, how is Wolfram Language to know that you actually, truly, really meant a*x? It can't.

If you were to type myVar^2, you ostensibly would not expect to get m^2 * y^2 * V^2 * a^2 * r^2, so why expect differently for ax^2?

(Since tone is never conveyed well over text, I want to be clear that the intended tone here is "Socratic" rather than "snippy" ;).)

POSTED BY: Arben Kalziqi
Posted 2 years ago

ax is on variable not two variables a * x is and expression equal to a space x

POSTED BY: Gregory Sowder

I think the best way to see what is going on, on your own machine, is to look at y//FullForm and z//FullForm. They are quite different.

enter image description here

However if you insert a space between a and x in your expression for z, then y and z should be the same.

[If you are somehow stripping out spaces, then that will cause you problems. Mathematica really uses the spaces as Arben says.

I am already finding that when I am getting odd results, using FullForm, TreeForm etc can make things clearer.

POSTED BY: Paul Tikotin
Posted 2 years ago

Perfect. I get it, thank you.

POSTED BY: Coe Miles

While working with the exercises for Day 3 (Syntax and Expressions), I got the following error message while attempting Exercise 4 (ListLinePlot for airline passenger data), namely "An improperly formatted option was encountered. The left-hand side of the option was not a symbol or string* My solution(s) worked fine initially, but then went wonky all of sudden. In fact every plot in the notebook threw the same error message, whether options were specified or not. (Also all of the dynamic Hints and Solutions boxes disappeared, but that's not my main concern right now). Please see attached notebook..

Attachments:
POSTED BY: Michael Ulrey

Hi Michael—I think the issue comes from the formatting that this notebook has for that ListLinePlot input. Ideally, it would just be an input... but when you click into it, you can see that there's a kind of yellow box around it. Basically, this is a text cell formatted as input and so it won't evaluate correctly, if we're seeing the same thing. (I think your specific errors with respect to Dynamic elements here are kernel-specific and thus not "carried with" the notebook that you uploaded when I open it on my end, so I can't see for sure what your issue was.)

if you just start typing ListLinePlot in a new cell, you should be able to plot the data without issue. I think what's happening is that on our end, making the Hint/Solution buttons does something unfortunate to the formatting of code blocks that we had intended for you to type into. I'll look into this with our team.

POSTED BY: Arben Kalziqi

Arben, Thanks, that makes a lot of sense since both errors occurred at the same time. I'll try out your suggestions and see what happens.

POSTED BY: Michael Ulrey

Yes, I also found that I couldn't use the code output by those boxes in situ. Entering it into a new code cell works fine.

POSTED BY: Paul Tikotin
POSTED BY: Michael Ulrey
Posted 2 years ago
In[84]:= Clear[x, y, a, b, c]

In[85]:= y = a x^2 + b x + c

Out[85]= c + b x + a x^2

In[86]:= Expand[y^2]

Out[86]= c^2 + 2 b c x + b^2 x^2 + 2 a c x^2 + 2 a b x^3 + a^2 x^4

system: Apple M2 Ultra, 14.3 (23D56) Mathematica: 14.0.0.0 Mac OS X ARM (64-bit)

POSTED BY: Randy Janke

Is anyone else experiencing problems with the question submission bar in bigmarker on Chrome? When I go to type, the text box turns white, with white text, rendering the text unreadable.

Posted 2 years ago

I know you touched on this, but in exp = 1 + x^2, exp[[2, 1]] returns x, yet exp[[1, 1]] is longer than the depth of the object, why again?

POSTED BY: Updating Name

[redacted]

AtomQ[#] & /@ {exp[[1]], exp[[2]]} returns {True, False}, and Atoms don't have parts (errrrrrr... it's counterintuitive).

...and this can be seen: AtomQ[exp[[1]]] returns true.

POSTED BY: Paul Tikotin

Yeah, it's just atoms have parts as far as atoms are concerned, as apposed to atomic expressions. The same signifier ("atom") points to different signified concepts depending on the context, hence counterintuitive. Essentially, atomic parts are not the same in the case of the fundamental concept in chemistry and physics and atomic expressions and therefore not covered by Part in the normative sense. So an error message is returned.

There are sub-atomic parts

Understanding this helps in navigating subjects that cross disciplinary boundaries. - GPT4

POSTED BY: Arben Kalziqi

Nice! I hadn't thought (until today!) about the derivation of the word atom. So, 'tom' as in 'tomography'.

POSTED BY: Paul Tikotin

Yes, the very same! It's from τόμος, which I think is from τέμνω, which is something like "to cut/slice/section/portion".

POSTED BY: Arben Kalziqi

The notion of uncuttable is really helpful, thank you. I’ve now learnt to turn to inbuilt functions in order to better understand what’s going on and just the idea of syntactic convenience is helpful in getting over what at times has felt like contradictions in terms. I remember Prof Richard J. Gaylord saying once that Wolfram, at times, behaves strange, and never quite knew what was meant by that (likely the pitfalls of intuition).

I think the apparent confusion regarding the word atom is as a result of an error in the evolution of our scientific knowledge. It is only relatively recently that we discovered that 'atoms' of, say, radium are not really atoms in the logical sense of the word. Then we repeated the mistake, calling some of the sub-atomic bits "fundamental" only to find...

In a parallel universe where the Wolfram language was developed in 1880, the concepts of atoms in Mathematica and Chemistry would have been consistent. Although some physicists maintained that the atoms of the chemical elements were fictional conveniences for the sake of calculation and that, if they even existed they would be too small to ever be known. Then came 1905 and Einstein's analysis of Brownian motion.

POSTED BY: Paul Tikotin

One thing that really attracted me to Wolfram was how the expressions in a book I picked up published in 1988 still computed. Thankful, in this universe there is forward compatibility, even amongst changes in scientific knowledge.

I'm with you there—I immediately thought that the following image, from this blog post, was very striking:

enter image description here

POSTED BY: Arben Kalziqi

Heh, it's true :). At least in this case it's been superseded by something simpler and clearer!

POSTED BY: Arben Kalziqi

I can heartily recommend this. While I am in no position to judge Wolfram's contribution to Physics, the ideas are fascinating and are something I would like to pursue.

If I am hearing him correctly, he is attempting to make sense of Physics by looking at it as a system that is computable by the application of rules for re-writing. He seems to be saying the system evolves what look like small black holes and "elementary" particles from vacuum energy. Of course he is talking to a professional physicist here so we hear him respond to some good questions.

I am stricken by the similarity of the method Wolfram is proposing and the spirit of the the approach we seem to be taking in grappling with Mathematica. Very stimulating!

https://www.youtube.com/live/ITJ3AF3TK5M?si=rECCBuBAAVWa_Im4

POSTED BY: Paul Tikotin
Posted 2 years ago

Steven/Arben - I too am getting the INCORRECT result. I am also running Mathematica 14.0.0 on Mac silicon. (This might also explain some of the results I have been getting!) I create a notebook and set y = ax^2 + bx + c. I then try Expand[y^2] and get the following:

    ax^4 + 2 ax^2 bx + bx^2 + 2 ax^2 c + 2 bx c + c^2

I have attached my notebook and an image making it clear what element is incorrect in Mathematica's answer.

Attachment

Attachments:
POSTED BY: Coe Miles
Posted 2 years ago

PROBLEM PROBLEM PROBLEM

When I create a notebook and try y = ax^2 + bx + c, then

Expand[y^2] gives
ax^4 + 2 ax^2 bx + bx^2 + 2 ax^2 c + 2 bx c + c^2
in my notebook, which is incorrect,

while yours has
c^2 + 2 b c x + b^2 x^2 + 2 a c x^2 + 2 a b x^3 + a^2 x^4
which is correct.

I'm, using Mathematica 14.0.0 on Mac silicon. Here is my notebook

POSTED BY: Steven Brawer
Posted 2 years ago

More info: When I do "y = ax^2 + bx + c", with explicit asterisk, then Expand[y^2] is correct c^2 + 2 b c x + b^2 x^2 + 2 a c x^2 + 2 a b x^3 + a^2 x^4

Note: The preview removes the explicit asterisks. What works is y = a asterisk x^2 + b asterisk x + c

POSTED BY: Steven Brawer
Posted 2 years ago

Write "a x" with a space between a and x. Mathematica interprets the space as a multiplication.

POSTED BY: lara wag

Addendum to Lara's explanation: "ax" is read as one symbol, as opposed to "a x" which is read (in the example case) as two distinct symbols of a numeric type, so the space is interpreted by Mathematica as an implied multiplication.

POSTED BY: David Snyder
Posted 2 years ago

I don't believe this is a space issue. The notebook shows input (w/o spaces) and the incorrect output.

POSTED BY: Coe Miles

Hey Coe—I'm not sure what you mean. The attached notebook is missing the spaces between the coefficients and thus produces the incorrect output. You want:

y=a x^2+b x+c

or, explicitly:

y=a*x^2+b*x+c

in order to get the correct polynomial expansion.

@ Steve, you can type your code between two backticks to prevent it from formatting via markdown, which is why the asterisks are being used for formatting rather than displaying.

POSTED BY: Arben Kalziqi
Posted 2 years ago

When I enter everything without spaces I get the wrong answer. When I enter WITH explicit asterisks, I get the right solution. The attached image shows what is entered and the result.

Attachment

Attachments:
POSTED BY: Coe Miles
Posted 2 years ago

Steven - I get the correct answer when using explicit multiplication:

    y = a*x^2 + b*x + c

Why is this? Arben?

POSTED BY: Coe Miles

To be absolutely clear: this is equivalent to asking why var^2 does not return v^2 a^2 r^2. If you don't type a space or an asterisk between two letters, there's no way for the system to know that you're talking about two separate symbols.

POSTED BY: Arben Kalziqi
Posted 2 years ago

Bang head with hand. I forgot. Thanks.

POSTED BY: Steven Brawer

It can happen even after a decade of using the language—I was once thwarted for an entire day by an errant curly/("""smart""") quote breaking a string expression when I first start working here!

POSTED BY: Arben Kalziqi

Another way of saying the same thing: Mathematica is taking ax^2 to mean (ax)^2. This can be seen by asking for the FullForm.

In terms of today's lesson: AtomQ[ax] returns True , AtomQ[a x] returns False.

POSTED BY: Paul Tikotin
Posted 2 years ago

Hi Arben,

Would please clarify the following terms: vector, array, matrix, expression? And regarding the docs, what's the difference between options and properties in a function?

POSTED BY: Updating Name

When I'm using those terms, I mean:

  • Vector: something that you can describe with 1 index. It could have a length of 2 or a million, but you could get any singular element out of it by doing vec[[n]].
  • Matrix: something that needs two indices to get any individual elements from: say, the element at the first row and third column could be accessed with mat[[1,3]].
  • Tensor: generic term for anything where you'd need more indices to describe the position of a single element. Note that this is not really an appropriate definition in the physics sense, but I'm being a little loose with it. You can think of them as the general case of the special "one-index" and "two-index" cases of "vector" and "matrix", respectively.
  • Expression: any sort of singular "thing" in Wolfram Language—that is, anything that's not a sequence like a,b. a is an expression, Plot[x,{x,0,5}] is an expression, and so on.

You can see more of the fun of conflicting definitions here.

POSTED BY: Arben Kalziqi
Posted 2 years ago

I thought I understood this material during the lecture; most things made sense. Some parts of Problem 1 however just don't seem right. For example, why does pat3 give the following result?

exprs = {1, h[], h[a], h[b], h[a, b], h[a, a], h[a, b, c], g[h[a, b]]}
pat3 = x_
Cases[ exprs, pat3]
    {1, h[], h[a], h[b], h[a, b], h[a, a], h[a, b, c], g[h[a, b]]}

I see no way to get this result.

Thanks in advance,

POSTED BY: Coe Miles

pat3 is x_, which means "any one thing—call it x." Every element of exprs is just a single thing, so they all match. Because we're not using that x anywhere, this pattern is equivalent to just _, i.e. "any one thing".

We might see a named pattern like x_ in a standard function definition:

f[x_]:=x^3

The x on the LHS has nothing to do implicitly with the "any one thing" denoted by the _. The x is just a dummy name that we give to that one thing (the one thing that appears in f's brackets) so that we can refer to it on the RHS. Consider the example:

f[x_]:=5

There's no mention of x on the RHS, so it's pointless to even name it on the LHS (in some sense.) It would be exactly the same to instead say:

f[_]:=5

The point is that "f of any one thing" should be 5. We don't care about the input here, so why bother to name it if we're never going to use it? In this sense, we are saying that f is a transformation rule that takes anything of the form "f of any one input, and I don't care what that input is" and returns 5.

POSTED BY: Arben Kalziqi
Posted 2 years ago

My apologies folks, I mis-wrote the equality that I am asking about. Again -

In today's post-lecture questions "pat2 = _h" Case tells me that pat2 matches the following elements in exprs:

    {h[], h[a], h[b], h[a, b], h[a, a], h[a, b, c]}

Does this mean that **pat2 = _h = h_**? It seems like it, but this seems odd to me in that we are PATTERN MATCHING and, it seems to me, elements in one order should not necessarily be equivalent to elements in a different order.

Comment?

POSTED BY: Coe Miles

pat2 is _h, which explicitly means: "any one thing with head h". This is not the same as h_, which means "any one thing—call it h". It is (except for perhaps some pathological edge cases) the same as h[_], which is "h of any one thing."

POSTED BY: Arben Kalziqi
Posted 2 years ago

In today's post-lecture questions "pat2 = _h" Case tells me that pat2 matches the following elements in exprs:

    {h[], h[a], h[b], h[a, b], h[a, a], h[a, b, c]}

Does this mean that pat2 = h = h? It seems like it, but this seems odd to me in that we are PATTERN MATCHING and, it seems to me, elements in one order should not necessarily be equivalent to elements in a different order.

Comment?

POSTED BY: Coe Miles

question = "If Mathematica is a term rewriting system, when I write a programme in Mathematica, am I writing a term rewriting rule, and is the programme a function?";

If[question==={"yes", "yes"}, "At what point does a rule become a system?","Help!"]

Yes! The evaluation system is effectively a huge database of pattern-matching term-rewriting rules. For example, think about:

D[x^3,x]

We know that this is "the derivative of x cubed with respect to x", and we know that when we see this pattern—the derivative of x^n_, if you will—that we should take the power, drop it to the front, and then subtract 1 from the power.

The Wolfram system is effectively doing the same thing: it sees that something matches the pattern D[x^n_,x] and says what we do: "I know what to do when I see that: D[x_n,x] :> n*x^(n-1) and that's what's returned to us.

When you write your own functions, you are effectively adding to this database of term-rewriting rules (and are often using those rules as foundations for your own definition). In this way, any program you write is just about matching patterns and transforming the appropriate ones into something new.

POSTED BY: Arben Kalziqi

Wonderful explanation! I'm going to give this more thought. I'm trying to get my head around Wolfram engine.

Posted 2 years ago

Anyone grok this list operation: Alphabet[][[;; 10 ;; 4]]

I understand Alphabet[]
I understand Alphabet[] [[;;10]]
I understand Alphabet[] [[;;4]]

I do not grok what's happening when the 2nd and 3rd statements are combined. I thought the ";;" operation acted like a pipe. The solution {a, e, i} isn't what I think a pipe should give.

POSTED BY: Coe Miles

Hey Coe, could you be a little clearer in your description of your inputs, their actual outputs, and the outputs you would expect? In the meantime, let me explain the meaning of each line you've included here.

Alphabet[][[;;10;;4]]

This is equivalent to Alphabet[][[1;;10;;4]]. This means "starting with the list of all of the letters in the (Latin) alphabet, take the first through the tenth elements in steps of 4." I.e., that's elements 1,1+4,1+4,+4===1,5,9. (You don't go to 13 since the initial list only has 10 elements.) And indeed, that's what this code does—cf. MapIndexed[#2[[1]] -> #1 &, Alphabet[]] or Thread[Range@26 -> Alphabet[]] to see it directly.

Actually, I see what you were initially asking. I think the above sufficiently clarifies it, but "in order":

  • Alphabet[] provides a list containing the characters of the Latin alphabet
  • Appending [[;;10]] is the same as appending [[1;;10]] and is extracting the 1st through 10th parts of the list containing the alphabet
  • Similarly, appending [[;;4]] is equivalent to appending [[1;;4]] and is extracting the 1st through 4th parts of the list containing the alphabet

Doing [[a;;b;;c]] is not the same as doing [[a;;b]][[;;c]]. The "sandwich" construction specifically means "go from a to b in jumps of size c"; it's different from "chaining" ;;/Span commands through [[ ]]/Part.

POSTED BY: Arben Kalziqi

Hello Coe!

Arben's explanation made me want to see it in color. This is what came of it. I hope it helps.

PLEASE SEE THE NOTEBOOK ATTACHED TO THIS COMMENT

Have fun!

Attachments:
POSTED BY: Lori Johnson
Posted 2 years ago

Thanks for teaching and I look forward to gaining new insight and learning the various facets of the Wolfram Language and learning to code with Mathematica. The course in this series labeled with #34 for the most part was attended, although completion of the course-work is latent. Hastily, without having differentiated or juxtaposed the two sets of files, I'm wondering about the development or difference thereof. Also, is this the appropriate place to provide commentary or share what you are learning or problems that you may be stuck on in the sense of posing a problem that is confounding?

For the sake of convenience, I have the following two lines for reference with the time zone set to GMT-8 for current locale the default being +1 given the supposed original temporal datum or original time where it is that the Vatican City state is presently, as well as central Europe and Scandinavia. This is just for contrasting disparate times along the lines of DateObject[] and use of SolarTime[] and MoonPosition[] for scheduling, thinking with respect to calendrical arithmetic or geo-computation for arranging one's day according to a plan in the sense of avoiding scheduling conflicts and slotting time around attendance of the course.

Transpose@{Alphabet["Greek"][[1;;10]]//Capitalize,(QuantityMagnitude/@Table[(a-DateObject[List[1,1,11,0,0,0],"Instant","Gregorian",1.`]),{a,{DateObject[{2024,1,29,9,0,0}],DateObject[{2024,1,30,9,0,0}],DateObject[{2024,1,31,9,0,0}],DateObject[{2024,2,1,9,0,0}],DateObject[{2024,2,2,9,0,0}],DateObject[{2024,2,5,9,0,0}],DateObject[{2024,2,6,9,0,0}],DateObject[{2024,2,7,9,0,0}],DateObject[{2024,2,8,9,0,0}],DateObject[{2024,2,9,9,0,0}]}}])//Ceiling//FactorInteger}//Grid

and also

TableForm[Transpose[List[List["Lists and Associations","Assignments, Rules and Patterns","Syntax and Expressions","Writing a Program","Good Coding Practices","Interfaces and Deployment","Working with Data, Part I","Working with Data, Part II", "Developing Packages","Review Session"],List[DateObject[{2024,1,29,9,0,0},"Instant","Gregorian", -8.`],DateObject[{2024,1,30,9,0,0}, "Instant", "Gregorian", -8.`], DateObject[{2024,1,31,9,0,0}, "Instant","Gregorian",-8.`],DateObject[{2024,2,1,9,0,0},"Instant","Gregorian",-8.`],DateObject[{2024,2,2,9,0,0},"Instant","Gregorian",-8.`],DateObject[{2024,2,5,9,0,0},"Instant","Gregorian",-8.`],DateObject[{2024,2,6,9,0,0}, "Instant", "Gregorian", -8.`],DateObject[{2024,2,7,9,0,0}, "Instant", "Gregorian",-8.`],DateObject[{2024,2,8,9,0,0},"Instant","Gregorian",-8.`],DateObject[{2024,2,9,9,0,0}, "Instant","Gregorian", -8.`]]]]]

With respect to this is the question of how to seamlessly integrate sharing of snippets of code like this in and that within Wolfram|One this was drafted and then the sequence was right click the "cell object delineator" (For lack of the proper term, assuming that is the incorrect phrase or string for a potential association) and then through the "drop down menu" "Plain Text" was selected and then "Alt + Tab" to navigate to Notepad and then "Ctrl + V" in the window after left clicking and then copying again via the aforementioned technique and then tabbing or repeatedly using the "Alt + Tab" macro/technique or combined key-press selecting the Microsoft Edge window and then again (As with Notepad via Windows 11) left-clicking and then pasting or using the "Ctrl + V" key-combination after left-clicking. This is rather cumbersome and tedious in the sense of efficacy with respect to the users resource of time (Avoiding philosophical subtleties with respect to the complexity classes and dichotomy in the sense of Kolmogorov & also the power tower or sequential binary operation, to provide an errant opinion in the mode of assumption). Perhaps accessing this page from within the Mathematica console or the Wolfram|One program such as what was mentioned earlier with external APIs in some way navigating a directory safely and in a maximally efficient manner with respect to augmentations such as keypress (Again, lacking the lingo or appropriate terminology with respect to this programming language or the sequence of expressions in the sense of algorithm).

One question is about accessing this course via BigMarker through a secure channel or learning about ports and other nuanced aspects in the sense of being conservative with data and being able to readily upload information through the WDF or contribute in real-time to the Wolfram Function Repository without removing attention from the lecture such as with alternate channels of data in the sense of active execution for formatting and the like.

Hopefully, I can provide less loquacious or verbose inquiries, yet the actual procedure of the computer program (I assume algorithm is correct in the sense of encapsulating it lexically or calling it by one word, as I imagine that I may do if there is audio programming and "calling" the server/use of the kernel involves univocal definitions and sensitivity in terms of attenuation) is what I'm curious about and I've deviated from solving the puzzles or producing a solution set, to my own detriment.

Given that so much time is spent with low-level calculations in Mathematica such as the above, a curiosity is with more compact functions such as with the pure function or defining the concept parametrically (Only having a vague notion of that at present, in the sense of a region that may be implicit, explicit, or parametric, according with abstract or universal geometry [rudimentary mathematical constructions and later demonstrations is a crucial project at present with developing thinking methodically or discerning the methodology, which I think that the Documentation Center does a good job of as it is worded, that I've noticed up until now, although one curiosity, further still, tangentially, is about the LinkSnooper and modifying the formatting with notebooks for stylesheets and whatnot. CloudDeploy[] was noted at 0713 0750 0203 and APIFunction[] on 0863 that date, although I currently lack knowledge of their utility with respect to rough outline of the aforementioned project, failin to attend/being truent for the course on May 16, 2023 on Programming Fundamentals. There is a wonder from 11439 about notation and Boolean Algebra with nn*ee, b^^nnnn, &&, ||, !, and <> about Element[] for the atomic expressions and use of Distributed[], UndirectedEdge[], DirectedEdge[] for Galois Theory (Which was, FiniteField[] and the related group theoretic constructs, experimental as of version 13.3.0) with there a curiosity about Polynomial Algebra and the S- and K-combinatorics with the Chief Executive Officer expounding work from December 1920 (Find WikipediaData@"Combinatory Logic" for a more concise elaboration) and use of bit-vectors in the aforementioned sense of a directory and efficacious navigation through WolframScript via the command line without a graphical interface.

738904.0199

POSTED BY: Updating Name

Hey Arben,

I've not used associations before and I am trying to imagine what is their superpower. I'm not really a software writer, I just play one when I'm trying to study or solve engineering problems. One idea that jumps off the page is using a list of variable value assignments that can be summoned in a program without actually defining the variables outside of the context of the operation using them. That's kind of neat. I'd have to try that out and see if it makes a program easier to write or understand. But I suspect that's just the tip of the iceberg (as is everything else in the Wolfram language).

What do you say is the superpower in using associations?

POSTED BY: Carl Hahn

Hey Carl! Indeed, you can think of associations as constituting some "local map" between keys and values (and indeed, that might be part of the reason why they can be "indexed" with single brackets like functions can, though this is just a wild guess).

The primary value of associations in my view comes from the the organizational structure. For example, suppose I have a nested association:

scores=<|"Bob"-><|"Geography"->100,"Mathematics"->80,"Chemistry"->90|>,
"Alice"-><|"Geography"->90,"Mathematics"->100,"Chemistry"->85|>,
"Carol"-><|"Geography"->Missing["Absent"],"Mathematics"->100,"Chemistry"->95|>|>,

Now, without needing to remember which student or score is where, I can do something like:

scores["Bob"]

or:

scores["Bob","Chemistry"]

or:

scores[[All,"Mathematics"]]

This can be very useful for obvious reasons, especially as datasets get larger and more complicated.

We'll discuss this more later in the course, but you may recall that pure functions work with numbered, unnamed slots: #1+#2&[a,b] returns: a+b But this isn't the only way they can work—they can work with slots named by keys as well: #cat+#dog&[<|"cat"->1,"dog"->2|>] will return 3. This lets you write code that not only extracts the appropriate parts very easy, but performs various queries in a super readable and simple way. For example, the following code will select any students who have a chemistry score of 90 or higher: Select[scores,#Chemistry≥90&] Finally, from a technical perspective, it is faster to add or remove key-value pairs to an association than to add or remove elements with a list. This doesn't really crop up at the example scales we're talking about here, but can have an effect at larger sizes.

POSTED BY: Arben Kalziqi
Posted 2 years ago

Hi arben, Yes this is the tip of iceberg. I suggest you hash table as something to know. O(1) as a search algorithm. Hash tree and topology is a rich context to know

POSTED BY: Mauro Bertani

Hi everybody—I've added today's "filled-out" notebook to the materials folder. See you tomorrow!

POSTED BY: Arben Kalziqi

The link in the email I received doesn't work. How do I navigate to the materials folder? I looked around and didn't see an obvious link.

POSTED BY: David Snyder

Hi David, Apologies for the bad link in today's recording email. The one below should take you right to the folder: https://wolfr.am/WSG48_Programming_Profeciency

POSTED BY: Cassidy Hinkle
Posted 2 years ago

Arben, how do I post without replying to someone else's post (like I am doing now)?

I do have a question about Riffle[ ].

Riffle[{1,2,3}, {x, y}]

outputs {1,x,2,y,3}, understandably. But

Riffle[{x,y}, {1,2,3}]

outputs {x,1,y}. Why? I would have expected to get {x, 1, y, 2}.

Thanks.

POSTED BY: Wissam Barakat

If you want to create a new question on Wolfram Community, please use the button "Start a new Discussion" on the right side of Community's homepage.

enter image description here

Then use the instructions here: http://wolfr.am/READ-1ST

POSTED BY: Ahmed Elbanna

Daily recordings will be shared with the group each day, so you can catch up on any sessions you miss. Looking forward to it!

POSTED BY: Jamie Peterson

I can't make it at this time on MWF, but can on TTh.

POSTED BY: David Snyder

Day 7: Found the notebook to download but not the "data" file. Where can I get this?

POSTED BY: Michael Ulrey

Almost missed this down at the bottom of the thread, but the amoeba folder should now have a data folder there!

POSTED BY: Arben Kalziqi
Reply to this discussion
Community posts can be styled and formatted using the Markdown syntax.
Reply Preview
Attachments
Remove
or Discard