Ask Your Question
0

Coefficient of Polynomial Function in a loop

asked 2020-09-15 01:40:53 +0100

whatupmatt gravatar image

Hello so I am using the .coefficient function to extract the coefficient of a monomial given some polynomial. For example, 3x^(2).coefficient(x^(2)) is 3.

R.<x,y,z,w> = QQ[]
List1= [x^(2), y^(2),z^(2)]
List2= [x^(2)+y^(2)+z^(2), 3*x^(2),4*y^(2)]
List3=[]

For example if I do List2[0].coefficient(List1[0]), Sage immediately outputs 1. However, when I try to run it through all of List1, for some reason, the runtime seems to go forever so I feel I am doing something wrong. Even if I restrict to only the first term in List2, the runtime is very long and doesn't stop. Am I doing something wrong? In the code below, it should only run through 3 terms.

i=0
    while i<len(List1):
    Result=List2[0].coefficient(List1[i])
    List3.append(Result)
i+=1
edit retag flag offensive close merge delete

1 Answer

Sort by » oldest newest most voted
2

answered 2020-09-15 06:23:30 +0100

updated 2020-09-15 06:24:46 +0100

The indentation in your second code block is wrong, but if you fix that (don't indent while, indent all of the lines after it), it works, at least for me. The code can also be rewritten a few ways:

No need for the variable i:

for a in List1: 
    Result = List2[0].coefficient(a) 
    List3.append(Result)

In fact, no need for an explicit loop at all, using list comprehension instead:

List3 = [List2[0].coefficient(a) for a in List1]

By the way, there are other ways to get at the coefficients. For example:

a = x^2 + 2*y^2 + 3*z^2
for b in a:
    print(b)

will print

(1, x^2)
(2, y^2)
(3, z^2)

You can get the same information using list comprehension, [b for b in a], or in fact just list(a).

edit flag offensive delete link more

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: 2020-09-15 01:40:53 +0100

Seen: 2,610 times

Last updated: Sep 15 '20