Mathematica Mathematica: Module inside For loop

AI Thread Summary
The discussion revolves around a coding issue where the user is unable to get output from their function despite it running without errors. The function is designed to populate a list, LM, based on certain conditions within a loop. The initial problem identified was that the user was not correctly appending results to the list, which was suggested to be resolved by reassigning the result with Append. Additionally, it was noted that using a Module was unnecessary since the body of the function contained only a single If-statement. Ultimately, the user discovered that the root cause of the issue was a simple mistake in the loop's end value assignment.
ChristinaJ
Gold Member
Messages
34
Reaction score
1
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
 
Physics news on Phys.org
Maybe you need to re-assign the result to the list:
Code:
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
Code:
For[..., ..., LM = Append[LM, If[...]]]
instead of
Code:
For[..., ..., Module[m = If[...]; LM = Append[LM, m]]
 
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!
 
Back
Top