static SBasis my_inverse(SBasis f, int order){ double a0 = f[0][0]; if(a0 != 0) { f -= a0; } double a1 = f[0][1]; if(a1 == 0) THROW_NOTINVERTIBLE(); //assert(a1 != 0);// not invertible. if(a1 != 1) { f /= a1; } SBasis g=SBasis(order, Linear()); g[0] = Linear(0,1); double df0=derivative(f)(0); double df1=derivative(f)(1); SBasis r = Linear(0,1)-g(f); for(int i=1; i<order; i++){ //std::cout<<"i: "<<i<<std::endl; r=Linear(0,1)-g(f); //std::cout<<"t-gof="<<r<<std::endl; r.normalize(); if (r.size()==0) return(g); double a=r[i][0]/pow(df0,i); double b=r[i][1]/pow(df1,i); g[i] = Linear(a,b); } return(g); }
SBasis integral(SBasis const &c) { SBasis a; a.resize(c.size() + 1, Linear(0,0)); a[0] = Linear(0,0); for(unsigned k = 1; k < c.size() + 1; k++) { double ahat = -c[k-1].tri()/(2*k); a[k][0] = a[k][1] = ahat; } double aTri = 0; for(int k = c.size()-1; k >= 0; k--) { aTri = (c[k].hat() + (k+1)*aTri/2)/(2*k+1); a[k][0] -= aTri/2; a[k][1] += aTri/2; } a.normalize(); return a; }