WOLFRAM

Wolfram Language

Education & Academic

New in 13.2: Introducing Astro Computation

Last year we released Version 13.1 of the Wolfram Language. Here are the updates in astro computation since then, including the latest features in 13.2.

Introducing Astro Computation

Astronomy has been a driving force for computation for more than 2000 years (from the Antikythera device on)... and in Version 13.2 it’s coming to Wolfram Language in a big way. Yes, the Wolfram Language (and Wolfram|Alpha) have had astronomical data for well over a decade. But what’s new now is astronomical computation fully integrated into the system. In many ways, our astro computation capabilities are modeled on our geo computation ones. But astro is substantially more complicated. Mountains don’t move (at least perceptibly), but planets certainly do. Relativity also isn’t important in geography, but it is in astronomy. And on the Earth, latitude and longitude are good standard ways to describe where things are. But in astronomy—especially with everything moving—describing where things are is much more complicated. Oh, and there’s the question of where things “are,” versus where things appear to be—because of effects ranging from light-propagation delays to refraction in the Earth’s atmosphere.

The key function for representing where astronomical things are is AstroPosition. Here’s where Mars is now:

What does that output mean? It’s very “here and now” oriented. By default, it’s telling me the azimuth (angle from north) and altitude (angle above the horizon) for Mars from where Here says I am, at the time specified by Now. How can I get a less “personal” representation of “where Mars is”? Because if even I just reevaluate my previous input now, I’ll get a slightly different answer, just because of the rotation of the Earth:

One thing to do is to use equatorial coordinates, that are based on a frame centered at the center of the Earth but not rotating with the Earth. (One direction is defined by the rotation axis of the Earth, the other by where the Sun is at the time of the spring equinox.) The result is the “astronomer-friendly” right ascension/declination position of Mars:

And maybe that’s good enough for a terrestrial astronomer. But what if you want to specify the position of Mars in a way that doesn’t refer to the Earth? Then you can use the now-standard ICRS frame, which is centered at the center of mass of the Solar System:

Often in astronomy the question is basically “which direction should I point my telescope in?”, and that’s something one wants to specify in spherical coordinates. But particularly if one’s “out and about in the Solar System” (say thinking about a spacecraft), it’s more useful to be able to give actual Cartesian coordinates for where one is:

And here are the raw coordinates (by default in astronomical units):

AstroPosition is backed by lots of computation, and in particular by ephemeris data that covers all planets and their moons, together with other substantial bodies in the Solar System:

By the way, particularly the first time you ask for the position of an obscure object, there may be some delay while the necessary ephemeris gets downloaded. The main ephemerides we use give data for the period 2000–2050. But we also have access to other ephemerides that cover much longer periods. So, for example, we can tell where Ganymede was when Galileo first observed it:

We also have position data for more than 100,000 stars, galaxies, pulsars and other objects—with many more coming soon:

Things get complicated very quickly. Here’s the position of Venus seen from Mars, using a frame centered at the center of Mars:

If we pick a particular point on Mars, then we can get the result in azimuth-altitude coordinates relative to the Martian horizon:

Another complication is that if you’re looking at something from the surface of the Earth, you’re looking through the atmosphere, and the atmosphere refracts light, making the position of the object look different. By default, AstroPosition takes account of this when you use coordinates based on the horizon. But you can switch it off, and then the results will be different—and, for example, for the Sun at sunset, substantially different:

And then there’s the speed of light, and relativity, to think about. Let’s say we want to know where Neptune “is” now. Well, do we mean where Neptune “actually is”, or do we mean “where we observe Neptune to be” based on light from Neptune coming to us? For frames referring to observations from Earth, we’re normally concerned with the case where we include the “light time” effect—and, yes, it does make a difference:

OK, so AstroPosition—which is the analog of GeoPosition—gives us a way to represent where things are, astronomically. The next important function to discuss is AstroDistance—the analog of GeoDistance.

This gives the current distance between Venus and Mars:

This is the current distance from where we are (according to Here) and the position of the Viking 2 lander on Mars:

This is the distance from Here to the star τ Ceti:

To be more precise, AstroDistance really tells us the distance from a certain object, to an observer, at a certain local time for the observer (and, yes, the fact that it’s local time matters because of light delays):

