How can I solve this linear System?

Lets say I have
A * x = b
n*n n*1 n*1
 Unknown   known    known
A is unknown but it is known to be a symmetric Toeplitz matrix. eg:
[ 5 2 0 7 ;
2 5 2 0 ;
0 2 5 2 ;
7 0 2 5 ]
How Can I find A?
Thanks in advance.
Saeed

1 Kommentar

Saeed
Saeed am 22 Apr. 2012
Is there a Matlab function that can perform this task?

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 22 Apr. 2012

2 Stimmen

eg:
x = rand(4,1);
b = rand(4,1);
solution
nn = 1:numel(x);
n = nn(end);
idx = abs(bsxfun(@minus,nn,nn')) + 1;% OR idx = toeplitz(nn);
id1 = arrayfun(@(ii)accumarray((idx(ii,:))',nn',[4 1],@(x){x}),nn,'un',0);
id1 = [id1{:}].';
Xmtx = cellfun(@(z)sum(x(z)),id1);
Av = Xmtx\b;
A = Av(idx);
check
all(abs(A*x-b)<100*eps)

2 Kommentare

Teja Muppirala
Teja Muppirala am 22 Apr. 2012
Wow.
Saeed
Saeed am 23 Apr. 2012
Thanks

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (3)

Richard Brown
Richard Brown am 23 Apr. 2012

2 Stimmen

And another way (which could be chained into a very long one-liner). First, assuming you have the following test data:
% Test data
n = 4;
x = rand(n, 1);
b = rand(n, 1);
It's only a couple of lines:
B = toeplitz(x,x(1)*eye(1,n)) + fliplr(toeplitz(x(end)*eye(1,n), flipud(x)));
B(:,1) = 0.5 * B(:, 1);
A = toeplitz(B \ b);
Jan
Jan am 22 Apr. 2012

1 Stimme

At first you can convert this into a linear system:
A = [a, b, c, d; ...
b, a, b, c; ...
c, b, a, b; ...
d, c, b, a];
Then multiply this with your known x and b to obtain a standard linear problem with the unknowns [a,b,c,d] in a vector.

3 Kommentare

Saeed
Saeed am 22 Apr. 2012
So I have no choice but use n syms?
Jan
Jan am 22 Apr. 2012
Instead of syms, you can write this down *on paper* and solve it manually at first. Then you will find some pattern, which allows to solve it programmatically also.
Saeed
Saeed am 22 Apr. 2012
Thanks I did this, and the pattern is quite interesting.

Melden Sie sich an, um zu kommentieren.

Saeed
Saeed am 23 Apr. 2012

0 Stimmen

B = tril(toeplitz(x))
A = toeplitz(B(:,1) + hankel(x))\b)

2 Kommentare

Andrei Bobrov
Andrei Bobrov am 23 Apr. 2012
A = toeplitz(bsxfun(@rdivide,tril(toeplitz(x))+hankel(x),eye(1,numel(x))+1)\b)
Richard Brown
Richard Brown am 23 Apr. 2012
punk :p

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by