Subroutine using if statement
1 次查看(过去 30 天)
显示 更早的评论
What I'm trying to do is to supply different value of constant k at different x intervals. However, it seems that my y(x==3) is not equal to y_actual.
x=0:20;
k=X(x); %Subroutine func
y=k*x;
y_actual = (5+2)*3 % what i wanted
y(x==3)
function k=X(x)
if (x>=2)
w=5;
else
w=4;
end
k=w+2;
end
2 个评论
SALAH ALRABEEI
2021-6-13
when u send X(x) which already conatins values <2, so the if will always go to the else (w=4)
采纳的回答
Star Strider
2021-6-13
I generally favour this sort of approach to such prolblems —
X = @(x) ((x>=2).*5 + (x<2).*4) + 2;
x = 0:20;
k = X(x);
y = k.*x;
figure
plot(x, y, '+-')
grid
xy = table(x(:),y(:), 'VariableNames',{'x','y'})
.
7 个评论
更多回答(1 个)
Image Analyst
2021-6-13
Lots of stuff wrong with this. For starters, you're passing in the whole x vector into the (poorly-named) X function yet your function seems to be expecting only a single value of x, not a whole multi-element vector. Take the semicolons off the ends of the lines and you'll see exactly what it's doing, which is exactly what you told it. You said x==3 which gives a 21 element logical vector with false everywhere except at index 4 (where x has the value 3) and it's true there.
ans =
1×21 logical array
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
So then y(4) = 18 which is why it's giving you 18.
I'm not sure if you expect the k to be a vector or a scalar so I'm not sure how to tell you to fix it.
x=0:20
k=X(x) % Subroutine function
y=k*x
y_actual = (5+2)*3 % what i wanted
y(x==3)
function k=X(x)
if (x>=2)
w=5;
else
w=4;
end
k=w+2;
end
x =
Columns 1 through 20
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Column 21
20
k =
6
y =
Columns 1 through 20
0 6 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108 114
Column 21
120
y_actual =
21
ans =
18
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Platform and License 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!