Changeset 057578 in git
- Timestamp:
- May 25, 1999, 6:49:39 PM (24 years ago)
- Branches:
- (u'spielwiese', '828514cf6e480e4bafc26df99217bf2a1ed1ef45')
- Children:
- 9fd5f8a67b2159d3a039d7b0b34e704f6a617dfb
- Parents:
- 1fff4b3fea4648d7e6b6639ecde260fdd4148b06
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/polys.cc
r1fff4b r057578 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: polys.cc,v 1.3 7 1999-04-30 10:39:54obachman Exp $ */4 /* $Id: polys.cc,v 1.38 1999-05-25 16:49:39 obachman Exp $ */ 5 5 6 6 /* … … 2110 2110 static poly pSubst1 (poly p,int n) 2111 2111 { 2112 poly qq,result = NULL; 2113 2114 while (p != NULL) 2115 { 2116 qq = p; 2112 if (p == NULL) return NULL; 2113 if (pNext(p) == NULL) 2114 { 2115 if (pGetExp(p, n) != 0) 2116 { 2117 pSetExp(p, n, 0); 2118 pSetm(p); 2119 } 2120 return p; 2121 } 2122 2123 int l = pLength(p) - 1; 2124 poly* monoms = (poly*) Alloc(l*sizeof(poly)); 2125 int i; 2126 2127 for (i=0; i<l; i++) 2128 { 2129 if (pGetExp(p, n) != 0) 2130 { 2131 pSetExp(p, n, 0); 2132 pSetm(p); 2133 } 2134 monoms[i] = p; 2117 2135 pIter(p); 2118 qq->next = NULL; 2119 pSetExp(qq,n,0); 2120 pSetm(qq); 2121 result = pAdd(result,qq); 2122 } 2123 return result; 2136 } 2137 if (pGetExp(p, n) != 0) 2138 { 2139 pSetExp(p, n, 0); 2140 pSetm(p); 2141 } 2142 for (i = l-1; i >= 0; i--) 2143 { 2144 pNext(monoms[i]) = NULL; 2145 p = pAdd(p, monoms[i]); 2146 } 2147 pTest(p); 2148 Free(monoms, l*sizeof(poly)); 2149 return p; 2150 } 2151 2152 /*3 2153 * substitute the n-th variable by number e in p 2154 * destroy p 2155 */ 2156 static poly pSubst2 (poly p,int n, number e) 2157 { 2158 number nn, nm; 2159 int exp; 2160 assume( ! nIsZero(e) ); 2161 2162 if (p == NULL) return NULL; 2163 if (pNext(p) == NULL) 2164 { 2165 exp = pGetExp(p, n); 2166 if (exp != 0) 2167 { 2168 nPower(e, exp, &nn); 2169 nm = nMult(nn, pGetCoeff(p)); 2170 pSetCoeff(p, nm); 2171 nDelete(&nn); 2172 pSetExp(p, n, 0); 2173 pSetm(p); 2174 } 2175 return p; 2176 } 2177 2178 int l = pLength(p) - 1; 2179 poly* monoms = (poly*) Alloc(l*sizeof(poly)); 2180 int i; 2181 2182 for (i=0; i<l; i++) 2183 { 2184 exp = pGetExp(p, n); 2185 if (exp != 0) 2186 { 2187 nPower(e, exp, &nn); 2188 nm = nMult(nn, pGetCoeff(p)); 2189 pSetCoeff(p, nm); 2190 nDelete(&nn); 2191 pSetExp(p, n, 0); 2192 pSetm(p); 2193 } 2194 monoms[i] = p; 2195 pIter(p); 2196 } 2197 exp = pGetExp(p, n); 2198 if (exp != 0) 2199 { 2200 nPower(e, exp, &nn); 2201 nm = nMult(nn, pGetCoeff(p)); 2202 pSetCoeff(p, nm); 2203 nDelete(&nn); 2204 pSetExp(p, n, 0); 2205 pSetm(p); 2206 } 2207 for (i = l-1; i >= 0; i--) 2208 { 2209 pNext(monoms[i]) = NULL; 2210 p = pAdd(p, monoms[i]); 2211 } 2212 Free(monoms, l*sizeof(poly)); 2213 pTest(p); 2214 return p; 2215 } 2216 2217 poly pSubst0(poly p, int n) 2218 { 2219 spolyrec res; 2220 poly h = &res; 2221 pNext(h) = p; 2222 2223 while (pNext(h)!=NULL) 2224 { 2225 if (pGetExp(pNext(h),n)!=0) 2226 { 2227 pDelete1(&pNext(h)); 2228 } 2229 else 2230 { 2231 pIter(h); 2232 } 2233 } 2234 pTest(pNext(&res)); 2235 return pNext(&res); 2124 2236 } 2125 2237 … … 2130 2242 poly pSubst(poly p, int n, poly e) 2131 2243 { 2132 if ((e!=NULL)&&(pIsConstant(e))&&(nIsOne(pGetCoeff(e)))) 2133 return pSubst1(p,n); 2244 if (e == NULL) return pSubst0(p, n); 2245 2246 if (pIsConstant(e)) 2247 { 2248 if (nIsOne(pGetCoeff(e))) return pSubst1(p,n); 2249 else return pSubst2(p, n, pGetCoeff(e)); 2250 } 2134 2251 2135 2252 int exponent,i;
Note: See TracChangeset
for help on using the changeset viewer.