I was doing some stuff with the quadratic nonlinearities that interest me. The quadratic nonlinearities involve structure having the form <>, where <> represents the usual dot product, A is a matrix, and v is a vector. I didn't want to use complex numbers with what I was doing, so I assumed things were real valued. I was surprised by what happened as a result. I have simplified the curious behavior so that it can be observed in a few lines. I can live with this, but it was a surprise. There are two blocks of syntax here. They are just alike, except for the assume line. A matrix A is defined, a vector V is defined, and the product AV is computed. The results are different. Block 1
> restart: 
> assume(a,real);assume(b,real);assume(c,real);
> with(LinearAlgebra):
> A:=Matrix([[a,b],[b,c]]);
> a:=0; b:=1/2; c:=0;
> A;
> V:=Vector([1,0]);
> A.V;
> a; b; c;
> 
Block 2
> restart:
> with(LinearAlgebra):
> A:=Matrix([[a,b],[b,c]]);
> a:=0; b:=1/2; c:=0;
> A;
> V:=Vector([1,0]);
> A.V;
> a; b; c;
The result A.V is [a,b] in the first block and is [0,1/2] in the second. Maybe someone will tell me why I should not have been surprised.

Please Wait...