From: Igor on
Hello!

There are:
A n*n matrix
x n*1 matrix==column
b n*1 matrix==column
and the well known equation
A.x==b

I know columns x and b
I want Mathematica to derive matrix A

Of course, generally, this is a complicated problem, but
in my case all values of matrix A are small (less than 20
in absolute value) integers, because I am interested in a
very special case.(I am looking for the matrix of discretized
Laplacian in D={1,2,3,4} dimensions)

As an example of my problem
for (D=2) n=2 we have:
x= {
{f[1, 1]},
{f[2, 1]},
{f[1, 2]},
{f[2, 2]}
}
b=
{
{-4 f[1, 1] + f[1, 2] + f[2, 1]},
{f[1, 1] - 4 f[2, 1] + f[2, 2]},
{f[1, 1] - 4 f[1, 2] + f[2, 2]},
{f[1, 2] + f[2, 1] - 4 f[2, 2]}
}
and the solution (the matrix A) is
-4 1 1 0
1 -4 0 1
1 0 -4 1
0 1 1 -4

So, I would like Mathematica to do similar
derivation of matrix A for me.

I have the following questions:

1. Is there any method in Mathematica to find A from
A.x==b if I know that this problem is well defined,
I know x, b and that A elements have only integer values?

2. An obvious (or obviously mad :-) ) solution of the problem
would be to perform an exhaustive search. I mean to
ran n*n loops for all elements of matrix A from -20 to 20
till A.x==b. But, I don't know how to perform this in
Mathematica (as the number of loops is n*n and thus
depend on n, that I want to vary).

3. If the matrix A of the discretized Laplacian is
written somewhere for cases D==3 and D==4,
please, send me a link.

Thank you very much for your attention!
All suggestions are welcome!

From: Sseziwa Mukasa on
On Jun 3, 2010, at 5:39 AM, Igor wrote:

> Hello!
>
> There are:
> A n*n matrix
> x n*1 matrix====column
> b n*1 matrix====column
> and the well known equation
> A.x====b
>
> I know columns x and b
> I want Mathematica to derive matrix A
>
> Of course, generally, this is a complicated problem, but
> in my case all values of matrix A are small (less than 20
> in absolute value) integers, because I am interested in a
> very special case.(I am looking for the matrix of discretized
> Laplacian in D=={1,2,3,4} dimensions)
>
> As an example of my problem
> for (D==2) n==2 we have:
> x== {
> {f[1, 1]},
> {f[2, 1]},
> {f[1, 2]},
> {f[2, 2]}
> }
> b==
> {
> {-4 f[1, 1] + f[1, 2] + f[2, 1]},
> {f[1, 1] - 4 f[2, 1] + f[2, 2]},
> {f[1, 1] - 4 f[1, 2] + f[2, 2]},
> {f[1, 2] + f[2, 1] - 4 f[2, 2]}
> }
> and the solution (the matrix A) is
> -4 1 1 0
> 1 -4 0 1
> 1 0 -4 1
> 0 1 1 -4
>
> So, I would like Mathematica to do similar
> derivation of matrix A for me.
>
> I have the following questions:
>
> 1. Is there any method in Mathematica to find A from
> A.x====b if I know that this problem is well defined,
> I know x, b and that A elements have only integer values?

I don't know of anything specifically focussed on your problem, but in the example you've given you can determine A using Coefficient:

Table[Coefficient[b[[r]],x[[c,1]]],{r,Length[b]},{c,Length[x]}]

This of course will only work if the elements of x are symbols.

>
> 2. An obvious (or obviously mad :-) ) solution of the problem
> would be to perform an exhaustive search. I mean to
> ran n*n loops for all elements of matrix A from -20 to 20
> till A.x====b. But, I don't know how to perform this in
> Mathematica (as the number of loops is n*n and thus
> depend on n, that I want to vary).

You could try using Minimize

Module[{a},Minimize[Prepend[Flatten[Table[Abs[a[r,c]]<=,{r,Length[b]},{c,Length[x]}]],Array[a[##]&,{Length[b],Length[x]}].x],Flatten[Table[a[r,c],{r,Length[b]},{c,Length[x]}]],Integers]

> Thank you very much for your attention!
> All suggestions are welcome!

I couldn't test my suggested expressions because my Mathematica kernel is busy, but I think you should get the gist of what I was trying to do.

Best Regards,
Ssezi