Hey folks. I have a massively complicated equation I'm trying to solve and the internal memory can't take it.
Here is the problem.
Let f(x) := 1 - lambda*x^2
alpha := 1/f(1)
By solving the following equation,
alpha*f(f(x/alpha)) = f(x) + O(x^4)
We can determine a value of lambda and hence alpha (for which the real value is roughly -2.5 and the calculated value here is roughly -2.7).
Now, if we add in extra higher terms to f(x) we can increase the accuracy of the calculated value of alpha.
For example, Let f(x) := 1 - lambda*x^2 + a*x^4
alpha := 1/f(1) = 1/(1 - lambda + a)
Now solving the equation alpha*f(f(x/alpha) = f(x) + higher order terms as before, we can find a value for alpha and lambda by comparing coefficients. This gives a value of alpha of roughly -2.53, much closer than the -2.7 we had before.
This is the code I used to find -2.53 (note I found it differently (pretty much by hand) at first but then created this code to speed things up).
f := x -> 1 - lambda*x^2 + a*x^4;
g := 1 - lambda*x^2 + a*x^4;
alpha := 1/f(1);
Lambda := select(has, collect(alpha*f(f(x/alpha)),x), x^2):
lambda := [evalf(solve(A = select(has, g, x^2), a))];
A := select(has, collect(alpha*f(f(x/alpha)),x), x^4):
a := [evalf(solve(A = select(has, g, x^4), a))];
alpha := evalf(1/f(1));
Which seems to work. I used the  and  parts since this isolated the non-zero, non-complex solutions although I don't like using it since I'm not sure if it works for when I add in higher terms.
So now I'm trying to improve on this by adding another +b*x^6 term.
I then added the following lines of code to the above;
B := select(has, collect(alpha*f(f(x/alpha)),x), x^6):
b := [evalf(solve(A = select(has, g, x^6), b))];
and of course added in the extra term to f and g.
Now things become pretty grim. this won't compute before I run out of internal memory.
So, can anyone think of a much more efficient code to compare the coefficients and solve for lambda, a and b?
I'm trying to drop higher order terms as early as possible, i.e in this case anyhting above x^6 but I'm having no luck in doing this as it seems Order only applies to the series command.
So thanks in advance to anyone who helps!
Oh, I should also say that lambda > 0 is that makes a difference.