Preben Alsholm

13743 Reputation

22 Badges

20 years, 335 days

MaplePrimes Activity


These are replies submitted by Preben Alsholm

Quite right, we don't need printed manuals.

But please, don't say you stop printing manuals to help save the environment.

Stopping because it does not make sense economically is a good enough reason!

@STHence This appears to me to be the same problem raised earlier: There is no solution for X0 to Y0=C.X0.

But if you accept the next best to a solution, a leastsquare solution, then it is not surprising that with Y defined from the X we found based on that X0 by

Y:=C.X:
# we shall see a nonnegligible difference here:
(eval(Y,t=0)-convert(Y0,Vector))[1];

In your graph you have what you call the real solution. Where does that come from?

@STHence This appears to me to be the same problem raised earlier: There is no solution for X0 to Y0=C.X0.

But if you accept the next best to a solution, a leastsquare solution, then it is not surprising that with Y defined from the X we found based on that X0 by

Y:=C.X:
# we shall see a nonnegligible difference here:
(eval(Y,t=0)-convert(Y0,Vector))[1];

In your graph you have what you call the real solution. Where does that come from?

@STHence If X(0) is not known, but is just

X0:= <seq(x0[i],i=1..7)>;

then you can still compute E.X0, but then you are faced with having to solve Y = C.X w.r.t. X0 in some "best" way.

@STHence If X(0) is not known, but is just

X0:= <seq(x0[i],i=1..7)>;

then you can still compute E.X0, but then you are faced with having to solve Y = C.X w.r.t. X0 in some "best" way.

@STHence Somehow angular brackets often disappear when you paste them into the editor.

X was supposed to be
X:=<seq(x[i](t),i=1..7)>;

that is the same as

X:=Vector([seq(x[i](t),i=1..7)]);

which is safer with this editor, but not as convenient. I have corrected it above. I hope it stays OK.

@STHence Somehow angular brackets often disappear when you paste them into the editor.

X was supposed to be
X:=<seq(x[i](t),i=1..7)>;

that is the same as

X:=Vector([seq(x[i](t),i=1..7)]);

which is safer with this editor, but not as convenient. I have corrected it above. I hope it stays OK.

@STHence The LeastSquare solution minimizes the 2-norm of the residual A.X-Y. So in what sense do you expect a better solution than that?

X:=LinearAlgebra:-LeastSquares(A,Y);
A.X-Y:
LinearAlgebra:-Norm(%,2);
#Returns 0.1478777205
#LeastSquare does the same as the following (not codewise):
use LinearAlgebra in
   LinearSolve(Transpose(A).A,Transpose(A).Y)
end use;

@STHence The LeastSquare solution minimizes the 2-norm of the residual A.X-Y. So in what sense do you expect a better solution than that?

X:=LinearAlgebra:-LeastSquares(A,Y);
A.X-Y:
LinearAlgebra:-Norm(%,2);
#Returns 0.1478777205
#LeastSquare does the same as the following (not codewise):
use LinearAlgebra in
   LinearSolve(Transpose(A).A,Transpose(A).Y)
end use;

@acer You are quite right. The following splits a plot structure containing a single curve, so is less general than the evalindets idea in that respect. Also individual curve options (like thickness and color are gone):

restart;
u:=sqrt(x^2-5)+3;
plot(u,view=0..15,thickness=6); p:=%:
M:=plottools:-getdata(p)[-1];
S:=ListTools:-Split(hastype,convert(M,listlist),undefined):
plots:-display(plot~([S]),p);

You don't need the p in the last line except for keeping the view option.

#Here is an updated version that seems to work well:

R:=proc(p) local f;
   f:=proc(curve)
      evalindets(curve,Or(listlist,Matrix),m->ListTools:-Split(hastype,convert(m,listlist),undefined))
   end proc;
   evalindets(p,specfunc(anything,CURVES),f);
end proc;

R(p); #Returns the plot hoped for

@acer You are quite right. The following splits a plot structure containing a single curve, so is less general than the evalindets idea in that respect. Also individual curve options (like thickness and color are gone):

restart;
u:=sqrt(x^2-5)+3;
plot(u,view=0..15,thickness=6); p:=%:
M:=plottools:-getdata(p)[-1];
S:=ListTools:-Split(hastype,convert(M,listlist),undefined):
plots:-display(plot~([S]),p);

You don't need the p in the last line except for keeping the view option.

#Here is an updated version that seems to work well:

R:=proc(p) local f;
   f:=proc(curve)
      evalindets(curve,Or(listlist,Matrix),m->ListTools:-Split(hastype,convert(m,listlist),undefined))
   end proc;
   evalindets(p,specfunc(anything,CURVES),f);
end proc;

R(p); #Returns the plot hoped for

Here is another way of removing HFloat(undefined) (as unfortunately seems necessary in Maple 16.02):

restart;
u:=sqrt(75-3*x^2);
plot(u); p:=%:
evalindets(p,Matrix,m->remove(hastype,convert(m,listlist),undefined));

#Turning the data matrix into a listlist makes it easier to remove undefined elements.
#To catch cases where the data (or some of it) in fact is already a listlist as in
http://www.mapleprimes.com/questions/142416-Problems-With-DEplot
#we could do
evalindets(p,Or(Matrix,listlist),m->remove(hastype,convert(m,listlist),undefined));

Here is another way of removing HFloat(undefined) (as unfortunately seems necessary in Maple 16.02):

restart;
u:=sqrt(75-3*x^2);
plot(u); p:=%:
evalindets(p,Matrix,m->remove(hastype,convert(m,listlist),undefined));

#Turning the data matrix into a listlist makes it easier to remove undefined elements.
#To catch cases where the data (or some of it) in fact is already a listlist as in
http://www.mapleprimes.com/questions/142416-Problems-With-DEplot
#we could do
evalindets(p,Or(Matrix,listlist),m->remove(hastype,convert(m,listlist),undefined));

@Axel Vogt Amazingly simple! And thank you!

@Axel Vogt Amazingly simple! And thank you!

First 183 184 185 186 187 188 189 Last Page 185 of 231