PDA

View Full Version : Mathematica: Module inside For loop


ChristinaJ
Jan11-12, 08:55 AM
Hi all,

I have the following code which runs without error but gives no output. It's probably simple but I just can't see the problem.

LM={};

M[line_, cur_, lq_, ld_, k_] := For [i = 1, Length[line[[1]]], i++,
Module[{m}, If[line[[1, i]] == "Q",
m = {{Cos[k*Sqrt[Abs[cur]]*lq], Sin[k*Sqrt[Abs[cur]]*lq]/(
k*Sqrt[Abs[cur]])}, {-k*Sqrt[Abs[cur]]*
Sin[k*Sqrt[Abs[cur]]*lq], Cos[k*Sqrt[Abs[cur]]*lq]}}.{{1,
ld}, {0, 1}},
m = {{1, ld}, {0, 1}}];
AppendTo[LM, m]]];

M[line, line[[3]], line[[4]], line[[5]], 1.8]

Where Dimensions[line]={5,15} the first 2 rows of which are strings and the remainder numbers.

For LM I get LM={}

Any help very much appreciated.

Christina

CompuChip
Jan11-12, 11:10 AM
Maybe you need to re-assign the result to the list:
LM = Append[LM, m]
(If this solves the problem, don't feel bad... you don't want to know how many hours I spent looking for similar mistakes)

Also, if the whole body of your module is a single If-statement, what do you need the module for?
You can just as well write

For[..., ..., LM = Append[LM, If[...]]]

instead of

For[..., ..., Module[m = If[...]; LM = Append[LM, m]]

ChristinaJ
Jan11-12, 12:33 PM
Thanks CompuChip,

You were right; using Module was unnecessary.

The actual problem turned out to be a foolishly simple mistake. I had assigned the end value for i in the loop in an incorrect way.

Doh!