And, yes, things are quite precise. Here’s the distance to the Apollo 11 landing site on the Moon, computed 5 times with a 1-second pause in between, and shown to 10-digit precision:

This plots the distance to Mars for every day in the next 10 years:

Another function is AstroAngularSeparation, which gives the angular separation between two objects as seen from a given position. Here’s the result from Jupiter and Saturn (seen from the Earth) over a 20-year span:

Education & Academic

Fuel for the Future: Sustainable Foods with Wolfram Language

National Nutrition Month® is here, and the theme is “Fuel for the Future.” The future of food is sustainability, which we will explore through Wolfram Language. What is sustainable eating? It’s choosing the right foods, reducing food waste, eating local foods in season and even growing your own garden. Sustainability can lead to personal and planetary health.
Education & Academic

Getting Hot and Spicy on the Scoville Scale with Wolfram Language

National Chili Day is February 23 and we’re celebrating the spicy heat that peppers bring to a great bowl of chili by exploring the "ScovilleRating" property in Wolfram Language. The Scoville scale ranks the spiciness (or pungency) of peppers by measuring the amount of the molecule capsaicin in a pepper and assigning it a number rating in Scoville heat units (SHUs). Pharmacist and chemist Wilbur Scoville introduced the “Scoville organoleptic test,” which eventually became the Scoville scale, in 1912. At the time, Mr. Scoville relied on human taste testers willing to do this challenging job. Today, scientists use high-performance liquid chromatography (HPLC) to determine the precise amount of capsaicin in a pepper.
Education & Academic

New Interactive Course Teaches Useful Tips from an Expert Programmer

Wolfram Language has a wealth of built-in functions that require little or no programming, but there are special cases that require additional skill and knowledge to get the code to do things that go beyond those built-in capabilities. Wolfram U is pleased to announce a new free interactive course by veteran Wolfram programmer and instructor Dave Withoff that offers a collection of useful tips and instruction for intermediate-level programmers. This course will expand your understanding of Wolfram Language and help you to write more complex programs for custom results.

Let me start by saying that for beginners to the language, the free interactive course An Elementary Introduction to the Wolfram Language continues to be the best way to start learning how to write programs with Wolfram Language. A Guide to Programming with Wolfram Language is intended as a follow-on course for users who are ready to delve deeper into the language.

If you’re already familiar with the language and prepared to dive in to more advanced topics, you can explore the interactive course by clicking the following image before reading the rest of the blog post.

Motivation from History

To introduce Wolfram Language and modern computational thinking to the world, Stephen Wolfram published An Elementary Introduction to the Wolfram Language in 2015. Functionality gains for the Wolfram Cloud soon made it possible to turn the book into a full interactive online course that includes videos, exercises and a scratch notebook in an easy-to-use interface, available to anyone with an internet connection. Indeed, lessons from the introductory course have been viewed over a million times on computers, tablets and smartphones around the globe since its launch.

The new intermediate-level programming course grew out of user interest for more advanced lessons and a desire to address questions from experienced users related to topics such as assignments and evaluation rules, patterns, program interfaces and plotting. Dave Withoff has been using Wolfram Language since the release of Mathematica 1.2 in 1989. Dave was a developer of packages and internal code for early versions of Mathematica and is an experienced instructor in the world of academia and with Wolfram U. He has used his expertise with the language to create the new course lessons, sharing tips and techniques he has developed over the years.

Overview

Students should have some knowledge of Wolfram Language programming before they begin the course, which includes intermediate-level topics, such as the structure of expressions, variable localization and other details about the basic design of the system. Later sections include lessons on speed and memory efficiency, construction of interactive user interfaces, data visualization and debugging.

Here is a quick look at some of the lessons included in the course (shown in the table of contents in the left-hand column):

Even though the content goes beyond the introductory level, it should not take very long to complete this course. You should be able to finish the 22 short videos and eight quizzes in about four hours. The course tracks your progress automatically and generates your personalized certificate of course completion when you finish.

The next few sections of the blog post describe the different interactive course components in detail.

Lessons

The body of the course is a set of 22 lessons, starting with “Multiparadigm Programming.” This introductory lesson uses hands-on examples to illustrate different programming styles, followed by dedicated lessons on functional and rule-based programming that demonstrate different ways of writing programs in Wolfram Language.

