<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
  <channel>
    <title>MaplePrimes - answers and comments on Question, What's wrong with fsolve? Crash test.</title>
    <link>http://www.mapleprimes.com/questions/129457-Whats-Wrong-With-Fsolve-Crash-Test</link>
    <language>en-us</language>
    <copyright>2026 Maplesoft, A Division of Waterloo Maple Inc.</copyright>
    <generator>Maplesoft Document System</generator>
    <lastBuildDate>Tue, 09 Jun 2026 15:59:16 GMT</lastBuildDate>
    <pubDate>Tue, 09 Jun 2026 15:59:16 GMT</pubDate>
    <itunes:subtitle />
    <itunes:summary />
    <description>The latest answers and comments added to the Question, What's wrong with fsolve? Crash test.</description>
    <image>
      <url>http://www.mapleprimes.com/images/mapleprimeswhite.jpg</url>
      <title>MaplePrimes - answers and comments on Question, What's wrong with fsolve? Crash test.</title>
      <link>http://www.mapleprimes.com/questions/129457-Whats-Wrong-With-Fsolve-Crash-Test</link>
    </image>
    <item>
      <title>tolerances</title>
      <link>http://www.mapleprimes.com/questions/129457-Whats-Wrong-With-Fsolve-Crash-Test?ref=Feed:MaplePrimes:What's wrong with fsolve? Crash test.:Comments#answer129459</link>
      <itunes:summary>&lt;p&gt;fsolve may not have been satisfied that at the working precision it was not able to attain some tolerance. It's a flaw, that precision and tolerance are not separate for fsolve.&lt;/p&gt;
&lt;p&gt;Using operators instead of expressions seems to use a weaker tolerance&lt;/p&gt;
&lt;pre&gt;ans:=fsolve({(lu,lv)-&amp;gt;FDerivative2YYMain(lu,lv, 12.5)/(lv+12.5),
             (lu,lv)-&amp;gt;FDerivative3YYYMain(lu,lv, 12.5)/(lv+12.5)},
            [0.05435690547,0.54502809258264223447]);

  [0.054356905499263310199322866010579288988739481809993666893229496592579505151375,
   0.54502809258264223446637739872970465118604413199322232443888293557355194978678]

evalf(FDerivative2YYMain(ans[],12.5));

                                   -62
                          -7.287 10  
 
evalf(FDerivative3YYYMain(ans[],12.5));

                                   -60
                         5.34464 10   
&lt;/pre&gt;</itunes:summary>
      <description>&lt;p&gt;fsolve may not have been satisfied that at the working precision it was not able to attain some tolerance. It's a flaw, that precision and tolerance are not separate for fsolve.&lt;/p&gt;
&lt;p&gt;Using operators instead of expressions seems to use a weaker tolerance&lt;/p&gt;
&lt;pre&gt;ans:=fsolve({(lu,lv)-&amp;gt;FDerivative2YYMain(lu,lv, 12.5)/(lv+12.5),
             (lu,lv)-&amp;gt;FDerivative3YYYMain(lu,lv, 12.5)/(lv+12.5)},
            [0.05435690547,0.54502809258264223447]);

  [0.054356905499263310199322866010579288988739481809993666893229496592579505151375,
   0.54502809258264223446637739872970465118604413199322232443888293557355194978678]

evalf(FDerivative2YYMain(ans[],12.5));

                                   -62
                          -7.287 10  
 
evalf(FDerivative3YYYMain(ans[],12.5));

                                   -60
                         5.34464 10   
&lt;/pre&gt;</description>
      <guid>129459</guid>
      <pubDate>Mon, 09 Jan 2012 02:53:59 Z</pubDate>
      <itunes:author>pagan</itunes:author>
      <author>pagan</author>
    </item>
    <item>
      <title>Found</title>
      <link>http://www.mapleprimes.com/questions/129457-Whats-Wrong-With-Fsolve-Crash-Test?ref=Feed:MaplePrimes:What's wrong with fsolve? Crash test.:Comments#answer129510</link>
      <itunes:summary>&lt;p&gt;After understatnding that fsolve/sysnewton called and checking it&lt;/p&gt;
