nm

11363 Reputation

20 Badges

13 years, 39 days

MaplePrimes Activity


These are questions asked by nm

I noticed that something changed with the output of translating abs() to latex. I am not sure when this happened.

Current version use \mid ...\mid  instead of the original \left| .... \right|

The problem with \mid is that the spacing no longer symmetric. It generate too much space on one side of | compared to the other side, and makes the output not pretty any more.

Is it possible to revert this back to the original way it was done? Please see example

restart;
Latex(ln(abs(1+x))=x)

                     \ln \! \left({\mid 1+x \mid}\right) = x

latex(ln(abs(1+x))=x)

                   \ln  \left(  \left| 1+x \right|  \right) =x

The second example gives better looking Latex where the space is symmetric. Here is the output

\documentclass{book}
\usepackage{amsmath}
\begin{document}          
\[
\ln \! \left({\mid 1+x \mid}\right) = x
\]

\[
\ln \! \left(  \left| 1+x \right|  \right) =x
\]
\end{document}

The second output is much better since \left|...\right| automatically sets the spacing the same between them and the math on each side.  (same if \lvert and \rvert were used)

I just noticed this first time looking at current output. I do not think this is how it used to be, else I would probably seen it before.

I am using Maple 2020.2 and Physics 890 (latest).

If not possible to change back to \left| ... right| . may be a new configuration parameter could be added to alow a user to choose which one?

Window 10.

 

This ode

ode:=diff(y(x),x)=sqrt(1-y(x)^2)

has general solution y(x) = sin(x + _C1) but it also has solution y=-1 and y=+1. Since these extra solutions can't be obtained from the general solution by specific value of the constant of integration, they are singular solution.

But I am not able to get Maple to show these:

restart;
ode:=diff(y(x),x)=sqrt(1-y(x)^2);    
dsolve(ode);
dsolve(ode,'singsol'='all',[separable]);
dsolve(ode,[separable]);

We can check that y=1.,y=-1 are solutions

odetest(y(x)=1,ode);
odetest(y(x)=-1,ode);

0
0

Only after I used this, was Maple able to gives these solutions

dsolve(ode,'Lie');
dsolve(ode,'Lie',singsol=all);

So only when using `Lie` symmetry methods and also using singsol=all it worked.

Most people will not think of using this specialized option.

Why Maple did not give these singular solutions using the standard dsolve(ode,singsol=all) command?

Should it not have done so? Now it makes it more confusing as to which option to use to obtain the singular solution, as one might have to keep trying different options.

What do others think? 

Maple 2020.2

I know it is not hard to write such a function, but can be tricky for all options. For 1D and uniform grid, it is straight forward to code it. The formula is here  https://en.wikipedia.org/wiki/Trapezoidal_rule#Uniform_grid

I was looking to see if Maple has this build-in. This is the equivalent of Matlab's trapz

I know about Student:-Calculus1:-ApproximateInt with option trapezoid. But this is not exactly the same. Matlab's trapz can accept just a list of numbers directly (the y values), or a a matrix of numbers (2D function), and applies trapezoidal rule. The default is unit spacing.

It is a simplified version of Student:-Calculus1:-ApproximateInt in a way, but I found trapz easier to use, if one has list of numbers generated before, (i.e. function values) and want to applies trapezoidal rule on it as is. It is more more convenient that way.

Here is an example from Matlab's help. Given

Y = [1 4 9 16 25];
Q = trapz(Y)

it gives 42.

One does not need to define f(x) or x=from..to  as in the case with Maple's ApproximateInt.

Matlab's trapz also supports Matrix as input not just 1D list of numbers.

Does Maple have something similar?

 

 

 

Maple mint checks for errors in one file only at a time. But not across mutliple files for correctness of calls between them. (As is done in statically complied langauges, where the compiler has access to all files and can do this).

One has to run the code to find such errors. For example, given

restart;
interface(warnlevel=4);
kernelopts('assertlevel'=2);

foo:=proc(n::integer,m::string,$)
 print("in foo, n=",n, "m = ",m );
end proc;

boo:=proc()
#How to make Maple check this call is wrong using mint? 
#before running the code? It has wrong type, and also
#missing one argument.

 foo(0.1);   
end proc;

Doing 

maplemint(boo)
maplemint(foo)

shows no errors. 

In a large program, with many calls between many procs in different packages, it will be nice if one can detect such errors before running the program if possible, than having to run the program, making sure all possible paths are taken each time.

Such an error could be hidden in the code for  sometime without one noticing it (For example, if one changes the API to a proc, but not change each call to the changed proc in order to update the call to the new API), and the code path for the now wrong call is not invoked in the current test since testing does not do 100% coverage all the time.

Is there any option in mint I might overlooked to do this?  if not, how hard would it be for Maple to add such a feature? i.e. give mint, either a set of files, or .mla library, and have it check all calls between all functions, for correctness.
 

This is an issue I had for long time. Though to ask about it.

Any one who used Database[SQLite] in Maple probably know this.  I'd like to do kernelopts('assertlevel'=2): but this does not work when using Database[SQLite] as it raises assertion failed, due to the way data is read from database and converted to Maple variable.

It happens at the statement 

         variable_to_read := Database[SQLite]:-FetchAll(stmt); 

For an example, the table I have in sql, has many fields. some are strings and some are integers. Lets say I want to read field called run_it corresponding to rowid I enter. So I do this in Maple

local run_it::integer;
.....
counter :=1;

stmt := Database[SQLite]:-Prepare(conn, cat("SELECT run_it FROM PROBLEMS WHERE rowid=",convert(counter,string),";"));    

run_it := Database[SQLite]:-FetchAll(stmt); 

The assetion error happens at the second call above. 

Error, (in dsolver_test:-MAIN_STEP) assertion failed in assignment, expected integer, got Matrix(1, 1, {(1, 1) = 1}, order = C_order, attributes = [source_rtable = (Array(1..1, {(1) = 1}, order = C_order))]) 
 

Once I remove kernelopts('assertlevel'=2): everything works fine with no problems at all. So I been running my program for more than a year now without the assert set.

Since I have hundreds of  such calls, and I do not think try/catch will work here, any one knows of a way to handle this, so I can turn on assertlevel to help catch any other problems some where else in the program, and still use SQLite ?

I could make an example if needed. I would need to create new database file and so on. This will take time.

Maple 2020.2

ps. Database[SQLite] works very well and very fast. I am surprised how fast it reads the data. few thousands records, each is 25 fields, and it does it in few seconds. Good implementation.

Edit

I found that by removing all the type specification on my Maple variables, that I read the SQL data into using FetchAll(stmt);  it now works!

So I am able to now use kernelopts('assertlevel'=2):

So intead of doing  

local local run_it::integer;  and then call SQL, I just now do  local run_it; with no type.  I had to remove the type on many such variables I had.  Now no assertion error any more during the SQL calls.

This works for me for now. I should have done this long time ago, I just did not think about it before. I would have liked to keep the type here.

Edit: I see answer below that allows me to do this by changing assert level just for the call to SQL which is good solution.

 

 

 

First 102 103 104 105 106 107 108 Last Page 104 of 200