MATLAB Matlab help - alignment

Snk_majin

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 im going wrong?!

The fucntion 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.

Snk_majin

Related MATLAB, Maple, Mathematica, LaTeX, Etc News on Phys.org

Wrichik Basu

Gold Member
2018 Award
Each of the expressions x == 1 and so on, return a boolean value, either true or false. The * operator cannot be used for boolean expressions.

DrClaude

Mentor
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;

"Matlab help - alignment"

Physics Forums Values

We Value Quality
• Topics based on mainstream science
• Proper English grammar and spelling
We Value Civility
• Positive and compassionate attitudes
• Patience while debating
We Value Productivity
• Disciplined to remain on-topic
• Recognition of own weaknesses
• Solo and co-op problem solving