11-02-2020, 06:28 AM
Post: #1
 dah145 Junior Member Posts: 19 Joined: Aug 2020
Sorry if this had been specifically asked before, I searched but couldn't find anything.
Suppose I want to factorize the expression: a*s^(2) + b*s + c for the variable s. In other CAS systems this could be done simply by specifying it inside the factor(expression,var) function, in calculators such as the TI 89, see image attached. I haven't found a way to achieve this on the HP Prime as its factor function doesn't work the same way.

Attached File(s) Thumbnail(s) 11-02-2020, 07:58 AM (This post was last modified: 11-02-2020 07:59 AM by parisse.)
Post: #2
 parisse Senior Member Posts: 1,136 Joined: Dec 2013
factor factors over the field of coefficients of the arguments. If you want to extend this field, you must give a 2nd argument specifying the extension.
For example
Code:
P:=a*s^2+b*s+c; l:=solve(P=0,s); factor(P,l)
11-02-2020, 05:40 PM
Post: #3
 dah145 Junior Member Posts: 19 Joined: Aug 2020
[quote='parisse' pid='138432' dateline='1604303926']
factor factors over the field of coefficients of the arguments. If you want to extend this field, you must give a 2nd argument specifying the extension.
For example
Code:
P:=a*s^2+b*s+c; l:=solve(P=0,s); factor(P,l)

Thank you very much, never would have guessed that, but it makes sense.

Now, just another question, let's say I want to factor the expression: a^2 -2*a*b+b^2+s^2, it's easy to see that it is equivalent to: s^2 + (a-b)^2. I know I can get to the second expression in the HP Prime by applying the factor function like this: factor(a^2 -2*a*b+b^2)+s^2, but the point if it is possible for it to be done automatically with a function. This is particularly useful, for example, to getting the simplified expressions of typical laplace transforms with symbolic coefficients, such as the ones attached.

Attached File(s) Thumbnail(s) 11-02-2020, 07:32 PM
Post: #4
 Albert Chan Senior Member Posts: 1,247 Joined: Jul 2018
Hi, dah145

You can isolate the terms to be factorize, like this.

XCas> factor2(mess,s) := poly2symb(factor(symb2poly(mess,s)),s)

XCas> factor2(a^2 - 2*a*b + b^2 + s^2, a) ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ → b^2+s^2+a*(a-2*b)
XCas> factor2(a^2 - 2*a*b + b^2 + s^2, s) ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ → s^2+(a-b)^2
11-03-2020, 03:46 AM
Post: #5
 dah145 Junior Member Posts: 19 Joined: Aug 2020
(11-02-2020 07:32 PM)Albert Chan Wrote:  Hi, dah145

You can isolate the terms to be factorize, like this.

XCas> factor2(mess,s) := poly2symb(factor(symb2poly(mess,s)),s)

XCas> factor2(a^2 - 2*a*b + b^2 + s^2, a) ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ → b^2+s^2+a*(a-2*b)
XCas> factor2(a^2 - 2*a*b + b^2 + s^2, s) ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ → s^2+(a-b)^2

Yes thanks, this definitely is what I was looking for. Now I wonder if it is possible to obtain the expressions in form of a product, say: (a^2 - 2*a*b + b^2 + s^2)*(a^2 - 2*a*b + b^2 + s^2) = (s^2+(a-b)^2)*(s^2+(a-b)^2), as using your custom function outputs a not so friendly expression: s^2*(2*(a^2 + b^2) + s^2)+(a+b)^2*(a-b)^2.
11-19-2020, 04:12 PM (This post was last modified: 11-19-2020 10:00 PM by dah145.)
Post: #6
 dah145 Junior Member Posts: 19 Joined: Aug 2020
(11-03-2020 03:46 AM)dah145 Wrote:
(11-02-2020 07:32 PM)Albert Chan Wrote:  Hi, dah145

You can isolate the terms to be factorize, like this.

XCas> factor2(mess,s) := poly2symb(factor(symb2poly(mess,s)),s)

XCas> factor2(a^2 - 2*a*b + b^2 + s^2, a) ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ → b^2+s^2+a*(a-2*b)
XCas> factor2(a^2 - 2*a*b + b^2 + s^2, s) ﻿ ﻿ ﻿ ﻿ ﻿ ﻿ → s^2+(a-b)^2

Yes thanks, this definitely is what I was looking for. Now I wonder if it is possible to obtain the expressions in form of a product, say: (a^2 - 2*a*b + b^2 + s^2)*(a^2 - 2*a*b + b^2 + s^2) = (s^2+(a-b)^2)*(s^2+(a-b)^2), as using your custom function outputs a not so friendly expression: s^2*(2*(a^2 + b^2) + s^2)+(a+b)^2*(a-b)^2.

Just wanted to update, I wrote a little program that factorizes polynomials to a more friendly expression than the built in factor function, I attached an example. A is the expression and B is the variable to factorize.

PHP Code:
#casfacto(A,B):=BEGINLOCAL fac, coe, pola, polb;fac:=factors(A);coe:={0};polb:=;FOR N FROM 1 TO SIZE(fac)/2 DOcoe[N]:=coeff(fac[2*N-1],B);END;pola:=factor(coe);FOR N FROM 1 TO SIZE(fac)/2 DOpolb[N]:=poly2symb(pola[N],B);END;RETURN regroup(product(polb[n]^(fac[2*n]),n,1,SIZE(polb)));END;#end

Attached File(s) Thumbnail(s) « Next Oldest | Next Newest »

User(s) browsing this thread: 1 Guest(s)