0
|
12190 Views
|
4 Replies
|
4 Total Likes
View groups...
Share
GROUPS:

# How does Mathematica's Table function iterate equations?

Posted 10 years ago
 n = 2; yv[i_] := Range[1/n, 1, 1/n]; yv[n] yc[j_] := Which[    0 <= i <= 1, 0,   1 < i <= n, 1/2 (yv[n][[i]] + yv[n][[i - 1]])]; Table[yc[j], {i, 1, n}] test1 = Table[N[1/(2 \[Pi]) (yv[i]/(yv[i]^2 - yc[j]^2))], {i, 1, n}, {j, 1, n}]test2 = Table[N[1/(2 \[Pi]) (yv[i]/(yv[i]^2 - yc[j]^2))], {i, 1, n}]Outputs:{1/2, 1}{0, 3/4}{{{0.31831, 0.159155}, {0.31831, 0.159155}}, {{-0.254648, 0.363783}, {-0.254648, 0.363783}}}{{0.31831, 0.159155}, {-0.254648, 0.363783}}I'm an undergraduate aerospace engineer learning Mathematica and trying to program Prandtl's numerical lifting line theory. I'm having trouble trying to understand Mathematica's interation process and how it creates lists (in this case, why I get a list of lists of lists vs. a list of lists). I'm doing some iterations (observe the "test" functions) with an equation that depends on two variables: variable yv that depends on i, and variable yc that depends on j. Both of my yv and yc functions are producing the correct answers that I need (sorry if the code for them looks ugly; it's a learning process). Test2 produces the correct output that I need: a square n x n matrix that matches my hand-calculations. Bluntly speaking, why does test1 create a weird looking list? If I need to do an iteration of both i and j from 1 to n, it visually seems like that code should produce an answer that matches test2. Is there a way to make test1 match test2's answer? Also, why does my code for test2 even work when I'm only iterating i, not j, from 1 to n (how does yc get its values)? I'd appreciate any tips, as well as any resources to better understand the iteration process/linear algebra in Mathematica (my code will require me to use a lot of iterations and linear algebra, so I better learn from my mistakes and prevent this in my future codes. As a side note, I'm also trying to also switch from Matlab to Mathematica in my CFD class so I'll need to really understand Mathematica's numerical computation process).TL;DR: My test2 output is exactly what I need, but how did Mathematica compute yc without steps for j?Thank you.
4 Replies
Sort By:
Posted 10 years ago
 To iterate the various Nest* functions can be helpful:http://reference.wolfram.com/mathematica/tutorial/ApplyingFunctionsRepeatedly.html
Posted 10 years ago
 Hello Matt,I can't quite make out what you are trying to do.However, if you study this little example, if might help you understand how to do what you want and thus achieve your purpose. My purpose here is to show you the order in which things occur, and why it is useful to work symbolically instead of numericallyPut each expression into its own cell and evaluate one cell at a time. When you have convinced yourself that you understand the result of evaluation, move to the next cell.Clear variables:Clear[yv,yc,n,test,g]define a function that will give you a square matrixtest[n_] :=  Table[1/(2 Pi) yv[i]/(yv[i]^2 - yc[i, j]^2), {i, 1, n}, {j, 1, n}]check and see if it workstestdefine yvyv[var_] := Sin[var Pi/(1 + var)]test ityvyvyv[137.0]N[yv]try your square matrixtest go ahead and define ycyc[lb_, ub_] := Integrate[g[z], {z, lb Pi, ub Pi}]test ityc[3,6]Try your square matrixtestMake a direct assignment to gg = Sintest your square matrixanExample = testExtract parts:anExample[]anExample[[1,4]]numerically.N[test]
Posted 8 years ago
 Very helpful even a year later. When you add typesetting and evaluate in TraditionalForm the iteration pattern becomes very clear. Thankstest // TraditionalForm // Style[TableForm[#], Bold, Blue] &
Posted 10 years ago
 "how did Mathematica compute yc without steps for j?"yc[ j_ ] or yc[ j ] does not depend on the value of j in any way. It doesn't test the value of the argument. It doesn't use the value of the argument. It only tests and uses the value that i happens to have at the moment that yc[ j ] is evaluated.