Hi all!

My sage version is:

'SageMath Version 6.9, Release Date: 2015-10-10'

In my code, I have a multivariate polynomial with a sign symbol which doesn't return the correct result. I.e.

The code snippet is as follows:

A1 = [(', '.join('x%i'%i for i in [1.. n]))]; ### construct a suitable multivariate ring
V = var(A1)                               ### define a str variable
x=vector(list(V))                                 ### convert to vector
f1=b1-a1.dot_product(x)


a1 and b1 are returned from another function.
types of a1 and x are different:

 type(a1)=<type 'sage.modules.vector_modn_dense.Vector_modn_dense'>

type(x)=  <class 'sage.modules.vector_symbolic_dense.FreeModule_ambient_field_with_category.element_class'>


Could this be a problem?

a1 is a vector with values (76, 83), b1 is scalar with value 62, x is a vector with values (x1,x2). Thus, f1 should return 62-76 * x1-83 * x2; however it returns 25x1 + 18x2 + 62 which is not correct.

sage: f1=b1+a1.dot_product(x)


The result is correct,i.e. 76x1 + 83x2 + 62

type(f1) is sage.symbolic.expression.Expression

What could the problem be? I tried to convert the symbolic expression to multivariate polynomial, but this didn't work either? I also though there might be a problem with the minus symbol in my PC but couldn't solve it this way either.

Thank you for your responses! Regards, Natassa

edit retag close merge delete

Please edit your question, adding the actual code you use to define a1, b1, and x.

Also, please say which version of Sage you are using.

Sort by » oldest newest most voted

I suppose you are working modulo 101.

Compare the following.

For reference I am working with:

sage: version()
'SageMath version 7.4, Release Date: 2016-10-18'


Using plain integers.

sage: a1 = vector((76, 83))
sage: b1 = 62
sage: x1, x2 = SR.var('x1 x2')
sage: x = vector((x1, x2))
sage: b1 - a1.dot_product(x)
-76*x1 - 83*x2 + 62
sage: b1 + a1.dot_product(x)
76*x1 + 83*x2 + 62


Using integers modulo 101.

sage: R = Zmod(101)
sage: a1 = vector(R, (76, 83))
sage: b1 = R(62)
sage: x1, x2 = SR.var('x1 x2')
sage: x = vector((x1, x2))
sage: b1 - a1.dot_product(x)
25*x1 + 18*x2 + 62
sage: b1 + a1.dot_product(x)
76*x1 + 83*x2 + 62


If you get a1 and b1 as above, or from another function and they are defined modulo 101, you can change ring as follows.

sage: a1 = a1.change_ring(ZZ)
sage: b1 = ZZ(b1)


Then this works as expected:

sage: b1 - a1.dot_product(x)
-76*x1 - 83*x2 + 62

more