Carl Love

## 26827 Reputation

11 years, 277 days
Himself
Wayland, Massachusetts, United States
My name was formerly Carl Devore.

## Matrix created inside loop...

Part of the problem is that your Matrix M is created inside the i and j loops. I say "part" because when I take the creation outside the loop, there are new problems that pop up that I don't understand yet. But certainly it cannot possibly work with the Matrix being created inside the loop.

Could you isolate the relevant section of code for me and place it in a plain text file? From the final restart to the end of the file. I have a lot of trouble working with 2d input, especially with a section of code of this size.

## Need {}...

You need some {} in your last command. Change dsolve(sys2, [x1(t), x2(t), x3(t)]) to dsolve({sys2}, [x1(t), x2(t), x3(t)]).

## series at infinity...

If ex is your expression, then simply

series(ex, c= infinity, 3);

## subsindets...

I guess this is a bug in solve. I don't know about avoiding it, but you can easily correct if after the fact like this:

solve(f(x)=y, x);

subsindets(%, list, op);

## exprofile; numeric rank is good enough....

I have worked a little with your code. I cannot back-up your claim that the numeric rank is taking any significant amount of time. I haven't found what's taking the majority of the time, but it's not the rank. The rank for a 1000 x 50 or so Matrix from your program takes about 5 millisecs.

To find exactly how the time is divided among the various parts of your program, use ?exprofile. And to count how many times each part of your program is executed, use ?excallgraph. I haven't had a chance yet to use these on your program.

Symbolic rank is a another matter. Computing the symbolic rank of a dense 6x6 matrix of rational functions is a formidable task. For matrices of your size, it is out of the question. But, do you really need an ironclad mathematical proof that the rank is a certain value? When you evaluate a symbolic matrix at random values for the symbols, the probability that the rank of the numeric matrix differs from the rank of the symbolic matrix is infintesimal---it's like the probability of picking 0 when picking a random real from the interval (-1,1). But you should randomly generate real reals, or real floats, so to speak, rather than the 2-decimal-place ones that you are using. And there's no need to check the numeric rank multiple times. Two is enough. If the numeric rank differs (which might be due to numeric instability) between the two, then try a third.

## By NonlinearFit with procedure input...

The curve-fitting commands seem to object to infinite sums. We can get around that problem by making the model a procedure. To deal with the problem of the sum not converging (for x < C), we note that for x = C the sum is exactly Pi^2/6.

`restart:Model:= proc(x,A,B,C) local n,S;     S:= evalf(Sum(exp(-n^2*(x-C))/n^2, n= 1..infinity));     A*x+B*`if`(S::numeric, S, evalf(Pi^2/6))end proc:I'm using the same data as Markiyan.N:= 5:X:= Vector([1, 2, 3, 4, 5], datatype = float[8]):Y:= Vector([2, 2, 6, 6, 8], datatype = float[8]):Command below takes a few seconds.Out:= Statistics:-NonlinearFit(     Model, X, Y,     output= [parametervector, residualstandarddeviation]):params:= convert(Out[1],list);   [1.5912704466501741, 0.1423486016778657, 0.9999710638062892]std_dev:= Out[2];                        1.25577015469616P1:= plot(x-> Model(x,params[]), 0..6):P2:= plot(     ['[X[k], Y[k]]' \$ 'k'= 1..N],     style= point, symbol= cross, symbolsize= 20):plots:-display([P1,P2], gridlines= false);`

NonlinearFit.mw

## Execute a selected section of code...

You could select a section of code with the mouse, then from the Edit menu select Execute --> Selection.

## View?...

Did you try View(img_edge)? That almost seems too obvious an answer. So, do you mean that you can't find the file edge.jpg on your hard drive? It helps if you specify a directory (folder) with the filename. For example,

Write("C:/Users/Carl/desktop/edge.jpg", img_edge);

Your file is probably in the directory (folder) specified by currentdir();

For me, that would be

currentdir();
"C:\Program Files\Maple 17"

## Put the plot in the procedure...

You could do something like this:

sine:=(Amp,freq,phase,t)->Amp*sin(2*Pi*freq*t+phase):
sineplot:= (Amp,freq,phase)->
plot(sine(Amp, freq, phase, 't'), 't'= 0 .. 1, title = cat(freq, " sine wave cycles")):

sineplot(1,2,0);

## No hope...

Even if you set all four parameters to 1, the resulting polynomial is not solvable.

## Related post; changing Digits...

I would guess that this is related to the bug discussed in this thread. An interesting difference is that that error was "invalid character in short integer encoding 70 F".

It's hard to diagnose without seeing your code. Please upload it. But it's probably not anything wrong that you are doing; rather it's a bug in Maple. You may be able to work around the bug by changing the value of Digits. In the other case, Digits:= 20 worked.

## allvalues...

Simply use allvalues(%). This will divide the right side of the expression into two parts, one for each solution of the quadratic. After that, you'll need to work with the parts separately.

## debugger...

@verdin Ahh, I see. I think that what you want is the ?debugger. In particular, see ?stopat.

## Solve for all derivatives simultaneously...

You can work with the RootOf symbolically. But, from your title, I think that your goal is to find where the gradient of f is 0. To do that, you should solve all three derivatives for 0 simultaneously:

solve({D[1](f)(a,b,c), D[2](f)(a,b,c), D[3](f)(a,b,c)}, {a,b,c});

Or, to generalize the number of variables:

V:= [a,b,c]:
solve({'D[k](f)(V[])' \$ 'k'= 1..nops(V)}, {V[]});