Changeset 6a0cc83 in git
- Timestamp:
- Oct 5, 2004, 6:43:06 PM (20 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- ecd2adc73320b43f7a1c71b146a67eebd2be1d7b
- Parents:
- 4dac0e7b03a9dfa5b46417ef355c40c878b79770
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/tgb.cc
r4dac0e r6a0cc83 2428 2428 return mp[row]->exp; 2429 2429 } 2430 else 2431 2430 2432 2431 2433 return columns;//error code … … 2480 2482 assume(mat->mp[row]==NULL); 2481 2483 mat->mp[row]=m; 2484 #ifdef TGB_DEBUG 2485 mac_poly r=m; 2486 while(r){ 2487 assume(r->exp<mat->columns); 2488 r=r->next; 2489 } 2490 #endif 2482 2491 } 2483 2492 poly free_row_to_poly(tgb_sparse_matrix* mat, int row, poly* monoms, int monom_index){ … … 2500 2509 void simple_gauss(tgb_sparse_matrix* mat){ 2501 2510 int col, row; 2511 int* row_cache=(int*) omalloc(mat->get_rows()*sizeof(int)); 2502 2512 col=0; 2503 2513 row=0; 2504 2514 int i; 2505 2515 int pn=mat->get_rows(); 2516 int matcol=mat->get_columns(); 2506 2517 assume(pn>0); 2507 2518 //first clear zeroes … … 2511 2522 { 2512 2523 mat->perm_rows(i,pn-1); 2524 row_cache[pn-1]=matcol; 2513 2525 pn--; 2514 2526 if(i!=pn){i--;} 2515 2527 } 2528 else 2529 row_cache[i]=mat->min_col_not_zero_in_row(i); 2516 2530 } 2517 2531 while(row<pn-1){ … … 2522 2536 //select column 2523 2537 2524 col=mat->min_col_not_zero_in_row(row); 2525 assume(col!=mat->get_columns()); 2538 //col=mat->min_col_not_zero_in_row(row); 2539 assume(row_cache[row]==mat->min_col_not_zero_in_row(row)); 2540 col=row_cache[row]; 2541 2542 2543 assume(col!=matcol); 2526 2544 int found_in_row; 2527 2545 … … 2529 2547 assume(pn<=mat->get_rows()); 2530 2548 for(i=row+1;i<pn;i++){ 2531 int first=mat->min_col_not_zero_in_row(i); 2549 int first;//=mat->min_col_not_zero_in_row(i); 2550 assume(row_cache[i]==mat->min_col_not_zero_in_row(i)); 2551 first=row_cache[i]; 2552 assume(first!=matcol); 2532 2553 if(first<col) 2533 2554 { … … 2538 2559 //select pivot 2539 2560 int act_l=mat->non_zero_entries(found_in_row); 2540 for(i= row+1;i<pn;i++){2561 for(i=found_in_row+1;i<pn;i++){ 2541 2562 assume(mat->min_col_not_zero_in_row(i)>=col); 2542 if((!(mat->is_zero_entry(i,col)))&&(mat->non_zero_entries(i)<act_l)) 2563 int first; 2564 assume(row_cache[i]==mat->min_col_not_zero_in_row(i)); 2565 first=row_cache[i]; 2566 assume(first!=matcol); 2567 // if((!(mat->is_zero_entry(i,col)))&&(mat->non_zero_entries(i)<act_l)) 2568 int nz; 2569 if((row_cache[i]==col)&&((nz=mat->non_zero_entries(i))<act_l)) 2543 2570 { 2544 2571 found_in_row=i; 2545 act_l=mat->non_zero_entries(i);//should be optimized here 2546 } 2547 2548 } 2572 act_l=nz; 2573 } 2574 2575 } 2576 #ifdef TGB_DEBUG 2577 { 2578 int last=-1; 2579 for(i=0;i<pn;i++) 2580 { 2581 int act=mat->min_col_not_zero_in_row(i); 2582 assume(act>last); 2583 2584 } 2585 for(i=pn;i<mat->get_rows();i++) 2586 { 2587 assume(mat->zero_row(i)); 2588 2589 } 2590 2591 2592 } 2593 #endif 2549 2594 mat->perm_rows(row,found_in_row); 2550 2551 2595 int h=row_cache[row]; 2596 row_cache[row]=row_cache[found_in_row]; 2597 row_cache[found_in_row]=h; 2598 #ifdef TGB_DEBUG 2599 { 2600 int last=-1; 2601 for(i=0;i<pn;i++) 2602 { 2603 int act=mat->min_col_not_zero_in_row(i); 2604 assume(act>last); 2605 2606 } 2607 for(i=pn;i<mat->get_rows();i++) 2608 { 2609 assume(mat->zero_row(i)); 2610 2611 } 2612 2613 2614 } 2615 #endif 2552 2616 //reduction 2553 2617 for(i=row+1;i<pn;i++){ 2554 2618 assume(mat->min_col_not_zero_in_row(i)>=col); 2555 if(!(mat->is_zero_entry(i,col))) 2619 int first; 2620 assume(row_cache[i]==mat->min_col_not_zero_in_row(i)); 2621 first=row_cache[i]; 2622 assume(first!=matcol); 2623 if(row_cache[i]==col) 2556 2624 { 2557 2625 … … 2566 2634 mat->add_lambda_times_row(i,row,n1); 2567 2635 assume(mat->is_zero_entry(i,col)); 2636 row_cache[i]=mat->min_col_not_zero_in_row(i); 2568 2637 2569 2638 } 2570 2639 assume(mat->min_col_not_zero_in_row(i)>col); 2571 2640 } 2641 #ifdef TGB_DEBUG 2642 { 2643 int last=-1; 2644 for(i=0;i<pn;i++) 2645 { 2646 int act=mat->min_col_not_zero_in_row(i); 2647 assume(act>last); 2648 2649 } 2650 for(i=pn;i<mat->get_rows();i++) 2651 { 2652 assume(mat->zero_row(i)); 2653 2654 } 2655 2656 2657 } 2658 #endif 2572 2659 for(i=row+1;i<pn;i++) 2573 2660 { 2574 if(mat->zero_row(i)) 2661 assume(mat->min_col_not_zero_in_row(i)==row_cache[i]); 2662 // if(mat->zero_row(i)) 2663 assume(matcol==mat->get_columns()); 2664 if(row_cache[i]==matcol) 2575 2665 { 2666 assume(mat->zero_row(i)); 2576 2667 mat->perm_rows(i,pn-1); 2668 row_cache[i]=row_cache[pn-1]; 2669 row_cache[pn-1]=matcol; 2577 2670 pn--; 2578 2671 if(i!=pn){i--;} 2579 2672 } 2580 2673 } 2674 #ifdef TGB_DEBUG 2675 { 2676 int last=-1; 2677 for(i=0;i<pn;i++) 2678 { 2679 int act=mat->min_col_not_zero_in_row(i); 2680 assume(act>last); 2681 2682 } 2683 for(i=pn;i<mat->get_rows();i++) 2684 { 2685 assume(mat->zero_row(i)); 2686 2687 } 2688 2689 2690 } 2691 #endif 2581 2692 row++; 2582 2693 } 2694 #ifdef TGB_DEBUG 2695 { 2696 int last=-1; 2697 for(i=0;i<pn;i++) 2698 { 2699 int act=mat->min_col_not_zero_in_row(i); 2700 assume(act>last); 2701 2702 } 2703 for(i=pn;i<mat->get_rows();i++) 2704 { 2705 assume(mat->zero_row(i)); 2706 2707 } 2708 2709 2710 } 2711 #endif 2712 omfree(row_cache); 2583 2713 } 2584 2714 void simple_gauss2(tgb_matrix* mat){
Note: See TracChangeset
for help on using the changeset viewer.