Thank you for reporting this.

I think Robert Marik is the best person to reply to this
issue. I guess he is busy now but I hope he will reply in a
fairly soon and give his opinion.

On Mon, Mar 22, 2010 at 9:26 AM, YURi KARADZhOV
<yuri.karadz...@gmail.com> wrote:
> I played around with sage and found some problems with desolve command.
> To solve ode diff(y(x),x)+a*y(x)+b*x+c we should first define variables and
> functions
>
> x = var('x')
>
> a,b,c=var('a b c')
>
> y=function('y',x)
>
> eq=diff(y,x)+a*y+b*x+c
>
> but than unless it is obvious that the dependent variable is x and
> independent is y we should write such command
>
> desolve(eq,y,ivar=x)
>
> which is really annoying. And what is worse - we get a wrong answer
>
> -((a*x - 1)*b*e^(a*x)/a^2 + c*e^(a*x)/a - c)*e^(-a*x)
>
> but the right answer is
>
> -((a*x - 1)*b*e^(a*x)/a^2 + c*e^(a*x)/a - _C1)*e^(-a*x)
>
> where _C1 - arbitrary constant.
>
> Of course, if we don't use c as a variable in equation we will get a right
> answer, but another problem will rise. If we have a bunch of ODE and want
> their solutions to interact somehow, than we expect different arbitrary
> constant for each one. But sage uses one letter c in every solution, which
> causes problems.
>
>
> Actually the first problem is easy to solve. We can correct
> devel/sage-main/build/sage/calculus/desolvers.py
>
> First - make dvar variable which represent dependent variable optional by
> giving it default value None.
>
> < #64
> def desolve(de, dvar, ics=None, ivar=None, show_method=False,
> contrib_ode=False):
>>
> def desolve(de, dvar=None, ics=None, ivar=None, show_method=False,
> contrib_ode=False):
>
> Second - add definition of dvar.
> dvar - is one of the functions differentiated.
>
>> after #319
> if dvar is None
>     dvars = extract_func_from_diff(de)
>     if len(dvars) != 1:
>         raise ValueError, "Unable to determine dependent variable, please
> specify."
>     dvar = dvars.pop()
>
> Finally - change definition of ivar.
> ivar - is argument of dvar and it is also in parameter_set of
> FDerivativeOperator
>
> < #324-329
> elif ivar is None:
>     ivars = de.variables()
>     ivars = [t for t in ivars if t is not dvar]
>     if len(ivars) != 1:
>         raise ValueError, "Unable to determine independent variable, please
> specify."
>     ivar = ivars[0]
>>
> elif ivar is None:
>     ivars = set(dvar.arguments()).intersection(extract_var_from_diff(de))
>     if len(ivars) != 1:
>         raise ValueError, "Unable to determine independent variable, please
> specify."
>     ivar = ivars.pop()
>
> where extract_*_from_diff(de) - are blackboxes which return set of functions
> or variables in FDerivativeOperators from de. They can be implemented by
> using type checking (instanceof) and operator function (I'm not sure is it
> possible to solve the problem using wild card and if it is any analog of
> Maple type function)
>
> After the changes it will be possible to call desolve(de) in most cases.
>
> At least it is clever to make simple correction
>
> <#325-326
> ivars = de.variables()
> ivars = [t for t in ivars if t is not dvar]
>>
> ivars=dvar.arguments()
>
> After that it will be possible to call desolve(de, dvar) if dvar has only
> one argument.
>
> The second problem is harder and there are several solution. Anyway we need
> to implement new variable generator (like SR.symbol()) Then we can either
> change a little Maxima algorithm to be able to use variables generated by
> sage as integration constants or just rename all variables in equation, pass
> it to Maxima and then translate the result back using generated variables.
>
> --
> To post to this group, send an email to sage-devel@googlegroups.com
> To unsubscribe from this group, send an email to
> sage-devel+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/sage-devel
> URL: http://www.sagemath.org
>
> To unsubscribe from this group, send email to
> sage-devel+unsubscribegooglegroups.com or reply to this email with the words
> "REMOVE ME" as the subject.
>

-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

To unsubscribe from this group, send email to 
sage-devel+unsubscribegooglegroups.com or reply to this email with the words 
"REMOVE ME" as the subject.

Reply via email to