Course sections include "Basic Language Structure," "Values and Variables," "Common Special Expressions," "Program Interfaces," "Plotting," "Analyzing and Optimizing Programs" and "Selected Applications." Each section has two or three lessons and an auto-graded quiz to test your understanding.

The videos range from 6 to 15 minutes in length, and each video is accompanied by a lesson notebook displayed on the right-hand side of the screen. There is an embedded scratch notebook where you can copy and paste Wolfram Language input directly from the lesson so you can try the examples for yourself.

Exercises

Each lesson comes with a set of exercises to practice the concepts. A detailed solution is provided for every exercise because the course is designed for independent study. The following shows an example from the lesson on knowledge representation, from the "Program Interfaces" section:

The notebooks with the exercises are interactive, so students can try variations of each problem in the Wolfram Cloud. In particular, they are encouraged to change the variables in examples and investigate the documentation and options available for built-in functions.

Quizzes

At the end of each section is a short, multiple-choice quiz with 10 problems. The quiz problems are at roughly the same level as those shown in the lessons, and a student who reviews the section thoroughly should have no difficulty in doing well on the quiz.

Students will receive instant feedback about their answers to the quiz questions, and they are encouraged to try hand and computer calculations to solve them.

Certifications Available

Students are encouraged to watch all the lessons and attempt the quizzes in the recommended sequence because course topics may rely on earlier concepts and techniques. When you complete the course, you can download a personalized certificate of completion. You will earn a course certificate after watching all the lessons and passing all the quizzes. Your progress is tracked automatically for you within the course using your Wolfram ID, making it easy to just pick up where you left off if you exit and return to the course later. A course certificate adds value to your professional resume, school and job applications or social media profile. This course provides useful preparation for the Wolfram Language Level I certification exam, and students are encouraged to take the exam and earn a proficiency certification.

Feedback from Daily Study Group Participants

Wolfram U offered a sneak peek of the course lessons and quizzes to Daily Study Group participants this spring, and we received some valuable feedback. Here is what participants said:

“This course improves efficiency by enabling me to keypunch less and giving me the knowledge to reduce computer run time.” “[Exercises] are always helpful and fun.” “Multiple Choice questions are adequate to test one’s knowledge. The best exercises were those when we were asked to program a solution for a problem with a specific outcome. It shows the versatility of Wolfram Language.” “I refer to the various notebooks included in the course to serve as examples and demonstrations of concepts applicable to the task on which I am working. Those dealing with symbolic computation are most helpful.” “The programming guide was very helpful, provided insights into the language.”

A Building Block for Success

I think you’ll find this new interactive course to be an enjoyable learning experience on your journey to become a more advanced and skilled user of Wolfram Language, just like our Daily Study Group cohort did. I hope you’ll reach out to let us know about the ways you find the course helpful and to share stories about your results. As always, we welcome any comments or suggestions for future courses and certifications.

Acknowledgments

I’m grateful to Andre Kuzniarek at Wolfram for suggesting the course concept; to the author, Dave Withoff, for answering the call to create this collection of programming topics; and to the Wolfram U staff who contributed to making it a reality. I would specifically like to acknowledge Cassidy Hinkle, Laura Crawford and Mariah Laugesen of the Wolfram U team.

Want more help? Register for one of Wolfram U’s Daily Study Groups.
Education & Academic

Learn Algebra from the Ground Up with Wolfram Language

Algebra is an essential course for understanding nearly all mathematics at the high-school level and beyond. Whether you plan to calculate profits at a business, balance a chemical equation, write efficient computer code or even just figure out which weights to put on the bar at the gym, algebra is completely indispensable. It’s no wonder that elementary algebra is a required field of study regardless of your eventual career or academic goals.
Announcements & Events

Trees Continue to Grow 🌱🌳

Last year we released Version 13.0 of the Wolfram Language. Here are the updates in trees since then, including the latest features in 13.1.

 

Trees Continue to Grow 🌱🌳

In Version 12.3 we introduced Tree as a new fundamental construct in the Wolfram Language. In Version 13.0 we added a variety of styling options for trees, and in Version 13.1 we’re adding more styling as well as a variety of new fundamental features.

An important update to the fundamental Tree construct in Version 13.1 is the ability to name branches at each node, by giving them in an association:

&#10005

