MATLAB Help - Aligning Two Matrices

  • Context: MATLAB 
  • Thread starter Thread starter Snk_majin
  • Start date Start date
  • Tags Tags
    alignment Matlab
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
2 replies · 7K views
Snk_majin
Messages
2
Reaction score
0
Hi all

I'm new to MATLAB and am having trouble with a certain function, called score. I've looked at this for a while now and can't see where I am going wrong?!

The function scores the similarities of two matrices,
1 for a match
-1 for a non match

the code:


function s = Score(x,y,d)

% Score matirx for x and y in {1,2,3,4}
% Mismatch penalty = d

s = ((x==1)'*(y==1)+(x==2)'*(y==2)+(x==3)'*(y==3)...
+(x==4)'*(y==4))*(1+d) - d;

input:

x = ceil(4*rand(1,5))
y = ceil(4*rand(1,7))
[0 y; x' Score(x,y,1)]

..and that error...

? Error using ==> _times_transpose
Function '*' is not defined for values of class 'logical'.

Error in ==> C:\MATLAB6p5p1\work\Score.m
On line 6 ==> s = ((x==1)'*(y==1)+(x==2)'*(y==2)+(x==3)'*(y==3)...


.. i;m not sure what it is?! I'm sure its something dumb.

Can you suggest a learning resource, my curernt approach is to go through online tutorials.

Thanks for your time

Snk_majin
 
Physics news on Phys.org
On would need to use boolean operators instead, which here would be and (&&):
Matlab:
(x==1)' && (y==1)
However, that won't help with the summation. The easiest is to convert the logical result to an integer instead:
Matlab:
s = (int8(x==1)'*int8(y==1)+int8(x==2)'*int8(y==2)+int8(x==3)'*int8(y==3)...
+int8(x==4)'*int8(y==4))*(1+d) - d;