38 if(start>p.start){sp.start=start;}
39 else{sp.start=p.start;}
61 if(start<sp.start){
return 1;}
68 else if (d>0) {
return 1;}
90 if(polyCount){free(polys);}
99 for( i=0 ; i<count ; i++ )
101 if( !c || sps[i].start!=polys[c-1].start ) polys[c++] = sps[i];
102 else{polys[c-1].p+=sps[i].p;}
106 template <
int Degree>
112 if(polyCount){free(polys);}
139 template<
int Degree2>
142 for(
int i=0;i<int(polyCount);i++){
143 polys[i].start=p.polys[i].start;
144 polys[i].p=p.polys[i].p;
153 for(
int i=0 ; i<int(polyCount) && t>polys[i].start ; i++ ) v+=polys[i].p(t);
161 double start,end,s,v=0;
169 for(
int i=0;i<int(polyCount) && polys[i].start<end;i++){
170 if(start<polys[i].start){s=polys[i].start;}
172 v+=polys[i].p.integral(s,end);
183 q.set(polyCount+p.polyCount);
186 while(idx<q.polyCount){
187 if (j>=
int(p.polyCount)-1) {q.polys[idx]= polys[++i];}
188 else if (i>=
int( polyCount)-1) {q.polys[idx]=p.polys[++j];}
189 else if(polys[i+1].start<p.polys[j+1].start){q.polys[idx]= polys[++i];}
190 else {q.polys[idx]=p.polys[++j];}
200 q.set(polyCount+p.polyCount);
203 while(idx<q.polyCount){
204 if (j>=
int(p.polyCount)-1) {q.polys[idx]= polys[++i];}
205 else if (i>=
int( polyCount)-1) {q.polys[idx].start=p.polys[++j].start;q.polys[idx].p=p.polys[j].p*(-1.0);}
206 else if(polys[i+1].start<p.polys[j+1].start){q.polys[idx]= polys[++i];}
207 else {q.polys[idx].start=p.polys[++j].start;q.polys[idx].p=p.polys[j].p*(-1.0);}
216 size_t idx=0,cnt=0,oldPolyCount=polyCount;
219 set(oldPolyCount+p.polyCount);
221 while(cnt<polyCount){
222 if (j>=
int( p.polyCount)-1) {polys[idx]=oldPolys[++i];}
223 else if (i>=
int(oldPolyCount)-1) {polys[idx].start= p.polys[++j].start;polys[idx].p=p.polys[j].p*scale;}
224 else if (oldPolys[i+1].start<p.polys[j+1].start){polys[idx]=oldPolys[++i];}
225 else {polys[idx].start= p.polys[++j].start;polys[idx].p=p.polys[j].p*scale;}
226 if(idx && polys[idx].start==polys[idx-1].start) {polys[idx-1].p+=polys[idx].p;}
235 template<
int Degree2>
239 int i,j,spCount=int(polyCount*p.polyCount);
242 for(i=0;i<int(polyCount);i++){
243 for(j=0;j<int(p.polyCount);j++){
244 sp[i*p.polyCount+j]=polys[i]*p.polys[j];
252 template<
int Degree2>
256 for(
int i=0;i<int(polyCount);i++){
257 q.polys[i].start=polys[i].start;
258 q.polys[i].p=polys[i].p*p;
267 for(
size_t i=0;i<polyCount;i++){q.polys[i]=polys[i].scale(s);}
275 for(
size_t i=0;i<polyCount;i++){q.polys[i]=polys[i].shift(s);}
282 for(
size_t i=0;i<polyCount;i++){
283 q.polys[i].start=polys[i].start;
284 q.polys[i].p=polys[i].p.derivative();
293 for(i=0;i<int(polyCount);i++){
294 q.polys[i].start=polys[i].start;
295 q.polys[i].p=polys[i].p.integral();
296 q.polys[i].p-=q.polys[i].p(q.polys[i].start);
307 for(
int i=0;i<int(polyCount);i++){polys[i].p*=s;}
313 for(
size_t i=0;i<polyCount;i++){polys[i].p/=s;}
351 printf(
"[-Infinity,Infinity]\n");
354 for(
size_t i=0;i<polyCount;i++){
356 if (polys[i ].start== DBL_MAX){printf(
"Infinity,");}
357 else if (polys[i ].start==-DBL_MAX){printf(
"-Infinity,");}
358 else {printf(
"%f,",polys[i].start);}
359 if(i+1==polyCount) {printf(
"Infinity]\t");}
360 else if (polys[i+1].start== DBL_MAX){printf(
"Infinity]\t");}
361 else if (polys[i+1].start==-DBL_MAX){printf(
"-Infinity]\t");}
362 else {printf(
"%f]\t",polys[i+1].start);}
375 q.polys[0].start=-radius;
376 q.polys[1].start= radius;
378 q.polys[0].p.coefficients[0]= 1.0;
379 q.polys[1].p.coefficients[0]=-1.0;
382 template<
int Degree >
396 for(
int i=0;i<int(polyCount);i++){
397 sps[2*i ].start=polys[i].start-radius;
398 sps[2*i+1].start=polys[i].start+radius;
399 p=polys[i].p.integral()-polys[i].p.integral()(polys[i].start);
400 sps[2*i ].p=p.shift(-radius);
401 sps[2*i+1].p=p.shift( radius)*-1;
403 A.set(sps,
int(polyCount*2));
405 return A*1.0/(2*radius);
410 std::vector<double> tempRoots;
413 for(
size_t i=0;i<polyCount;i++){
415 if(polys[i].start>max){
break;}
416 if(i<polyCount-1 && polys[i+1].start<min){
continue;}
417 p.getSolutions(c,tempRoots,EPS);
418 for(
size_t j=0;j<tempRoots.size();j++){
419 if(tempRoots[j]>polys[i].start && (i+1==polyCount || tempRoots[j]<=polys[i+1].start)){
420 if(tempRoots[j]>min && tempRoots[j]<max){roots.push_back(tempRoots[j]);}
428 fwrite(&samples,
sizeof(
int),1,fp);
429 for(
int i=0;i<samples;i++){
430 double x=min+i*(max-min)/(samples-1);
432 fwrite(&v,
sizeof(
float),1,fp);