Changeset 58c0e4 in git
- Timestamp:
- Jan 9, 2013, 5:43:52 PM (10 years ago)
- Branches:
- (u'jengelh-datetime', 'ceac47cbc86fe4a15902392bdbb9bd2ae0ea02c6')(u'spielwiese', '0604212ebb110535022efecad887940825b97c3f')
- Children:
- 9b4920bf5fea321634ffb39fa954b2f172285c58
- Parents:
- 4439f8edfe0644485f10799a19d3a9c37f1a9222
- git-author:
- Martin Lee <martinlee84@web.de>2013-01-09 17:43:52+01:00
- git-committer:
- Martin Lee <martinlee84@web.de>2013-02-18 15:00:48+01:00
- Location:
- factory
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
factory/facFactorize.cc
r4439f8e r58c0e4 413 413 414 414 if (w.level() != 1) 415 { 416 A= swapvar (A, y, w); 417 int i= A.level(); 418 CanonicalForm evalPoint; 419 for (CFListIterator iter= evaluation; iter.hasItem(); iter++, i--) 420 { 421 if (i == w.level()) 422 { 423 evalPoint= iter.getItem(); 424 iter.getItem()= evaluation.getLast(); 425 evaluation.removeLast(); 426 evaluation.append (evalPoint); 427 break; 428 } 429 } 430 for (i= 0; i < lengthAeval2; i++) 431 { 432 if (oldAeval[i].isEmpty()) 433 continue; 434 if (oldAeval[i].getFirst().level() == w.level()) 435 { 436 CFArray tmp= copy (oldAeval[i]); 437 oldAeval[i]= biFactors; 438 for (CFListIterator iter= oldAeval[i]; iter.hasItem(); iter++) 439 iter.getItem()= swapvar (iter.getItem(), w, y); 440 for (int ii= 0; ii < tmp.size(); ii++) 441 tmp[ii]= swapvar (tmp[ii], w, y); 442 CFArray tmp2= CFArray (tmp.size()); 443 CanonicalForm buf; 444 for (int ii= 0; ii < tmp.size(); ii++) 445 { 446 buf= tmp[ii] (evaluation.getLast(),y); 447 buf /= Lc (buf); 448 tmp2[findItem (uniFactors, buf)-1]=tmp[ii]; 449 } 450 biFactors= CFList(); 451 for (int j= 0; j < tmp2.size(); j++) 452 biFactors.append (tmp2[j]); 453 } 454 } 455 } 456 457 CFListIterator iter; 415 changeSecondVariable (A, biFactors, evaluation, oldAeval, lengthAeval2, uniFactors, w); 416 458 417 CanonicalForm oldA= A; 459 418 CFList oldBiFactors= biFactors; 460 if (!leadingCoeffs.getFirst().inCoeffDomain())461 {462 CanonicalForm tmp= power (leadingCoeffs.getFirst(), biFactors.length() - 1);463 A *= tmp;464 tmp= leadingCoeffs.getFirst();465 iter= leadingCoeffs;466 iter++;467 for (;iter.hasItem(); iter++)468 iter.getItem() *= tmp;469 iter= evaluation;470 for (int i= A.level(); i > 2; i--, iter++)471 tmp= tmp (iter.getItem(), i);472 if (!tmp.inCoeffDomain())473 {474 for (CFListIterator i= biFactors; i.hasItem(); i++)475 {476 i.getItem() *= tmp/LC (i.getItem(), 1);477 i.getItem() /= Lc (i.getItem());478 }479 }480 }481 419 482 420 CanonicalForm LCmultiplier= leadingCoeffs.getFirst(); 483 421 bool LCmultiplierIsConst= LCmultiplier.inCoeffDomain(); 484 422 leadingCoeffs.removeFirst(); 423 424 if (!LCmultiplierIsConst) 425 distributeLCmultiplier (A, leadingCoeffs, biFactors, evaluation, LCmultiplier); 485 426 486 427 //prepare leading coefficients … … 489 430 evaluation); 490 431 432 CFListIterator iter; 491 433 492 434 Aeval= evaluateAtEval (A, evaluation, 2); -
factory/facFqFactorize.cc
r4439f8e r58c0e4 2344 2344 } 2345 2345 2346 void changeSecondVariable (CanonicalForm& A, CFList& biFactors, CFList& evaluation, CFList*& oldAeval, int lengthAeval2, const CFList& uniFactors, const Variable& w) 2347 { 2348 Variable y= Variable (2); 2349 A= swapvar (A, y, w); 2350 int i= A.level(); 2351 CanonicalForm evalPoint; 2352 for (CFListIterator iter= evaluation; iter.hasItem(); iter++, i--) 2353 { 2354 if (i == w.level()) 2355 { 2356 evalPoint= iter.getItem(); 2357 iter.getItem()= evaluation.getLast(); 2358 evaluation.removeLast(); 2359 evaluation.append (evalPoint); 2360 break; 2361 } 2362 } 2363 for (i= 0; i < lengthAeval2; i++) 2364 { 2365 if (oldAeval[i].isEmpty()) 2366 continue; 2367 if (oldAeval[i].getFirst().level() == w.level()) 2368 { 2369 CFArray tmp= copy (oldAeval[i]); 2370 oldAeval[i]= biFactors; 2371 for (CFListIterator iter= oldAeval[i]; iter.hasItem(); iter++) 2372 iter.getItem()= swapvar (iter.getItem(), w, y); 2373 for (int ii= 0; ii < tmp.size(); ii++) 2374 tmp[ii]= swapvar (tmp[ii], w, y); 2375 CFArray tmp2= CFArray (tmp.size()); 2376 CanonicalForm buf; 2377 for (int ii= 0; ii < tmp.size(); ii++) 2378 { 2379 buf= tmp[ii] (evaluation.getLast(),y); 2380 buf /= Lc (buf); 2381 tmp2[findItem (uniFactors, buf)-1]=tmp[ii]; 2382 } 2383 biFactors= CFList(); 2384 for (int j= 0; j < tmp2.size(); j++) 2385 biFactors.append (tmp2[j]); 2386 } 2387 } 2388 } 2389 2390 void distributeLCmultiplier (CanonicalForm& A, CFList& leadingCoeffs, CFList& biFactors, const CFList& evaluation, const CanonicalForm& LCmultipler) 2391 { 2392 CanonicalForm tmp= power (LCmultipler, biFactors.length() - 1); 2393 A *= tmp; 2394 tmp= LCmultipler; 2395 CFListIterator iter= leadingCoeffs; 2396 for (;iter.hasItem(); iter++) 2397 iter.getItem() *= LCmultipler; 2398 iter= evaluation; 2399 for (int i= A.level(); i > 2; i--, iter++) 2400 tmp= tmp (iter.getItem(), i); 2401 if (!tmp.inCoeffDomain()) 2402 { 2403 for (CFListIterator i= biFactors; i.hasItem(); i++) 2404 { 2405 i.getItem() *= tmp/LC (i.getItem(), 1); 2406 i.getItem() /= Lc (i.getItem()); 2407 } 2408 } 2409 } 2410 2346 2411 CFList 2347 2412 extFactorize (const CanonicalForm& F, const ExtensionInfo& info); … … 2718 2783 2719 2784 if (v.level() != 1) 2720 { 2721 A= swapvar (A, y, v); 2722 int i= A.level(); 2723 CanonicalForm evalPoint; 2724 for (CFListIterator iter= evaluation; iter.hasItem(); iter++, i--) 2725 { 2726 if (i == v.level()) 2727 { 2728 evalPoint= iter.getItem(); 2729 iter.getItem()= evaluation.getLast(); 2730 evaluation.removeLast(); 2731 evaluation.append (evalPoint); 2732 break; 2733 } 2734 } 2735 for (i= 0; i < lengthAeval2; i++) 2736 { 2737 if (oldAeval[i].isEmpty()) 2738 continue; 2739 if (oldAeval[i].getFirst().level() == v.level()) 2740 { 2741 CFArray tmp= copy (oldAeval[i]); 2742 oldAeval[i]= biFactors; 2743 for (CFListIterator iter= oldAeval[i]; iter.hasItem(); iter++) 2744 iter.getItem()= swapvar (iter.getItem(), v, y); 2745 for (int ii= 0; ii < tmp.size(); ii++) 2746 tmp[ii]= swapvar (tmp[ii], v, y); 2747 CFArray tmp2= CFArray (tmp.size()); 2748 CanonicalForm buf; 2749 for (int ii= 0; ii < tmp.size(); ii++) 2750 { 2751 buf= tmp[ii] (evaluation.getLast(),y); 2752 buf /= Lc (buf); 2753 tmp2[findItem (uniFactors, buf)-1]=tmp[ii]; 2754 } 2755 biFactors= CFList(); 2756 for (int j= 0; j < tmp2.size(); j++) 2757 biFactors.append (tmp2[j]); 2758 } 2759 } 2760 } 2761 2762 CFListIterator iter; 2785 changeSecondVariable (A, biFactors, evaluation, oldAeval, lengthAeval2, uniFactors, v); 2786 2763 2787 CanonicalForm oldA= A; 2764 2788 CFList oldBiFactors= biFactors; 2765 if (!leadingCoeffs.getFirst().inCoeffDomain())2766 {2767 CanonicalForm tmp= power (leadingCoeffs.getFirst(), biFactors.length() - 1);2768 A *= tmp;2769 tmp= leadingCoeffs.getFirst();2770 iter= leadingCoeffs;2771 iter++;2772 for (;iter.hasItem(); iter++)2773 iter.getItem() *= tmp;2774 iter= evaluation;2775 for (int i= A.level(); i > 2; i--, iter++)2776 tmp= tmp (iter.getItem(), i);2777 if (!tmp.inCoeffDomain())2778 {2779 for (CFListIterator i= biFactors; i.hasItem(); i++)2780 {2781 i.getItem() *= tmp/LC (i.getItem(), 1);2782 i.getItem() /= Lc (i.getItem());2783 }2784 }2785 }2786 2789 2787 2790 CanonicalForm LCmultiplier= leadingCoeffs.getFirst(); 2788 2791 bool LCmultiplierIsConst= LCmultiplier.inCoeffDomain(); 2789 2792 leadingCoeffs.removeFirst(); 2793 2794 if (!LCmultiplierIsConst) 2795 distributeLCmultiplier (A, leadingCoeffs, biFactors, evaluation, LCmultiplier); 2790 2796 2791 2797 //prepare leading coefficients … … 2794 2800 evaluation); 2795 2801 2802 CFListIterator iter; 2796 2803 Aeval= evaluateAtEval (A, evaluation, 2); 2797 2804 CanonicalForm hh= 1/Lc (Aeval.getFirst()); -
factory/facFqFactorize.h
r4439f8e r58c0e4 684 684 ); 685 685 686 void changeSecondVariable (CanonicalForm& A, CFList& biFactors, CFList& evaluation, CFList*& oldAeval, int lengthAeval2, const CFList& uniFactors, const Variable& w); 687 void distributeLCmultiplier (CanonicalForm& A, CFList& leadingCoeffs, CFList& biFactors, const CFList& evaluation, const CanonicalForm& LCmultipler); 688 686 689 #endif 687 690 /* FAC_FQ_FACTORIZE_H */
Note: See TracChangeset
for help on using the changeset viewer.