2
$\begingroup$

Is what I'm looking to do possible? I know that I can get it to work with a for loop, but a table would make things much neater.

What I need to do while calculation the table below is to reset the variable l such that l = l - fretScale[y_]. l is initially set to 25.

l = 25 ;(* Nominal string length *)

fretScale[y_] := l*(1 - 1/2^(1/12)) // N;

Table[fretScale[y], {y, 1, 30, 1}]

What I did with the for loop (which works is this:

For[i = 1; y = 0, i < n + 1, i++, 
  y = l*(1 - 1/2^(1/12)) // N; 
  l = l - y

(Note, in the loop fretScale[y_] is defined as y, not as a defined function)

The table function above calculates the correct first fret position of 1.403, but keeps l fixed at 25 and I need to successively make l range from 25, 23.597, 22.273,...

The output I get for the table is:

{1.40314, 1.40314, 1.40314, ...}

what I want (and get for the for loop is)

{1.40314, 2.72753, 3.97759, ...}
$\endgroup$
  • 2
    $\begingroup$ k[x_] := x - x*(1 - 1/2^(1/12)) // N; NestList[k, 25, 10] $\endgroup$ – Dr. belisarius Oct 6 '15 at 20:27
3
$\begingroup$

Here is one of many ways to do it with Table.

l = 25;
k = 1/2^(1/12) // N;
l - Table[l = k l, {30}]
{1.40314, 2.72753, 3.97759, 5.15749, 6.27116, 7.32233, 8.3145, 9.25099, 10.1349, 
 10.9692, 11.7567, 12.5, 13.2016, 13.8638, 14.4888, 15.0787, 15.6356, 16.1612, 
 16.6573, 17.1255, 17.5675, 17.9846, 18.3784, 18.75, 19.1008, 19.4319, 19.7444, 
 20.0394, 20.3178, 20.5806}
$\endgroup$
  • $\begingroup$ ...and since it's all exponential: 25. Table[1 - 2^(-k/12), {k, 30}] $\endgroup$ – J. M. will be back soon Oct 7 '15 at 0:31
  • $\begingroup$ @J.M.isback. Sure, that's another of the countless (well, I can't count them) of doing this with Table. BTW, glad to see you back. $\endgroup$ – m_goldberg Oct 7 '15 at 0:36

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.