Ben b
her satır ile a
karşılaştırarak, matrisin b
veya olmayan bir satır dizisi a
olmadığını kontrol etmek için Matlab kendi versiyonunu ismember
(find_element
) yazın. a
'daki her öğe b
'daki bir satırın her öğesine eşittir (mutlak hata Tol
'dan küçükse), ardından mantıksal değer 1'i ve satır numarasını döndürür. Benim kod test ederken Matlab karşılaştırmasında bir hata mı?
B
b
ikinci satırı olan)
B=[-1 0]
ile
a=1.0e-11*[0.9063 0.0838]
karşılaştırdığımızda Matlab
t=[1 1]
dönecektir bulmak. Aslında,
error=[1.0000 0.0000]
numaralı doğru mutlak hata verir ve açıkça
error(1)
,
Tol=1e-6
'dan daha büyüktür. Matlab'da bir hata buldum mu? Yoksa kodumda bir hata var mı?
function [Lia,Locb] = find_element(a,b)
%decide whether a is in b or not(compare each row); if in, return row number
%INPUT:
%a: salar or row array
%b: column array or matrix
%OUTPUT:
%Lia: 1 if a is in b, 0 if not
%Locb: location of a in b, row number if b is a matrix
Tol = 1e-6; %set tolerance when compare elements
Lia = 0;%initialization
Locb = 0;
t = zeros(size(a));%compare result of each element,logical array
for i = 1:size(b,1) %loop through each row
for j = 1:size(b,2) %compare each element in each row
if abs(a(j)-b(i,j))<Tol
t(j) = 1;
end
end
if t %all 1's
Lia = 1;%find a in b
Locb = i;%return row number
%%%%%%%%%%%%%%%%%%%%%%%%
%test outputs
a
B=b(i,:)
error = abs(a-b(i,:))
t
%%%%%%%%%%%%%%%%%%%%%%%%
break
end
end
Test kodudur:
a = [9.06319429228031e-12 8.37879678833309e-13];
b = [0 1;-1 0;1 0;0 1];
[Lia Locb] = find_element(a,b)
çıktısı:
a =
1.0e-11 *
0.9063 0.0838
B =
-1 0
error =
1.0000 0.0000
t =
1 1
Lia =
1
Locb =
2
Sadece ismember' sorunuzu ancak 'anlamak gerçekten zor sen' 'rows'' girişi belirtirseniz beklediğiniz şekilde çalışır yani belki bu kaynağı bu karışıklığın? Ayrıca, sorunuzun geri kalanını biraz daha açık olacak şekilde yeniden yazmayı deneyebilir ve testlerinizi sorgunuzda geçerli bir MATLAB kodu olarak gönderebilirsiniz. Bu şekilde google drive – Suever
adresinden erişim talep etmek zorunda kalmadan kendimizi test edebiliriz bu matlab kodu nedir? Bir yorum karakteri olarak '#' nasıl kullanıyorsunuz? – Alex
Birden çok satır içeren bir matrise karşı test mi yapıyorsunuz? Veya B = [-1 0]? –