&lt;p&gt;i see such peace of code:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for it2 to 10 do &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lsub2:=seq(lvars[k]=x[k] - C[k],k=1..n); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Bproc then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; valsub2:=op(map(x-&amp;gt;rhs(x),[lsub2])) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not `fsolve/checkrange`(lsub2) then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if 5&amp;lt;=it2 then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for k to n do &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not `fsolve/checkrange`(lvars[k]=x[k] - C[k]) then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C[k]:=0 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if C=[`$`(0,n)] then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; it2:=11; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C:=C*factorial(it2); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; it2:=0; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; next &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C:=C/(it2+1); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; next &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Bproc then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B2:=traperror(evalf(leqns(valsub2),Digits+n)); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not type(B2,'list'('complex'('numeric'))) then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error "procedures don't evaluate to numeric types." &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B2:=traperror(evalf(subs(lsub2,leqns),Digits+n)) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if B2=lasterror or isreal and hastype(B2,nonreal) then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C:=C/(it2+1); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; next &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aB2:=add(abs(Re(z))+abs(Im(z)),z=B2); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; userinfo(2,fsolve,`new norm:`,aB2); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if aB2&amp;lt;aB then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C:=C/(it2+1) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if 10&amp;lt;it2 then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if;&lt;br&gt; &lt;br&gt; ----------&lt;/p&gt;
&lt;p&gt;So, 10 subiterations done with hope that norm simply will reduce (aB2&amp;lt;aB)! And if not (it2&amp;gt;10) then just go to new initial guess. That's why on practice some functions don't work. Because you have just two limit points instead of one with relatevely big norm of them difference due round off. It's not shame to have such errors, in my case i saw such situation under debugger only. But it rather shame not to repair them since 1996 in code that so "most wanted".&lt;/p&gt;</itunes:summary>
      <description>&lt;p&gt;After understatnding that fsolve/sysnewton called and checking it&lt;/p&gt;
&lt;p&gt;i see such peace of code:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for it2 to 10 do &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lsub2:=seq(lvars[k]=x[k] - C[k],k=1..n); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Bproc then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; valsub2:=op(map(x-&amp;gt;rhs(x),[lsub2])) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not `fsolve/checkrange`(lsub2) then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if 5&amp;lt;=it2 then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for k to n do &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not `fsolve/checkrange`(lvars[k]=x[k] - C[k]) then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C[k]:=0 &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if C=[`$`(0,n)] then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; it2:=11; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C:=C*factorial(it2); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; it2:=0; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; next &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C:=C/(it2+1); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; next &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if Bproc then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B2:=traperror(evalf(leqns(valsub2),Digits+n)); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not type(B2,'list'('complex'('numeric'))) then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error "procedures don't evaluate to numeric types." &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B2:=traperror(evalf(subs(lsub2,leqns),Digits+n)) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if B2=lasterror or isreal and hastype(B2,nonreal) then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C:=C/(it2+1); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; next &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aB2:=add(abs(Re(z))+abs(Im(z)),z=B2); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; userinfo(2,fsolve,`new norm:`,aB2); &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if aB2&amp;lt;aB then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C:=C/(it2+1) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end do; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if 10&amp;lt;it2 then &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end if;&lt;br&gt; &lt;br&gt; ----------&lt;/p&gt;
&lt;p&gt;So, 10 subiterations done with hope that norm simply will reduce (aB2&amp;lt;aB)! And if not (it2&amp;gt;10) then just go to new initial guess. That's why on practice some functions don't work. Because you have just two limit points instead of one with relatevely big norm of them difference due round off. It's not shame to have such errors, in my case i saw such situation under debugger only. But it rather shame not to repair them since 1996 in code that so "most wanted".&lt;/p&gt;</description>
      <guid>129510</guid>
      <pubDate>Tue, 10 Jan 2012 07:44:18 Z</pubDate>
      <itunes:author>icegood</itunes:author>
      <author>icegood</author>
    </item>
    <item>
      <title>operators</title>
      <link>http://www.mapleprimes.com/questions/129457-Whats-Wrong-With-Fsolve-Crash-Test?ref=Feed:MaplePrimes:What's wrong with fsolve? Crash test.:Comments#comment129460</link>
      <itunes:summary>&lt;p&gt;"u&lt;span&gt;sing operators instead of expressions seems to use a weaker tolerance&lt;/span&gt;".&lt;/p&gt;
