From: SourceForge.net <no...@so...> - 2010-06-11 02:20:11
|
Bugs item #873301, was opened at 2004-01-08 20:39 Message generated for change (Comment added) made by sf-robot You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=104933&aid=873301&group_id=4933 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Lisp Core Group: None >Status: Closed Resolution: Works For Me Priority: 5 Private: No Submitted By: Stavros Macrakis (macrakis) Assigned to: Nobody/Anonymous (nobody) Summary: Gradef doesn't understand diff (workaround) Initial Comment: Suppose that f(x)=exp(g(x)). Then f'(x)=f(x)*g'(x). So how do we define this using gradef? Let's try the obvious solution: gradef( f(x), f(x) * diff(g(x),x) ) Now diff(f(x^2),x) => f(x-1)*'DIFF(g(x-1),x-1,1) Oops! That isn't right! It is substituting x-1 for x in the *second* argument of diff as well as the first! So we have to work around this doing something like gradef( f(x), f(x) * g1(x) ) gradef( g(x), g1(x) ) ---------------------------------------------------------------------- >Comment By: SourceForge Robot (sf-robot) Date: 2010-06-11 02:20 Message: This Tracker item was closed automatically by the system. It was previously set to a Pending status, and the original submitter did not respond within 14 days (the time period specified by the administrator of this Tracker). ---------------------------------------------------------------------- Comment By: Dieter Kaiser (crategus) Date: 2010-05-27 20:55 Message: As explained in the last posting I would like to suggest to close this bug report as "works for me". Setting the status to pending. Dieter Kaiser ---------------------------------------------------------------------- Comment By: Dieter Kaiser (crategus) Date: 2010-05-11 20:34 Message: First, again the example of this bug report: (%i6) gradef(f(x), f(x)*diff(g(x),x)); We get a wrong result with the above definition: (%i7) diff(f(2*sin(x)),x); (%o7) 2*cos(x)*f(2*sin(x))*'diff(g(2*sin(x)),2*sin(x),1) But Maxima can do it correctly. We have to define the problem the following way: (%i8) gradef(f(x), f(x)*at(diff(g(u),u),u=x))$ (%i9) diff(f(2*sin(x)),x); (%o9) 2*('at('diff(g(u),u,1),u = 2*sin(x)))*cos(x)*f(2*sin(x)) The example of the bug report now gives a correct result too: (%i10) diff(f(x^2),x); (%o10) 2*('at('diff(g(u),u,1),u = x^2))*x*f(x^2) >From this we might conclude, that we have not a bug, but we have to formulate the problem more precisely. By the way: The derivatives of the nine inverse Jacobi functions wrt the parameter m are defined as a noun form. Furthermore, the derivatives of the Bessel Y and K functions wrt the order have a noun form of a derivative on the property list. All this derivatives do not work too, but have the same error as reported in this bug report, e.g. (%i11) diff(inverse_jacobi_ns(x,2*m),m); (%o11) 2*'diff(inverse_jacobi_ns(x,2*m),2*m,1) The error for the inverse Jacobi functions is easy to correct. We simply put NIL for the derivative wrt the parameter m on the property list. We had some time ago an extension to sdiff to return a noun form for this case. With this change we get a correct noun form: (%i13) diff(inverse_jacobi_ns(x,2*m),m); (%o13) 'diff(inverse_jacobi_ns(x,2*m),m,1) This is an example of a wrong derivative of a Bessel K function: (%i15) diff(bessel_k(sin(n),x),n); (%o15) cos(n)*(%pi*csc(%pi*sin(n)) *('diff(bessel_i(-sin(n),x),sin(n),1) -'diff(bessel_i(sin(n),x),sin(n),1)) /2 -%pi*bessel_k(sin(n),x)*cot(%pi*sin(n))) To get this derivative in general correct we can put an expression with AT on the property list. Dieter Kaiser ---------------------------------------------------------------------- Comment By: Robert Dodier (robert_dodier) Date: 2006-07-22 15:48 Message: Logged In: YES user_id=501686 In 5.9.3cvs, I'm seeing a different wrong answer. gradef( f(x), f(x) * diff(g(x),x) ); diff(f(x^2),x) ; => 2*x*f(x^2)*'?%diff(g(x^2),x^2,1) Should be 2*x*f(x^2)*at('?%diff(g(u),u,1),[u=x^2]) or something like that (i.e., distinguish point of evaluation x^2 from variable of differentiation). <rant> Maxima adopts numerous mathematical conventions, mostly successfully, but this customary sloppiness with differentials is something I wish we could clean up. </rant> Not sure how the proposed workaround is supposed to work. It turns out g1(x) = bessel_i(1,x)*%e^-x -- surprise! ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=104933&aid=873301&group_id=4933 |