The following code works fine with the first set of input tested however shows error for the second set. I am doing this on Cody. Could anyone tell me what's wrong?
function X = rescale_scores(X)
A= 60:100;
B= rescale(A,0,4);
for c=1:40;
for d=1:size(X,1);
if X(d,length(X))==A(c);
X(d,length(X))=B(c);
end
end
end
X
end

 Akzeptierte Antwort

Ameer Hamza
Ameer Hamza am 7 Mai 2020

2 Stimmen

This can be solved using a one-liner
function X = rescale_scores(X)
X(:,end) = interp1([60 100], [0 4], X(:,end));
end

4 Kommentare

Tavish Pattanayak
Tavish Pattanayak am 8 Mai 2020
Yeah it worked. Thanks!
However could you let me know what was the issue with the code I wrote?
First, In your code, you used length(X) in
if X(d,length(X))==A(c);
X(d,length(X))=B(c);
end
length() is not correct here. Either use size(X,2), or 'end'.
Also, you used
A = 60:100
which will only work if grades are integers. If they have a decimal part, then it will not equal to any element in A and therefore the condition
X(d,length(X))==A(c)
never becomes true.
Tavish Pattanayak
Tavish Pattanayak am 8 Mai 2020
Thank you!
I used the following code. But it doesn't work on Test 1. It shows Assertion failed.
Could anyone help me with this.
function X = rescale_scores(X)
X(:,end)=(X(:,end)-60)/10;
end

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Mathematics and Optimization finden Sie in Hilfe-Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by