On 8/6/15, Waldek Hebisch <hebi...@math.uni.wroc.pl> wrote: > Abhinav Baid wrote: >> >> On 8/5/15, Waldek Hebisch <hebi...@math.uni.wroc.pl> wrote: >> >> >> >> Just thought that I'd make a small post. I've not been able to work on >> >> this much for the past week as college reopened. Waldek, have you gone >> >> through the current code? Is it fine, or could you please point out >> >> the errors? >> > >> > In general it look OK. However, I noticed that you use >> > the same bounds for operator and its adjoint. Generalized >> > exponents of adjoint of L are related, but usually different >> > than generalized exponents of L. So, I would expect different >> > bound for adjoint. Using too small bound may lead to missing >> > a solution. >> >> Okay, I use a different bound for adjoint now. [1] > > Good. AFAICS there is still serious problem: you pass too small > number of coefficients to Hermite-Pade solver. The rule is: > if you want to get back n coefficients you need to have at > least n equations. However, the number of equations is > related to order of approximation. In scalar Hermite-Pade > problem number of equations is the same as order of approximation. > So to get n coefficients you need approximation of order n, > which means that you need n terms for _each_ coefficient of > local factor. For example, if we seek factor of order 1 > and degree bound is 10, that we need to determine 22 numbers > (11 for each coefficient of the factor). For this we need > 22 terms of series. Note that missing coefficients are > effectively replaced by 0 (since we pass (list of vectors of) > polynomials to Hermite-Pade solver). So we are solving > wrong Hermite-Pade problem and conseqently we should > expect wrong solutions. > > Additional remarks: > - If there is singularity with exponential > part of multiplicity 1, then failure of van Hoej algorithm > for this exponential part applied to operator and its > adjount means that operator is irreducible. In such > case there is no need to look at other singularities > or even other exponnetial parts. And if our implementation > fails to find factor for reducible operator this is bug > which should be fixed. Yes, but how do I check this and appropriately call factor_minmult1? (which is removed for now). The earlier check was using skipped_factors but it was wrong. I think there should be a condition in the loop after bounds are computed, but am not sure. Also, I have fixed the code according to the other remarks. > - In try_factorization2 you perform too many calls to > Hermite-Pade solver. Normally a single call per order > of factor should be enough (for possible exceptions > see remarks at the end) > - You have some redundant code, for example you call > 'truncate' and then 'convertUTStoUP' which in turn > callse 'UTS2UP'. But 'UTS2UP' ignores unneeded terms > of the series, so call to 'truncate' is not needed. > - Could you try to use better variable names. 'i', 'j', 'k' > usually mean integer variables. Unless there is strong > reason (like trying to follow notation in a paper) please > do not use then for non-integer variables. > >> > Also, it is not clear if you can just pick >> > a basis element for a Hermite-Pade problem: columns of solution >> > matrix span solutions space. To prove that operator is >> > irreducible you need to check that no element of solution >> > space leads to a factor. Unfortunetely, currently 'fffg' >> > routine will always return several solutions. More precisely, >> > 'fffg' only accepts bounds that lead to several solutions. >> > I will try to modify 'fffg' so that it accepts bounds leading >> > to smaller number of solutions (hopefully a unique solution). >> > >> >> So, as the solutions are spanned by the columns of the matrix, I need >> to find coefficients, not all zero, for each of them such that the >> corresponding linear combination gives a dot product of zero with lv. >> Is there a relevant function for this? I looked at expressIdealMember, >> but it returns the trivial list of zeros. > > I have commited a new version of fffg which accepts requested > order of solution as an argument. Normally if requested order > is large enoung you will get single solution. If you look > for factor starting from factors of low order, then if you > take sufficiently many terms (that is order of Hermite-Pade > problem is large enough) you will get single solution. ATM > I do not know if there is a simple way to find out which > order is large enough. One way could be to increase number > of terms in Hermite-Pade when there are multiple solutions > and stop once we get only one. > > Below is a modified version of 'hp_solve' which accepts > requested order of solution as an argument. > > Note: New version of 'generalInterpolation' computes > defects of solutions, that is margin between degree > of solution and degree bound. If defect is negative > then given "solution" is really not a solution because > it does not satisfy degree bounds. 'hp_solve' rejects > them, so result of 'hp_solve' consists of true solutions > (in case there are no solution return value is matrix > with 0 columns). > > > ----------------<cut here>------------------- > > )abbrev package VHPSOLV VectorHermitePadeSolver > VectorHermitePadeSolver : Exports == Implementation where > F ==> Expression(Integer) > SUP ==> SparseUnivariatePolynomial(F) > Exports ==> with > hp_solve : (List Vector(SUP), List(NonNegativeInteger), > NonNegativeInteger) -> Matrix SUP > +++ hp_solve(lv, eta, K) solves Hermite-Pade problem with degree > +++ bound eta up to order K. > Implementation ==> add > > FFFG ==> FractionFreeFastGaussian(F, SUP) > > power_action(m : NonNegativeInteger > ) : ((NonNegativeInteger, NonNegativeInteger, SUP) -> F) == > (k, l, g) +-> DiffAction(k, m*l, g)$FFFG > > hp_solve(lv, eta, K) == > print("hp_solve"::OutputForm) > print(eta::OutputForm) > m := #first(lv) > lpp : List(SUP) := [] > for v in lv repeat > #v ~= m => > error "hp_solve: vectors must be of the same length" > pp : SUP := 0 > for i in 1..m repeat > pp1 := multiplyExponents(v(i), m) > pp := pp + monomial(1, (i-1)::NonNegativeInteger)$SUP*pp1 > lpp := cons(pp, lpp) > lpp := reverse!(lpp) > vd : Vector Integer := vector([ei::Integer for ei in eta]) > C : List(F) := [0 for i in 1..K] > res1 := generalInterpolation(C, power_action(m), vector(lpp), > vd, K)$FFFG > print(vd::OutputForm) > n := #vd > n1 : NonNegativeInteger := 0 > for i in 1..n | vd(i) >= 0 repeat > n1 := n1 + 1 > print(n1::OutputForm) > res := new(n, n1, 0)$Matrix(SUP) > i1 : NonNegativeInteger := 0 > for i in 1..n | vd(i) >= 0 repeat > i1 := i1 + 1 > for j in 1..n repeat > res(j, i1) := res1(j, i) > res > > ------------------<cut here>------------------- > -- > Waldek Hebisch > hebi...@math.uni.wroc.pl > > -- > You received this message because you are subscribed to a topic in the > Google Groups "FriCAS - computer algebra system" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/fricas-devel/3MYCZGOyIOI/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > fricas-devel+unsubscr...@googlegroups.com. > To post to this group, send email to fricas-devel@googlegroups.com. > Visit this group at http://groups.google.com/group/fricas-devel. > For more options, visit https://groups.google.com/d/optout. >
-- Abhinav. -- You received this message because you are subscribed to the Google Groups "FriCAS - computer algebra system" group. To unsubscribe from this group and stop receiving emails from it, send an email to fricas-devel+unsubscr...@googlegroups.com. To post to this group, send email to fricas-devel@googlegroups.com. Visit this group at http://groups.google.com/group/fricas-devel. For more options, visit https://groups.google.com/d/optout.