source: git/factory/facFactorize.h @ 9c6887

spielwiese
Last change on this file since 9c6887 was 5f9b47, checked in by Martin Lee <martinlee84@…>, 13 years ago
use sqrfree factorization instead of sqrfree part extraction for factorization ove Q(a) git-svn-id: file:///usr/local/Singular/svn/trunk@14412 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 2.4 KB
Line 
1/*****************************************************************************\
2 * Computer Algebra System SINGULAR
3\*****************************************************************************/
4/** @file facFactorize.h
5 *
6 * multivariate factorization over Q(a)
7 *
8 * @author Martin Lee
9 *
10 * @internal @version \$Id$
11 *
12 **/
13/*****************************************************************************/
14
15#ifndef FAC_FACTORIZE_H
16#define FAC_FACTORIZE_H
17
18#include <config.h>
19
20#include "facBivar.h"
21#include "facFqBivarUtil.h"
22
23/// Factorization over Q (a)
24///
25/// @return @a multiFactorize returns a factorization of F
26CFList
27multiFactorize (const CanonicalForm& F,     ///< [in] poly to be factored
28                const Variable& v           ///< [in] some algebraic variable
29               );
30
31/// factorize a squarefree multivariate polynomial over \f$ Q(\alpha) \f$
32///
33/// @return @a ratSqrfFactorize returns a list of monic factors, the first
34///         element is the leading coefficient.
35inline
36CFList ratSqrfFactorize (const CanonicalForm & G, ///< [in] a multivariate poly
37                         const Variable& v
38                       )
39{
40  if (getNumVars (G) == 2)
41    return ratBiSqrfFactorize (G, v);
42  CanonicalForm F= G;
43  if (isOn (SW_RATIONAL))
44    F *= bCommonDen (F);
45  CFList result= multiFactorize (F, v);
46  if (isOn (SW_RATIONAL))
47  {
48    normalize (result);
49    result.insert (Lc(F));
50  }
51  return result;
52}
53
54/// factorize a multivariate polynomial over \f$ Q(\alpha) \f$
55///
56/// @return @a ratFactorize returns a list of monic factors with
57///         multiplicity, the first element is the leading coefficient.
58inline
59CFFList ratFactorize (const CanonicalForm& G, ///< [in] a multivariate poly
60                      const Variable& v
61                    )
62{
63  if (getNumVars (G) == 2)
64  {
65    CFFList result= ratBiFactorize (G,v);
66    return result;
67  }
68  CanonicalForm F= G;
69  CanonicalForm LcF= Lc (F);
70  if (isOn (SW_RATIONAL))
71    F *= bCommonDen (F);
72
73  CFFList result;
74  CFFList sqrfFactors= sqrFree (F);
75  for (CFFListIterator i= sqrfFactors; i.hasItem(); i++)
76  {
77    CFList tmp= ratSqrfFactorize (i.getItem().factor(), v);
78    for (CFListIterator j= tmp; j.hasItem(); j++)
79    {
80      if (j.getItem().inCoeffDomain()) continue;
81      result.append (CFFactor (j.getItem(), i.getItem().exp()));
82    }
83  }
84  if (isOn (SW_RATIONAL))
85  {
86    normalize (result);
87    result.insert (CFFactor (LcF, 1));
88  }
89  return result;
90}
91
92#endif
93
Note: See TracBrowser for help on using the repository browser.