# Simplest way to construct a matrix its elements are defined by known functions

I want to construct a n*m matrix, such that: 1- its first element is given by:

c0 = 1 - 4/\[Pi] (1 - 10^-4)*
NIntegrate[
1/u^2*Sin[u/2]^2/(1 + 10^-7*I*Sqrt[u^2 - 0.006^2]), {u,
0, \[Infinity]}];


2- The rest elements of the first row are given by:

f[n_] := 4/\[Pi] (1 - 10^-4)*(-1)^(n + 1)*NIntegrate[
1/(1 + 10^-7*I*Sqrt[u^2 - 0.006^2])*Sin[u/2]^2/(
u^2 - 4*n^2*\[Pi]^2), {u, 0, \[Infinity]}];


3- Diagonal elements -except first element; say x[[1,1]] that is defined in 1- are given by:

g[m_] := 1 - 8/\[Pi] (1 - 10^-4)*NIntegrate[
u^2/(1 + 10^-7*I*Sqrt[u^2 - 0.006^2]) Sin[
u/2]^2/(u^2 - 4*m^2*\[Pi]^2)^2, {u, 0, \[Infinity]}];


4- The rest elements X[[n,m]] are given by:

fnm[n_, m_] := 8/\[Pi] (1 - 10^-4)*(-1)^(n + m + 1)*NIntegrate[
u^2/(1 + 10^-7*I*Sqrt[u^2 - 0.006^2]) Sin[
u/2]^2/((u^2 - 4*n^2*\[Pi]^2)*(u^2 - 4*m^2*\[Pi]^2)), {u,
0, \[Infinity]}];


My question is could you please tell me what is the simplest way with mathematica I can use to construct arbitrary n*m X matrix may be 100*100 matrix for example.

One of many possible ways (and certainly not an optimal one):

X = ConstantArray[0., {n, m}];
X[[1, 2 ;;]] = Array[f, {m - 1}, 2];
X[[2 ;;]] = Array[fnm, {n - 1, m}, {2, 1}];
LinearAlgebraSetMatrixDiagonal[X, Join[{c0}, Array[g, {Min[n, m] - 1}, 2]]];

fn[x_, y_] := Which[
x == 1 && y == 1, c0,
x == 1, f[y],
x == y, g[y],
True, fnm[x, y]
]
result=Array[fn, {100,100}]


One possibility is to redefine your function so that it is consistently named, and then use the Outer product. Withf[n,m] as defined, let f[1,m] be your current f[m], let f[m,m] be your g[m], and set f[1,1]=c0. Then you can define the matrix as:

Outer[f, Range[n], Range[m]]


For an easy visualizable example:

Clear[f]; f[1, m_] := f[m]; f[m_, m_] := g[m]; f[1, 1] = c0;
n = 4; m = 6; Outer[f, Range[n], Range[m]] // MatrixForm
` • All of you, Thank you very much. I tried all the three suggested ways. In fact I found that the bill s's way is the simplest one!!! Many thanks bill s! Oct 18, 2017 at 13:47
• The usual thing to do with answers you like is to upvote them. Then wait a few days, and if no better answers appear, to accept them. Oct 18, 2017 at 14:46
• Thank you bill for your advise. Oct 18, 2017 at 14:50