Why is this code so slow?












2












$begingroup$


This code for the first five iterations the speed is okay , but after that the speed is very slow, I cannot understand what is wrong with this? Would you please help me fix it?



  Clear[A, r, x, s, e]
s := 0.3405
e := 1.6539*10^-21
u[0] := 0.
u[1] := 0.1

A[r_] := A[r] =
Piecewise[{{r - 2.5 s - 48*e *s^12*r^-13 + 24*e*s^6*r^-7,
r > 2.5 s}, {-48*e*s^12*r^-13 + 24*e*s^6*r^-7,
s [LessSlantEqual] r [LessSlantEqual] 2.5 s}, {r - s -
24*e*s^-1, r < s}}]
For[i = 2, i < 101,
i++, { u[i_] :=
x /. FindRoot[
u[i - 1] +
1/(i^2 (u[i - 1] - u[i - 2])^2) (u[i - 1] - u[i - 2]) -
0.9 A[x] == x , {x, 1.}]; Print[u[i]]}]









share|improve this question









$endgroup$

















    2












    $begingroup$


    This code for the first five iterations the speed is okay , but after that the speed is very slow, I cannot understand what is wrong with this? Would you please help me fix it?



      Clear[A, r, x, s, e]
    s := 0.3405
    e := 1.6539*10^-21
    u[0] := 0.
    u[1] := 0.1

    A[r_] := A[r] =
    Piecewise[{{r - 2.5 s - 48*e *s^12*r^-13 + 24*e*s^6*r^-7,
    r > 2.5 s}, {-48*e*s^12*r^-13 + 24*e*s^6*r^-7,
    s [LessSlantEqual] r [LessSlantEqual] 2.5 s}, {r - s -
    24*e*s^-1, r < s}}]
    For[i = 2, i < 101,
    i++, { u[i_] :=
    x /. FindRoot[
    u[i - 1] +
    1/(i^2 (u[i - 1] - u[i - 2])^2) (u[i - 1] - u[i - 2]) -
    0.9 A[x] == x , {x, 1.}]; Print[u[i]]}]









    share|improve this question









    $endgroup$















      2












      2








      2





      $begingroup$


      This code for the first five iterations the speed is okay , but after that the speed is very slow, I cannot understand what is wrong with this? Would you please help me fix it?



        Clear[A, r, x, s, e]
      s := 0.3405
      e := 1.6539*10^-21
      u[0] := 0.
      u[1] := 0.1

      A[r_] := A[r] =
      Piecewise[{{r - 2.5 s - 48*e *s^12*r^-13 + 24*e*s^6*r^-7,
      r > 2.5 s}, {-48*e*s^12*r^-13 + 24*e*s^6*r^-7,
      s [LessSlantEqual] r [LessSlantEqual] 2.5 s}, {r - s -
      24*e*s^-1, r < s}}]
      For[i = 2, i < 101,
      i++, { u[i_] :=
      x /. FindRoot[
      u[i - 1] +
      1/(i^2 (u[i - 1] - u[i - 2])^2) (u[i - 1] - u[i - 2]) -
      0.9 A[x] == x , {x, 1.}]; Print[u[i]]}]









      share|improve this question









      $endgroup$




      This code for the first five iterations the speed is okay , but after that the speed is very slow, I cannot understand what is wrong with this? Would you please help me fix it?



        Clear[A, r, x, s, e]
      s := 0.3405
      e := 1.6539*10^-21
      u[0] := 0.
      u[1] := 0.1

      A[r_] := A[r] =
      Piecewise[{{r - 2.5 s - 48*e *s^12*r^-13 + 24*e*s^6*r^-7,
      r > 2.5 s}, {-48*e*s^12*r^-13 + 24*e*s^6*r^-7,
      s [LessSlantEqual] r [LessSlantEqual] 2.5 s}, {r - s -
      24*e*s^-1, r < s}}]
      For[i = 2, i < 101,
      i++, { u[i_] :=
      x /. FindRoot[
      u[i - 1] +
      1/(i^2 (u[i - 1] - u[i - 2])^2) (u[i - 1] - u[i - 2]) -
      0.9 A[x] == x , {x, 1.}]; Print[u[i]]}]






      equation-solving iteration






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked 2 hours ago









      morapimorapi

      204




      204






















          1 Answer
          1






          active

          oldest

          votes


















          5












          $begingroup$

          I recommend you learn the distinction between immediate (=) and delayed (:=) assignments. They make the difference between slow and fast code here. Start with this tutorial or this book chapter, then look at memoization.



          s = 0.3405;
          e = 1.6539*10^-21;
          u[0] = 0.;
          u[1] = 0.1;

          A[r_] = Piecewise[{{r - 2.5 s - 48*e*s^12*r^-13 + 24*e*s^6*r^-7, r > 2.5 s},
          {-48*e*s^12*r^-13 + 24*e*s^6*r^-7, s <= r <= 2.5 s},
          {r - s - 24*e*s^-1, r < s}}];

          u[i_] := u[i] = x /. FindRoot[
          u[i - 1] + 1/(i^2 (u[i - 1] - u[i - 2])^2) (u[i - 1] - u[i - 2]) - 0.9 A[x] == x, {x, 1.}]

          Array[u, 100]



          {0.1, 1.77164, 1.37065, 1.04259, 0.887781, 0.708344, 0.59461,
          0.457228, 0.367364, 0.296071, 0.256104, 0.20463, 0.208487, 1.20917,
          1.04197, 0.939331, 0.879865, 0.827963, 0.774591, 0.72775, 0.67934,
          0.63666, 0.592369, 0.553172, 0.512352, 0.476112, 0.438261, 0.404563,
          0.369277, 0.339073, 0.321616, 0.301118, 0.296195, 0.224688, 0.273538,
          0.31357, 0.33593, 0.366902, 0.38813, 0.417572, 0.437777, 0.465834,
          0.48511, 0.511907, 0.530336, 0.55598, 0.573633, 0.598219, 0.615159,
          0.638772, 0.655054, 0.677768, 0.693441, 0.715321, 0.73043, 0.751535,
          0.766118, 0.786503, 0.800596, 0.820306, 0.833941, 0.852182, 0.85901,
          0.874152, 0.871531, 0.78396, 0.781416, 0.696402, 0.693931, 0.611329,
          0.608927, 0.528603, 0.526267, 0.448099, 0.445825, 0.369701, 0.367485,
          0.315658, 0.325798, 0.341207, 0.351098, 0.366134, 0.375788, 0.390468,
          0.399897, 0.414237, 0.42345, 0.437466, 0.446473, 0.46018, 0.46899,
          0.4824, 0.491022, 0.504149, 0.51259, 0.525444, 0.533712, 0.546306,
          0.554408, 0.56675}




          (takes about 5 seconds)



          Alternatively, use



          Table[u[i], {i, 1, 100}]


          (same result). Your combination of For and Print shows the results but doesn't let you keep using them for more calculations.






          share|improve this answer











          $endgroup$













          • $begingroup$
            thank you very much. I really appreciate it.
            $endgroup$
            – morapi
            5 mins ago












          Your Answer





          StackExchange.ifUsing("editor", function () {
          return StackExchange.using("mathjaxEditing", function () {
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["$", "$"], ["\\(","\\)"]]);
          });
          });
          }, "mathjax-editing");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "387"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f195054%2fwhy-is-this-code-so-slow%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          5












          $begingroup$

          I recommend you learn the distinction between immediate (=) and delayed (:=) assignments. They make the difference between slow and fast code here. Start with this tutorial or this book chapter, then look at memoization.



          s = 0.3405;
          e = 1.6539*10^-21;
          u[0] = 0.;
          u[1] = 0.1;

          A[r_] = Piecewise[{{r - 2.5 s - 48*e*s^12*r^-13 + 24*e*s^6*r^-7, r > 2.5 s},
          {-48*e*s^12*r^-13 + 24*e*s^6*r^-7, s <= r <= 2.5 s},
          {r - s - 24*e*s^-1, r < s}}];

          u[i_] := u[i] = x /. FindRoot[
          u[i - 1] + 1/(i^2 (u[i - 1] - u[i - 2])^2) (u[i - 1] - u[i - 2]) - 0.9 A[x] == x, {x, 1.}]

          Array[u, 100]



          {0.1, 1.77164, 1.37065, 1.04259, 0.887781, 0.708344, 0.59461,
          0.457228, 0.367364, 0.296071, 0.256104, 0.20463, 0.208487, 1.20917,
          1.04197, 0.939331, 0.879865, 0.827963, 0.774591, 0.72775, 0.67934,
          0.63666, 0.592369, 0.553172, 0.512352, 0.476112, 0.438261, 0.404563,
          0.369277, 0.339073, 0.321616, 0.301118, 0.296195, 0.224688, 0.273538,
          0.31357, 0.33593, 0.366902, 0.38813, 0.417572, 0.437777, 0.465834,
          0.48511, 0.511907, 0.530336, 0.55598, 0.573633, 0.598219, 0.615159,
          0.638772, 0.655054, 0.677768, 0.693441, 0.715321, 0.73043, 0.751535,
          0.766118, 0.786503, 0.800596, 0.820306, 0.833941, 0.852182, 0.85901,
          0.874152, 0.871531, 0.78396, 0.781416, 0.696402, 0.693931, 0.611329,
          0.608927, 0.528603, 0.526267, 0.448099, 0.445825, 0.369701, 0.367485,
          0.315658, 0.325798, 0.341207, 0.351098, 0.366134, 0.375788, 0.390468,
          0.399897, 0.414237, 0.42345, 0.437466, 0.446473, 0.46018, 0.46899,
          0.4824, 0.491022, 0.504149, 0.51259, 0.525444, 0.533712, 0.546306,
          0.554408, 0.56675}




          (takes about 5 seconds)



          Alternatively, use



          Table[u[i], {i, 1, 100}]


          (same result). Your combination of For and Print shows the results but doesn't let you keep using them for more calculations.






          share|improve this answer











          $endgroup$













          • $begingroup$
            thank you very much. I really appreciate it.
            $endgroup$
            – morapi
            5 mins ago
















          5












          $begingroup$

          I recommend you learn the distinction between immediate (=) and delayed (:=) assignments. They make the difference between slow and fast code here. Start with this tutorial or this book chapter, then look at memoization.



          s = 0.3405;
          e = 1.6539*10^-21;
          u[0] = 0.;
          u[1] = 0.1;

          A[r_] = Piecewise[{{r - 2.5 s - 48*e*s^12*r^-13 + 24*e*s^6*r^-7, r > 2.5 s},
          {-48*e*s^12*r^-13 + 24*e*s^6*r^-7, s <= r <= 2.5 s},
          {r - s - 24*e*s^-1, r < s}}];

          u[i_] := u[i] = x /. FindRoot[
          u[i - 1] + 1/(i^2 (u[i - 1] - u[i - 2])^2) (u[i - 1] - u[i - 2]) - 0.9 A[x] == x, {x, 1.}]

          Array[u, 100]



          {0.1, 1.77164, 1.37065, 1.04259, 0.887781, 0.708344, 0.59461,
          0.457228, 0.367364, 0.296071, 0.256104, 0.20463, 0.208487, 1.20917,
          1.04197, 0.939331, 0.879865, 0.827963, 0.774591, 0.72775, 0.67934,
          0.63666, 0.592369, 0.553172, 0.512352, 0.476112, 0.438261, 0.404563,
          0.369277, 0.339073, 0.321616, 0.301118, 0.296195, 0.224688, 0.273538,
          0.31357, 0.33593, 0.366902, 0.38813, 0.417572, 0.437777, 0.465834,
          0.48511, 0.511907, 0.530336, 0.55598, 0.573633, 0.598219, 0.615159,
          0.638772, 0.655054, 0.677768, 0.693441, 0.715321, 0.73043, 0.751535,
          0.766118, 0.786503, 0.800596, 0.820306, 0.833941, 0.852182, 0.85901,
          0.874152, 0.871531, 0.78396, 0.781416, 0.696402, 0.693931, 0.611329,
          0.608927, 0.528603, 0.526267, 0.448099, 0.445825, 0.369701, 0.367485,
          0.315658, 0.325798, 0.341207, 0.351098, 0.366134, 0.375788, 0.390468,
          0.399897, 0.414237, 0.42345, 0.437466, 0.446473, 0.46018, 0.46899,
          0.4824, 0.491022, 0.504149, 0.51259, 0.525444, 0.533712, 0.546306,
          0.554408, 0.56675}




          (takes about 5 seconds)



          Alternatively, use



          Table[u[i], {i, 1, 100}]


          (same result). Your combination of For and Print shows the results but doesn't let you keep using them for more calculations.






          share|improve this answer











          $endgroup$













          • $begingroup$
            thank you very much. I really appreciate it.
            $endgroup$
            – morapi
            5 mins ago














          5












          5








          5





          $begingroup$

          I recommend you learn the distinction between immediate (=) and delayed (:=) assignments. They make the difference between slow and fast code here. Start with this tutorial or this book chapter, then look at memoization.



          s = 0.3405;
          e = 1.6539*10^-21;
          u[0] = 0.;
          u[1] = 0.1;

          A[r_] = Piecewise[{{r - 2.5 s - 48*e*s^12*r^-13 + 24*e*s^6*r^-7, r > 2.5 s},
          {-48*e*s^12*r^-13 + 24*e*s^6*r^-7, s <= r <= 2.5 s},
          {r - s - 24*e*s^-1, r < s}}];

          u[i_] := u[i] = x /. FindRoot[
          u[i - 1] + 1/(i^2 (u[i - 1] - u[i - 2])^2) (u[i - 1] - u[i - 2]) - 0.9 A[x] == x, {x, 1.}]

          Array[u, 100]



          {0.1, 1.77164, 1.37065, 1.04259, 0.887781, 0.708344, 0.59461,
          0.457228, 0.367364, 0.296071, 0.256104, 0.20463, 0.208487, 1.20917,
          1.04197, 0.939331, 0.879865, 0.827963, 0.774591, 0.72775, 0.67934,
          0.63666, 0.592369, 0.553172, 0.512352, 0.476112, 0.438261, 0.404563,
          0.369277, 0.339073, 0.321616, 0.301118, 0.296195, 0.224688, 0.273538,
          0.31357, 0.33593, 0.366902, 0.38813, 0.417572, 0.437777, 0.465834,
          0.48511, 0.511907, 0.530336, 0.55598, 0.573633, 0.598219, 0.615159,
          0.638772, 0.655054, 0.677768, 0.693441, 0.715321, 0.73043, 0.751535,
          0.766118, 0.786503, 0.800596, 0.820306, 0.833941, 0.852182, 0.85901,
          0.874152, 0.871531, 0.78396, 0.781416, 0.696402, 0.693931, 0.611329,
          0.608927, 0.528603, 0.526267, 0.448099, 0.445825, 0.369701, 0.367485,
          0.315658, 0.325798, 0.341207, 0.351098, 0.366134, 0.375788, 0.390468,
          0.399897, 0.414237, 0.42345, 0.437466, 0.446473, 0.46018, 0.46899,
          0.4824, 0.491022, 0.504149, 0.51259, 0.525444, 0.533712, 0.546306,
          0.554408, 0.56675}




          (takes about 5 seconds)



          Alternatively, use



          Table[u[i], {i, 1, 100}]


          (same result). Your combination of For and Print shows the results but doesn't let you keep using them for more calculations.






          share|improve this answer











          $endgroup$



          I recommend you learn the distinction between immediate (=) and delayed (:=) assignments. They make the difference between slow and fast code here. Start with this tutorial or this book chapter, then look at memoization.



          s = 0.3405;
          e = 1.6539*10^-21;
          u[0] = 0.;
          u[1] = 0.1;

          A[r_] = Piecewise[{{r - 2.5 s - 48*e*s^12*r^-13 + 24*e*s^6*r^-7, r > 2.5 s},
          {-48*e*s^12*r^-13 + 24*e*s^6*r^-7, s <= r <= 2.5 s},
          {r - s - 24*e*s^-1, r < s}}];

          u[i_] := u[i] = x /. FindRoot[
          u[i - 1] + 1/(i^2 (u[i - 1] - u[i - 2])^2) (u[i - 1] - u[i - 2]) - 0.9 A[x] == x, {x, 1.}]

          Array[u, 100]



          {0.1, 1.77164, 1.37065, 1.04259, 0.887781, 0.708344, 0.59461,
          0.457228, 0.367364, 0.296071, 0.256104, 0.20463, 0.208487, 1.20917,
          1.04197, 0.939331, 0.879865, 0.827963, 0.774591, 0.72775, 0.67934,
          0.63666, 0.592369, 0.553172, 0.512352, 0.476112, 0.438261, 0.404563,
          0.369277, 0.339073, 0.321616, 0.301118, 0.296195, 0.224688, 0.273538,
          0.31357, 0.33593, 0.366902, 0.38813, 0.417572, 0.437777, 0.465834,
          0.48511, 0.511907, 0.530336, 0.55598, 0.573633, 0.598219, 0.615159,
          0.638772, 0.655054, 0.677768, 0.693441, 0.715321, 0.73043, 0.751535,
          0.766118, 0.786503, 0.800596, 0.820306, 0.833941, 0.852182, 0.85901,
          0.874152, 0.871531, 0.78396, 0.781416, 0.696402, 0.693931, 0.611329,
          0.608927, 0.528603, 0.526267, 0.448099, 0.445825, 0.369701, 0.367485,
          0.315658, 0.325798, 0.341207, 0.351098, 0.366134, 0.375788, 0.390468,
          0.399897, 0.414237, 0.42345, 0.437466, 0.446473, 0.46018, 0.46899,
          0.4824, 0.491022, 0.504149, 0.51259, 0.525444, 0.533712, 0.546306,
          0.554408, 0.56675}




          (takes about 5 seconds)



          Alternatively, use



          Table[u[i], {i, 1, 100}]


          (same result). Your combination of For and Print shows the results but doesn't let you keep using them for more calculations.







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited 1 hour ago

























          answered 1 hour ago









          RomanRoman

          5,12011130




          5,12011130












          • $begingroup$
            thank you very much. I really appreciate it.
            $endgroup$
            – morapi
            5 mins ago


















          • $begingroup$
            thank you very much. I really appreciate it.
            $endgroup$
            – morapi
            5 mins ago
















          $begingroup$
          thank you very much. I really appreciate it.
          $endgroup$
          – morapi
          5 mins ago




          $begingroup$
          thank you very much. I really appreciate it.
          $endgroup$
          – morapi
          5 mins ago


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Mathematica Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f195054%2fwhy-is-this-code-so-slow%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Masuk log Menu navigasi

          Identifying “long and narrow” polygons in with PostGISlength and width of polygonWhy postgis st_overlaps reports Qgis' “avoid intersections” generated polygon as overlapping with others?Adjusting polygons to boundary and filling holesDrawing polygons with fixed area?How to remove spikes in Polygons with PostGISDeleting sliver polygons after difference operation in QGIS?Snapping boundaries in PostGISSplit polygon into parts adding attributes based on underlying polygon in QGISSplitting overlap between polygons and assign to nearest polygon using PostGIS?Expanding polygons and clipping at midpoint?Removing Intersection of Buffers in Same Layers

          Старые Смолеговицы Содержание История | География | Демография | Достопримечательности | Примечания | НавигацияHGЯOLHGЯOL41 206 832 01641 606 406 141Административно-территориальное деление Ленинградской области«Переписная оброчная книга Водской пятины 1500 года», С. 793«Карта Ингерманландии: Ивангорода, Яма, Копорья, Нотеборга», по материалам 1676 г.«Генеральная карта провинции Ингерманландии» Э. Белинга и А. Андерсина, 1704 г., составлена по материалам 1678 г.«Географический чертёж над Ижорскою землей со своими городами» Адриана Шонбека 1705 г.Новая и достоверная всей Ингерманландии ланткарта. Грав. А. Ростовцев. СПб., 1727 г.Топографическая карта Санкт-Петербургской губернии. 5-и верстка. Шуберт. 1834 г.Описание Санкт-Петербургской губернии по уездам и станамСпецкарта западной части России Ф. Ф. Шуберта. 1844 г.Алфавитный список селений по уездам и станам С.-Петербургской губернииСписки населённых мест Российской Империи, составленные и издаваемые центральным статистическим комитетом министерства внутренних дел. XXXVII. Санкт-Петербургская губерния. По состоянию на 1862 год. СПб. 1864. С. 203Материалы по статистике народного хозяйства в С.-Петербургской губернии. Вып. IX. Частновладельческое хозяйство в Ямбургском уезде. СПб, 1888, С. 146, С. 2, 7, 54Положение о гербе муниципального образования Курское сельское поселениеСправочник истории административно-территориального деления Ленинградской области.Топографическая карта Ленинградской области, квадрат О-35-23-В (Хотыницы), 1930 г.АрхивированоАдминистративно-территориальное деление Ленинградской области. — Л., 1933, С. 27, 198АрхивированоАдминистративно-экономический справочник по Ленинградской области. — Л., 1936, с. 219АрхивированоАдминистративно-территориальное деление Ленинградской области. — Л., 1966, с. 175АрхивированоАдминистративно-территориальное деление Ленинградской области. — Лениздат, 1973, С. 180АрхивированоАдминистративно-территориальное деление Ленинградской области. — Лениздат, 1990, ISBN 5-289-00612-5, С. 38АрхивированоАдминистративно-территориальное деление Ленинградской области. — СПб., 2007, с. 60АрхивированоКоряков Юрий База данных «Этно-языковой состав населённых пунктов России». Ленинградская область.Административно-территориальное деление Ленинградской области. — СПб, 1997, ISBN 5-86153-055-6, С. 41АрхивированоКультовый комплекс Старые Смолеговицы // Электронная энциклопедия ЭрмитажаПроблемы выявления, изучения и сохранения культовых комплексов с каменными крестами: по материалам работ 2016-2017 гг. в Ленинградской области