&lt;p&gt;Yeah, it looks natural. All of that functions was created via codegen stuff so they are optimized =&amp;gt; less operations made =&amp;gt; precision of result is higher. But problem not in tolerance i.e. smth that checked and smth else under check fails. There could be another stuff that i had with newton under c on double type.Namely, because of&amp;nbsp;&lt;strong&gt;round-off error&lt;/strong&gt; newton algorythm could be divergent i.e. stuck on pairs (or even triples and generally on arbitrary number, i suspect)&amp;nbsp;of points x1, x2 such that&lt;/p&gt;
&lt;p&gt;x2= newton_step(x1) and x1= newton_step(x2).&lt;/p&gt;
&lt;p&gt;To overcome such situation after "critical times of guesses" i fixed delta=|x2-x1| and&lt;/p&gt;
&lt;p&gt;after "other critical times of guesses" i calculate new delta and if i see that new delta wasn't twice less than old one then i changed guess to random perturbated:&lt;/p&gt;
&lt;p&gt;x2+=unit_rand()*(x1-x2). Sequence of guesses still inside bounds and more probably covergent to only one point.&lt;/p&gt;
&lt;p&gt;I just wonder, wheather maple developers did smth like that, because such behavior doesn't depend on neither tolerance cryterium nor precision of calculations as well. It depends only on precision in that sense if precision is higher then such situation is less probable to occur but still probable.&lt;/p&gt;</itunes:summary>
      <description>&lt;p&gt;"u&lt;span&gt;sing operators instead of expressions seems to use a weaker tolerance&lt;/span&gt;".&lt;/p&gt;
&lt;p&gt;Yeah, it looks natural. All of that functions was created via codegen stuff so they are optimized =&amp;gt; less operations made =&amp;gt; precision of result is higher. But problem not in tolerance i.e. smth that checked and smth else under check fails. There could be another stuff that i had with newton under c on double type.Namely, because of&amp;nbsp;&lt;strong&gt;round-off error&lt;/strong&gt; newton algorythm could be divergent i.e. stuck on pairs (or even triples and generally on arbitrary number, i suspect)&amp;nbsp;of points x1, x2 such that&lt;/p&gt;
&lt;p&gt;x2= newton_step(x1) and x1= newton_step(x2).&lt;/p&gt;
&lt;p&gt;To overcome such situation after "critical times of guesses" i fixed delta=|x2-x1| and&lt;/p&gt;
&lt;p&gt;after "other critical times of guesses" i calculate new delta and if i see that new delta wasn't twice less than old one then i changed guess to random perturbated:&lt;/p&gt;
&lt;p&gt;x2+=unit_rand()*(x1-x2). Sequence of guesses still inside bounds and more probably covergent to only one point.&lt;/p&gt;
&lt;p&gt;I just wonder, wheather maple developers did smth like that, because such behavior doesn't depend on neither tolerance cryterium nor precision of calculations as well. It depends only on precision in that sense if precision is higher then such situation is less probable to occur but still probable.&lt;/p&gt;</description>
      <guid>129460</guid>
      <pubDate>Mon, 09 Jan 2012 04:14:05 Z</pubDate>
      <itunes:author>icegood</itunes:author>
      <author>icegood</author>
    </item>
  </channel>
</rss>