2
$\begingroup$

Consider the relations

$$ g_{k}(x) = c(x)\cdot g_{k-1}(x)+d(x), \quad f_{k}(x) = a(x)\cdot f_{k-1}(x)+c(x) g_{k-1}(x) $$ With $g_{0} = G, f_{0}=F$.

How can I get an arbitrary element $g_{k}(x)$ using Mathematica syntax?

$\endgroup$
4
$\begingroup$

Using RSolve

Clear["Global`*"]

sol = RSolve[{g[k] == c*g[k - 1] + d, f[k] == a*f[k - 1] + c*g[k - 1], 
      g[0] == G, f[0] == F}, {f, g}, k][[1]] /. {a -> a[x], c -> c[x], 
    d -> d[x]};

f[k_, x_] = f[k, x] /. sol // FullSimplify

(* (F a[x]^(2 + k) (-1 + c[x]) - a[x]^(1 + k) (-1 + c[x]) (F + (F - G) c[x]) + 
   a[x]^k (-1 + c[x]) c[x] (F - G + d[x]) + 
   a[x] c[x] (d[x] - c[x]^k (G (-1 + c[x]) + d[x])) + 
   c[x] (-c[x] d[x] + c[x]^k (G (-1 + c[x]) + d[x])))/((-1 + a[x]) (a[x] - 
     c[x]) (-1 + c[x])) *)

g[k_, x_] = g[k, x] /. sol // FullSimplify

(* (-d[x] + c[x]^k (G (-1 + c[x]) + d[x]))/(-1 + c[x]) *)

Verifying,

{g[k, x] == c[x]*g[k - 1, x] + d[x],
  f[k, x] == a[x]*f[k - 1, x] + c[x]*g[k - 1, x],
  f[0, x] == F, g[0, x] == G} // Simplify

(* {True, True, True, True} *)
| improve this answer | |
$\endgroup$
3
$\begingroup$

The recursion strategy seems independent of the x dependence, so I omit it.

My solution is not efficient, but there are many explanations of how to define Factorial recursively for efficiency (storing values already computed). I omit that small step for clarity too. The Simplify below is not necessary.

Define

g[0] = G; f[0] = F
g[k_Integer] := Simplify[c*gk[k-1] + d]
f[k_Integer] := Simplify[a+f[k-1]+c*g[k-1]]

Then

f[2] //InputForm

Gives

2*a + F + c^2*G + c*(d + G)

Rather than Integer, you could test for positive integers.

Bob's answer is better as it solves the recurrence relations once and for all. Depends on what you want.

| improve this answer | |
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.