nm

11413 Reputation

20 Badges

13 years, 72 days

MaplePrimes Activity


These are replies submitted by nm

@Carl Love 

I know I can do that. But there must be some search path that Maple uses to locate .mla files. And that is what that webpage was saying. But since those environments variables are fake, I do not know what search path Maple uses.

I could use kernelopts(':-homedir')  for $HOME replacement for now.

But there should be some official search path that Maple searches to find .mla files other than libname. At least that what that page seems to say. May be I misunderstood that web page.

 

@Joe Riel 

I was trying to find out where to put my personal .mla file so Maple can automatically find it, without having to explicitly update libname each time. And that is what that web page says. 

If I do kernelopts('toolboxdir');  it returns [""]

 

 

@janhardo 

"y = g(y')   ( p = dy/dx)  is this still a d'Alembert ( Maple say yes ..no quadrature) "

restart;
ode:=y(x)=g(diff(y(x),x));
DEtools:-odeadvisor(ode)

 

"For x= 1 you get  y = 1. f(p)+g(p)  d'Alembert"

restart;
ode:=y(x)=f(diff(y(x),x))+g(diff(y(x),x));
DEtools:-odeadvisor(ode)

 

restart;
ode:=y(x)=x*f(diff(y(x),x))+g(diff(y(x),x));
DEtools:-odeadvisor(ode)

@acer 

thanks. These display no values

getenv("MAPLE");
getenv("VERSION");
getenv("TOOLBOX");
getenv("HOME");

But Nothing is returned.

Are these environment variables defined by Maple when installed or something the user needs to define themselves?

 

@vv 

I am sorry, I do not see this. If f(p)=0 it is the same as x is missing. Otherwise all the following willl become d'Alembert, since they have f(p)=0

ode:=y(x)=3*diff(y(x),x)^2;
ode:=y(x)=3*tan(diff(y(x),x));
ode:=y(x)=3*ln(diff(y(x),x)^2);
ode:=y(x)=3*(diff(y(x),x)^2+sin(diff(y(x),x)));

But these are all _quadrature

Now it is possible for g(p) to be zero and the ODE be d'Alembert, but in this case f(p) has to be nonlinear. For example

ode:=y(x)=x/diff(y(x),x)^2;
ode:=y(x)=x*sin(diff(y(x),x));

Are all d'Alembert.

But my main point, is that I think d'Alembert form can not be missing and you seem to be saying it can.  I have not found one reference or example on the net so far. This is is only ODE I found so far with missing x that Maple says it is d'Alembert, and now I am confused because of this.

@lcz 

Maple does matrix conversion to list column wise. so if you do not transpose the matrix, you will not get correct answer.

could not find one. But this gives you list of all .mw files in same folder as the open you have open (assuming it is allready saved).

possible_names:=FileTools:-ListDirectory(interface(worksheetdir),'all','returnonly'="*.mw")

if the list returned has length of 1, then you know the name.

If the list has more than one, then the name worksheet could be any one of them.

In Mathematica, this is easy to find, there is a command for it, called https://reference.wolfram.com/language/ref/NotebookFileName.html

Maple should really have one like this also.

 

 

@BennyMopps 

I am sorry, I am not sure what you mean. The code simply replaces a,h,b,f,g with numerical values from the file, as you asked.

If you want to add `c` also, here is the new code

restart;
data := Import("c:/tmp/data.csv"):
data := convert(data,Matrix):
nRows,nCols := LinearAlgebra:-Dimension(data);
for n from 1 to nRows do
    unassign('a,h,b,f,g,c'):
    assign~([a,h,b,f,g,c],convert(data[n],list)):
    Conic:=a*x^2+2*h*x*y+b*y^2+2*f*x+2*g*y+c:
    print(Conic);
od:

And the new file is (must be .csv extension) is

2,-6,3,0,0,4
2,-3,3,0,0,4
5,-2,4,1,2,5
17,-4,10,20,99,6

When you run the above, it gives

What values you put in the file and which variables you want to change is up to you. Any changes to Conic after that, is also something you are free to do.

 

@Joe Riel 

So one need additional   

protect('bar');  # latest change

At the very end as well? WHy is that, as it was working OK without this? Is this needed for may be when making a copy of the object?  OK. I will edit my version also add these at end as well so it is in sync with your version.

 

@Joe Riel 

Yes, good point, I see that now. I'll keep the ModuleCopy  there in my code then.

I thought you had it there for one wants to make copy of the object.

 

@Joe Riel 

thanks. This works. So the idea is to export it, but add protection on it to prevent it being changed.  Here is following your example using 2 fields. I removed the ModuleCopy function for now

restart;
person_class := module()
   option object;

    export name;
    export age;

    export ModuleCopy::static := proc(self:: person_class, proto::person_class) 
        protect('self:-name');
        protect('self:-age');
    end proc;

   export set_name::static:=proc(self::person_class, val);
      unprotect('self:-name');
      self:-name := val;
      protect('self:-name');
      val;
   end proc;

   export set_age::static:=proc(self::person_class, val);
      unprotect('self:-age');
      self:-age := val;
      protect('self:-age');
      val;
   end proc;

   export foo::static:=proc(self::person_class)
       self:-name:="new name";
   end proc;

   #add these also at end of class
   protect('name');
   protect('age');

end module:

And now

p:=Object(person_class);
p:-set_name(p,"me"):
p:-name:="new name";  #gives error since protected. Good.
p:-name;  #reads name OK
p:-set_age(p,100):
p:-age;  #reads age OK

 

@Joe Riel 

Thanks, but I do not see how this would work. From help it says 

When declaring an object the members must be declared as either local to the object, using a local declaration or exported, using an export declaration.  A member that is declared local can only be accessed from the object's methods, or other object's methods of the same class.  A member that is exported can be accessed anywhere.

which I understood it to mean that local variables for object are private. And when I tried it, it confirms the above

restart;
module my_class()
  option object;

  local name::string;
 
  export set_name::static:=proc(o::my_class,name::string)
     o:-name := name;
  end proc;

end module;

And now

o:=Object(my_class);
o:-name;

gives an error

Error, module `my_class` does not export `name`
 

May be I am missing something from what you are saying. I do not understand.

@Carl Love 

fyi, In the .mw posted, it says

     Now I am trying to achieve a general expression by substituting j for 6

so OP was trying to replace number by a symbol j, that is why they were getting an error,  They had it working for an integer, but were trying to use symbol for j.

At least this is what I understood by looking at their code.

If you look at help for combinat:-numbcomb(n,m) it says first argument must be a set or a list or a non-negative integer.

Therefore, what would you expect the output of 

restart:
i:=4;
combinat:-numbcomb(j+i,i+1)

to give?  Since now the first argument which is j+4  is none of the allowed first arguments.

It is not a list, and not a set and not a non-negative integer.

@acer 

Thanks, it worked. 

   "And inside your procedure the local ode gets only 1-level evaluation."

This explains why

               ode := :-parse("diff(y(x),x$2)=0"): 

works, but inside a proc, one must do 

               ode := eval(:-parse("diff(y(x),x$2)=0")):

I had no idea that semantics of assignment to local variable is different than assignment to the variable when in global context before.

I thought the LHS name gets assigned whatever the value of the RHS, regadless if variable is inside a proc or not. But it seems this is not the case. Maple evaluation rules seems more complicated than I first thought. I need to look more into this.

First 53 54 55 56 57 58 59 Last Page 55 of 91