Ask Your Question
1

Problem with the minus sign in symbolic expression

asked 2016-12-08 10:15:46 +0100

updated 2016-12-08 11:24:07 +0100

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[0])                               ### 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.

Please note that if I use addition in f1 as follows:

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 flag offensive close merge delete

Comments

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.

slelievre gravatar imageslelievre ( 2016-12-08 11:04:24 +0100 )edit

For reference, this was also asked on sage-support.

slelievre gravatar imageslelievre ( 2016-12-08 14:23:31 +0100 )edit

1 Answer

Sort by ยป oldest newest most voted
0

answered 2016-12-08 11:12:48 +0100

slelievre gravatar image

updated 2016-12-08 11:55:56 +0100

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
edit flag offensive delete link more

Comments

Indeed, now I see what the problem was. Thank you!

Natassa Theodouli gravatar imageNatassa Theodouli ( 2016-12-08 11:40:08 +0100 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2016-12-08 10:15:46 +0100

Seen: 441 times

Last updated: Dec 08 '16