Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

I cannot get mathematica to solve:

enter image description here

The problematic code:

With[{n = 7}, 
 Solve[((2*
       Sum[((Subscript[y, 
             k] - (a*Subscript[x, k]^3 + b*Subscript[x, k]^2 + 
              c*Subscript[x, k] + d)))*(-Subscript[x, k]^3), {k, 1, 
         n}]) == 0) && ((2*
       Sum[(Subscript[y, 
            k] - (a*Subscript[x, k]^3 + b*Subscript[x, k]^2 + 
             c*Subscript[x, k] + d))*(-Subscript[x, k]^2), {k, 1, 
         n}]) == 0) && ((2*
       Sum[(Subscript[y, 
            k] - (a*Subscript[x, k]^3 + b*Subscript[x, k]^2 + 
             c*Subscript[x, k] + d))*(-Subscript[x, k]), {k, 1, 
         n}]) == 0) && ((2*
       Sum[(Subscript[y, 
            k] - (a*Subscript[x, k]^3 + b*Subscript[x, k]^2 + 
             c*Subscript[x, k] + d))*(-1), {k, 1, n}]) == 0), {a, b, 
   c, d}]
 ]

I tried for a variable n, but that gave me 'could not solve with methods available to Solve', so then via a recommendation here I used n=6, but this still doesn't seem to work :/

If I put $x_{k}$ and $y_{k}$ instead as $x[[k]]$ and $y[[k]]$ and give a list however, then it is able to solve in under a second, as shown in this example:

x = RandomReal[{-10, 10}, 6];
y = RandomReal[{-10, 10}, 6];
With[{n = 6}, 
 Solve[And @@ 
   Table[Sum[(y[[k]] - (a x[[k]]^3 + b x[[k]]^2 + c x[[k]] + 
           d)) (-x[[k]]^j), {k, 1, n}] == 0, {j, 0, 3}], {a, b, c, d}]]

(*
==> {{a -> -0.0970828, b -> 0.771442, c -> 0.895965, 
  d -> -3.73369}}
*)

Here is a version of this code that doesn't work:

Clear[x, y]

With[{n = 6}, 
 Solve[And @@ 
   Table[Sum[(Subscript[y, 
          k] - (a Subscript[x, k]^3 + b Subscript[x, k]^2 + 
           c Subscript[x, k] + d)) (-Subscript[x, k]^j), {k, 1, n}] ==
      0, {j, 0, 3}], {a, b, c, d}]]
share|improve this question
    
Is the variable x a list of values? If yes then you should use x[[k]] instead of using a subscript. –  Spawn1701D May 18 '13 at 16:33
    
I added my version of the code to the question to make it easier to reproduce. –  Jens May 18 '13 at 21:41
add comment

1 Answer

I tried your example in version 8 and had no problems solving it. To save typing, I shortened it as follows:

With[{n = 6},
 Solve[
  And @@ Table[
    Sum[(Subscript[y, 
         k] - (a Subscript[x, k]^3 + b Subscript[x, k]^2 + 
           c Subscript[x, k] + d)) (-Subscript[x, k]^j), {k, 1, n}] ==
      0, {j, 0, 3}],
  {a, b, c, d}
  ]
 ]

output

Then I confirmed that it works identically for this input where I eliminated all the subscripted variables:

With[{n = 6}, 
 Solve[And @@ 
   Table[Sum[(y[k] - (a x[k]^3 + b x[k]^2 + c x[k] + d)) (-x[k]^
          j), {k, 1, n}] == 0, {j, 0, 3}], {a, b, c, d}]]

So the use of Subscript is perfectly fine here, and makes no difference in version 8.

However, in version 9 neither of the above produce a solution before I had to abort the calculation. So this is probably a bug, and it will take a little more thought to find a work-around.

One can write the equations explicitly as a linear system by calculating the matrix containing the sums of powers of $x_k$ (which can be summed independently of the unknown variables). I tried to do this with the original lengthy code in the question, and then used LinearSolve:

With[{n = 7},
  equations = {
    ((2*Sum[((Subscript[y, 
             k] - (a*Subscript[x, k]^3 + b*Subscript[x, k]^2 + 
              c*Subscript[x, k] + d)))*(-Subscript[x, k]^3), {k, 1, 
         n}])), ((2*
       Sum[(Subscript[y, 
            k] - (a*Subscript[x, k]^3 + b*Subscript[x, k]^2 + 
             c*Subscript[x, k] + d))*(-Subscript[x, k]^2), {k, 1, 
         n}])), ((2*
       Sum[(Subscript[y, 
            k] - (a*Subscript[x, k]^3 + b*Subscript[x, k]^2 + 
             c*Subscript[x, k] + d))*(-Subscript[x, k]), {k, 1, 
         n}])), ((2*
       Sum[(Subscript[y, 
            k] - (a*Subscript[x, k]^3 + b*Subscript[x, k]^2 + 
             c*Subscript[x, k] + d))*(-1), {k, 1, n}]))
    }
  ];

Clear[a, b, c, d];
m = D[equations, {{a, b, c, d}}];
vec = -equations /. Thread[{a, b, c, d} -> {0, 0, 0, 0}];
LinearSolve[m, vec]

Here, I converted the system of equations to a matrix of linear coefficients (m) and a vector vec. Again, this hangs in version 9 but produces a solution in version 8. So the work-around for now seems to be: use version 8 (as I do by default, too).

share|improve this answer
    
any ideas for a workaround? –  Eiyrioü von Kauyf May 19 '13 at 2:09
    
I just tried my LinearSolve idea and again can't get it to work in version 9 while it works in 8. See my edit. –  Jens May 19 '13 at 3:11
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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