Message Boards Message Boards

0
|
3620 Views
|
5 Replies
|
1 Total Likes
View groups...
Share
Share this post:

Speeding up numerical computation of Doble-Egg curves with Clothoids

I kindly ask you if you can give me some useful suggestions to speed up my program written in Wolfram language. For this purpose, some premises are necessary. The authors of the article in question use Matlab in their calculations. I reproduced figures 2, 3, 4, 5, 6, 7,8 and 9 of their article with Mathematica 12.3, and in doing so I noticed some errors in the original text that led the authors to perform a Preprint Rev1. pdf June 8, 2021 (see final quote in the Acknowledgments). I have found that in these graphs for the tracing of Clothoid the numerical calculation of the function d (Deltafi) = d12 is fundamental, the meaning of which is well described in relations (14) and (15) reported on pages 9 ÷ 10 of the aforementioned article. Figure 5 shows an example of the graphic representation of this function.

Now I correctly reproduce fig. 5 with N = 10,000 but with unacceptable processing time (8.76 h) while the authors take only a few seconds, always with N = 10,000 points. They sent me their Matlab code "Programa que pinta la function d (Delta phi)" see the attachment "Plot function d.rtf".

Can you give me some suggestions / optimization corrections of my Mathematica code in order to speed up this numerical calculation and break it down, if possible, to a few seconds of processing as they do with Matlab? PS: I am attaching my notebook in fig. 5, with (N = 1,000, t = 178 s) and with (N = 10,000, t = 8.76h)

Sincerely and thanks, Loris Lori

POSTED BY: LORIS LORI
5 Replies

Hi Hans, thanks again for your clarity of explanations.

POSTED BY: LORIS LORI
Posted 3 years ago

Hi Loris, I will try to answer your two questions.

1. To explain Clear@Evaluate[Context[]<>"*"] first check by executing the following line in its own cell in both notebooks, yours and mine:

Context[] <> "*"

When having both notebooks open I did not want variables with the same names to interfere with each other. So I changed the CellContext of my notebook from default "Global" to Notebook.

enter image description here

Therefore the need to change the argument to Clear

2. I just replaced your explicit numbers 10 000 with the symbol i which already had the same fixed value. The reason was to make it easier to try out different values for i. Such as 500, 1000, 2000 etc. This does not change the functionality of the code since the value of i remains constant during each trial.

POSTED BY: Hans Milton

Some lines of your code are not clear to me because I am a beginner of Mathematica software. 1st) Clear@Evaluate[Context[] <> "*"] your program works even without this instruction I get t = 42 s with N = 10,000. I looked in the Help with no success. 2nd) my function d12 in the Plot depends on a fixed index i because in the formula I found it must be calculated at the last point i = 10,000, while the function d12 that you write and which also works very well depends on a variable i { 1,10,000} and I don't understand why it has to work just like that

POSTED BY: LORIS LORI

Thank you very much for your solution, it was very enlightening for me. It is true that the simplest solutions are the most effective.

POSTED BY: LORIS LORI
Posted 3 years ago

The time is spent during plotting. The first argument to Plot, the function(s), is evaluated for each plot point. So making the functions simple and depending only on the plot variable speeds things up.

On my machine the attached takes around 17 s with N = 10 000

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

Group Abstract Group Abstract