All tree functions now include support for associations:

&#10005

In many uses of trees the labels of nodes are crucial. But particularly in more abstract applications one often wants to deal with unlabeled trees. In Version 13.1 the function UnlabeledTree (roughly analogously to UndirectedGraph) takes a labeled tree, and basically removes all visible labels. Here is a standard labeled tree

&#10005

and here’s the unlabeled analog:

&#10005

In Version 12.3 we introduced ExpressionTree for deriving trees from general symbolic expressions. Our plan is to have a wide range of “special trees” appropriate for representing different specific kinds of symbolic expressions. We’re beginning this process in Version 13.1 by, for example, having the concept of “Dataset trees”. Here’s ExpressionTree converting a dataset to a tree:

&#10005

And now here’s TreeExpression “inverting” that, and producing a dataset:

&#10005

(Remember the convention that *Tree functions return a tree; while Tree* functions take a tree and return something else.)

Here’s a “graph rendering” of a more complicated dataset tree:

&#10005

The new function TreeLeafCount lets you count the total number of leaf nodes on a tree (basically the analog of LeafCount for a general symbolic expression):

&#10005

Another new function in Version 13.1 that’s often useful in getting a sense of the structure of a tree without inspecting every node is RootTree. Here’s a random tree:

&#10005

RootTree can get a subtree that’s “close to the root”:

&#10005

It can also get a subtree that’s “far from the leaves”, in this case going down to elements that are at level –2 in the tree:

&#10005

In some ways the styling of trees is like the styling of graphs—though there are some significant differences as a result of the hierarchical nature of trees. By default, options inserted into a particular tree element affect only that tree element:

&#10005

But you can give rules that specify how elements in the subtree below that element are affected:

&#10005

In Version 13.1 there is now detailed control available for styling both nodes and edges in the tree. Here’s an example that gives styling for parent edges of nodes:

&#10005

Options like TreeElementStyle determine styling from the positions of elements. TreeElementStyleFunction, on the other hand, determines styling by applying a function to the data at each node:

&#10005

This uses both data and position information for each node:

&#10005

In analogy with VertexShapeFunction for graphs, TreeElementShapeFunction provides a general mechanism to specify how nodes of a tree should be rendered. This named setting for TreeElementShapeFunction makes every node be displayed as a circle:

&#10005
Announcements & Events

New in 13.1: Visual Effects and Beautification

Last year we released Version 13.0 of the Wolfram Language. Here are the updates in visual effects and beautification since then, including the latest features in 13.1.

 

Visual Effects & Beautification

At first it seemed like a minor feature. But once we’d implemented it, we realized it was much more useful than we’d expected. Just as you can style a graphics object with its color (and, as of Version 13.0, its filling pattern), now in Version 13.1 you can style it with its drop shadowing:
&#10005
Drop shadowing turns out to be a nice way to “bring graphics to life”
&#10005
or to emphasize one element over others:
&#10005
It works well in geo graphics as well:
&#10005
DropShadowing allows detailed control over the shadows: what direction they’re in, how blurred they are and what color they are:
&#10005
Drop shadowing is more complicated “under the hood” than one might imagine. And when possible it actually works using hardware GPU pixel shaders—the same technology that we’ve used since Version 12.3 to implement material-based surface textures for 3D graphics. In Version 13.1 we’ve explicitly exposed some well-known underlying types of 3D shading. Here’s a geodesic polyhedron (yes, that’s another new function in Version 13.1), with its surface normals added (using the again new function EstimatedPointNormals):
&#10005
Here’s the most basic form of shading: flat shading of each facet (and the specularity in this case doesn’t “catch” any facets):
&#10005
Here now is Gouraud shading, with a somewhat-faceted glint:
&#10005
And then there’s Phong shading, looking somewhat more natural for a sphere:
&#10005
Ever since Version 1.0, we’ve had an interactive way to rotate—and zoom into—3D graphics. (Yes, the mechanism was a bit primitive 34 years ago, but it rapidly got to more or less its modern form.) But in Version 13.1 we’re adding something new: the ability to “dolly” into a 3D graphic, imitating what would happen if you actually walked into a physical version of the graphic, as opposed to just zooming your camera:
&#10005
And, yes, things can get a bit surreal (or “treky”)—here dollying in and then zooming out: