Problem with unique command

2 ビュー (過去 30 日間)
Davoud
Davoud 2019 年 3 月 10 日
コメント済み: Raghunandan V 2019 年 3 月 12 日
Hello guys. I have a problem with unique command in the following simplified code. The problems are in the 4th iteration as the values of G aren't correct, IC values aren't the repetitions of IA and the resulted Good_path1 isn't a 16*4 matrix. However, the problems are resolved if the position of loops of alpha and beta is changed with the loop of s. Sorry for a lenghy code. I really appreciated if someone help me to solve the problem.
n_c_1=1;
thr_Wght=1e-50;
M=2;
TGponts_1=4;
% &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
K1_1 =[0.0552 - 0.1423i, -0.0145 - 0.1465i, -0.0652 - 0.1285i];
K01_1 = 0.0245 - 0.1175i;
% &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Good_path=[0 0 0 0; 0 0 1 0; 1 0 0 0; 1 0 1 0];
R2=[0.9983 + 0.0000i 0.0047 + 0.0399i 0.0047 - 0.0400i 0.0017 + 0.0000i];
n_c1_1=n_c_1+1; n_c2_1=2*n_c_1;
L_1=2*(n_c1_1);
for n=3:TGponts_1
if n>n_c1_1
Good_path(:,n_c1_1)=[];
Good_path(:,L_1-1)=[];
% Good_path
[Dis_Good_path,IA,IC]=unique(Good_path,'rows','stable');
Dis_R2=zeros(length(IA),1);
for i=1:length(IA)
G=find(IC==IA(i));
G
Dis_R2(i)=sum(R2(G));
end
Good_path=Dis_Good_path
R2=Dis_R2
end
h=size(Good_path);
h1=h(1);
q=0;
nn_1=n-1; nn_2=2*n-2;
s1=M.^2*h1;
if n<=n_c1_1
s2=2*n;
Good_path1=zeros(s1,s2);
else
Good_path1=zeros(s1,L_1);
end
R=zeros(1,s1);
for alpha=0:1
for beta=0:1
for s=1:h1
if (alpha==0 && beta==0) || (alpha==1 && beta==1)
T3=1;
else
Self_int=-(alpha-beta).*(K01_1.*alpha-conj(K01_1).*beta);
%%&&&&&&&&&&&&&&&&&&&&&&&
if n<=n_c1_1
Sum_nlocl_int=0;
for m=n-1:1
a_prim=Good_path(s,m);
b_prim=Good_path(s,n-1+m);
nlocl_int=(K1_1(m).*a_prim-conj(K1_1(m)).*b_prim);
Sum_nlocl_int=Sum_nlocl_int+nlocl_int;
end
else
Sum_nlocl_int=0;
for mm=n_c_1:1
a_prim=Good_path(s,mm);
b_prim=Good_path(s,n_c_1+mm);
nlocl_int=(K1_1(mm).*a_prim-conj(K1_1(mm)).*b_prim);
Sum_nlocl_int=Sum_nlocl_int+nlocl_int;
end
end
Sum_nlocl_int=-(alpha-beta).*Sum_nlocl_int;
T3=exp(Self_int+Sum_nlocl_int);
end
R3=T3*R2(s);
%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
p=abs(R3);
if p>thr_Wght
q=q+1;
if n<=n_c1_1
Good_path1(q,:)=[alpha,Good_path(s,1:nn_1),beta,Good_path(s,n:nn_2)];
else
Good_path1(q,:)=[alpha,Good_path(s,1:n_c_1),beta,Good_path(s,n_c1_1:n_c2_1)];
end
R(q)=R3;
end
end
end
end
%&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Good_path1(q+1:s1,:)=[];
R(q+1:s1)=[];
Good_path=Good_path1
R2=R;
end
  2 件のコメント
Geoff Hayes
Geoff Hayes 2019 年 3 月 10 日
Davoud - please clarify what you mean by in the 4th iteration as the values of G aren't correct? What are you expecting the values to be?
Davoud
Davoud 2019 年 3 月 11 日
編集済み: Davoud 2019 年 3 月 11 日
Thank you Geoff. I mean at n=TGponts_1=4, there are four Gs which their values should be 1 2 3 4, 5 6 7 8, 9 10 11 12, 13 14 15 16, because after removing columns of 2 and 4 of Good_path matrix, the first four rows are the same, the fifth to eighth, the ninth to twelfth, and thirteenth to sixteenth rows are the same, respectively.. Here is the shown result
Good_path =
0 0 0 0
0 0 0 1
0 1 0 0
0 1 0 1
0 0 1 0
0 0 1 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1 1 0 0
1 1 0 1
1 0 1 0
1 0 1 1
1 1 1 0
1 1 1 1
G =
1
2
3
4
G =
0×1 empty double column vector
G =
0×1 empty double column vector
G =
0×1 empty double column vector
In the present case, Dis_R2 is correct only for first four rows but not for the 2nd, third, and fourth four rows. In this case
IA =
1
5
9
13
Therefore, IC should contains 1, 5, 9, and 13 but it is
IC =
1
1
1
1
2
2
2
2
3
3
3
3
4
4
4
4

サインインしてコメントする。

採用された回答

Raghunandan V
Raghunandan V 2019 年 3 月 11 日
Hi,
I think there is a confusion between the functions of IA and IC.
lets consider an example
A = [9 2 9 5];
[C, ia, ic] = unique(A,'stable')
the solution is
C = 1×3
9 2 5 (this is the matrix output expected)
ia = 3×1
1 (here 1 refers to the index of the matrix A which is placed in matrix C in index 1)
2 (here 2 refers to the index of the matrix A which is placed in matrix C in index 2)
4 (here 4 refers to the index of the matrix A which is placed in matrix C in index 3)
ic = 4×1
1 (here 1 says that the 1st element of the matrix A is the first element of Matrix C)
2 (here 2 says that the 2nd element of the matrix A is the second element of Matrix C)
1 (here 1 says that the 3rd element of the matrix A is the first element of Matrix C)
3 (here 3 says that the 4th element of the matrix A is the third element of Matrix C)
I am not able to understand what you are doing with the code. The code is very confusing. Please add some comments such that other people can understand.
  4 件のコメント
Davoud
Davoud 2019 年 3 月 12 日
In fact, max(IC) and length(IA) are the same. right?
Raghunandan V
Raghunandan V 2019 年 3 月 12 日
Yes

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeNumeric Types についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by