My goal is to obtain a formula F:= x -> fa(x)*c1_1(x)+ fb(x)*c1_2(x)+fc(x)*c2_1(x)+... where every ci_j(x) is a function of x. fa, fb, fc are known functions of x. I do not need to have it printed, I just need it to return a numerical value for every value of x I throw in.
I have obtained the solutions of ci_j's in the form
Sol:=[c1_1=f11(x), c1_2=f12(x), c1_3=f13(x), ...], N1 terms
Sol:=[c2_1=f21(x,c1_j’), c2_2=f22(x,c1_j’), c2_3=f23(x,c1_j’), ...], N2 terms
Sol:=[c3_1=f31(x,c1_j’,c2_j’), c3_2=f32(x,c1_j’,c2_j’), c3_3=f33(x,c1_j’,c2_j’), ...], N3 terms
Sol:=[c4_1=f41(x,c1_j’,c2_j’,c3_j’), c4_2=f42(x,c1_j’,c2_j’,c3_j’), c4_3=f43(x,c1_j’,c2_j’,c3_j’), ...], N4 terms
(where j’>0, Ni = 3*(i+1))
In short, to calculate any Sol[n] term one must know the solution (as a function only of x) for every Sol[n-j] term, j=1..n-1.
Direct substitution (subs(Sol[n-1],Sol[n])) is instantly draining all memory because the ci_j functions are complicated functions of x (sums of fractions of polynomials) and in each higher order term previous order functions appear hundreds or thousands of times.
To bypass this I have tried to mass convert the equations inside Sol into functions of x. I have used the following toy model of the problem:
Sol := [g11 = g1 + g2 + 1, g22 = g1 - g2 - 1, g12 = x + 2]
Sols := [g11 = g1(x) + g2(x) + 1, g22 = g1(x) - g2(x) - 1, g12 = x + 2]
g22 = g1(x) - g2(x) - 1
> for i from 1 to nops(Sol) do
g11 := X -> subs(x = X, rhs(Sols[i]))
g22 := X -> subs(x = X, rhs(Sols[i]))
g12 := X -> subs(x = X, rhs(Sols[i]))
The obvious problem here is that i is not evaluated in the right side of the assignment and takes whatever value it happens to have during evaluation of the function, eg. calling g12(x) after this loop gives
Error, (in g12) invalid subscript selector because i is now 4.
Ideally the output would be something like this:
g11 := X -> subs(x = X, rhs(Sols))
g22 := X -> subs(x = X, rhs(Sols))
g12 := X -> subs(x = X, rhs(Sols))
Is there a way for such a strategy to work? Could there be any other ways to accomplish my goal?