Please, friends, I ask your help.
Based on my old minded and averaged skilled Fortran programmer, I would know how to build a matrix based on the Loop structure, as presented in the attached file.
There is no need to having the same structure or similarity in commands, but only doing the same task.
I thank you very much!
Scabral!
Fortran example
Hi Sergio,
this should work. Please check carefully against the results of the old code
xm = Array[x, {10, 10}];
For[i = 1, i <= 10, i++,
xi = (N[i] - 0.5) h;
x[i, i] = const * Log[0.44705*h*xi*2.];
For[j = 1, j <= 10, j++,
If[i == j, Break[]];
xj = (N[j] - 0.5) h;
x[i, j] = const* Log[Abs[xi - xj]* Abs[xi + xj]];
x[j, i] = x[i, j];
]
]
Here you can see the structure of the matrix before putting in the numbers
MatrixForm[xm]
Finally the variables are replaced by the numeric values
prms = {g -> 1.*10^8 / 2.83, freq -> 377., h -> 5.*10 (-3),
perm -> 4.* \[Pi]* 10^(-7), eo -> 1.};
MatrixForm[xm] /. const -> (freq * perm* g * h^2) / (2. \[Pi]) /. prms
Thank you so much , Michael !
Absolutely great from you!
Hi, dears ! Unfortunately, it didn´t work.
In fact, I need a Wolfram version to this programof building a matrix X .
The key point seems to be the presence of j as the argument of logarithm.
Thank you !
Mo= 0,4PiE-6
Sigma = 35335689,05
w = 120Pi
h = 0.005
const = (w * Mo * sigma * h^2 )/(2Pi)
Define x(10,10)
Do i =1 to 10, step = 1
X(i,i) = const LN(0.44705h)
Do j = 1 to 10, step =1
If (i= j ) Continue
X(I,j) = const* LN( j * h)
X(j,i) =X (i,j)
Continue
Hi Sergio,
I propose you to verify the following code with Table[]:
mo = 4/10 \[Pi];
\[Sigma] = 3533568905/100;
w = 120 \[Pi];
h = 5/1000;
const = (w mo \[Sigma] h^2)/(2. \[Pi]);
x = Table[
Which[i < j, const Log[j h],
i == j, const Log[0.44705 h],
i > j, const Log[i h]],
{i, 10}, {j, 10}];
x//MatrixForm
Your matrix is defined as a list x. Element (i,j) of the matrix x can be addressed by applying the syntax x[[i,j]].
Seems ti be great, Valerius !
Gonna try it and give you the feedback !
Thank you !
I haven’t checked for efficiency of evaluation, but for sheer simplicity of code, why not just the following?
x[i_, j_] := const Log[Max[i, j] h]
x[i_, i_] := const Log[0.44705 h]
Table[x[i, j], {i, 1, 10}, {j, 1, 10}] // MatrixForm
That uses the symmetry of the condition for different i and j, and it exploits the fact that a specific rule, here
x[i_,i_]:=
always overrides a general rule, here:
x[i_,j_]:=
