matlab分段函数输出图像问题v=linspace(60,120,2);if 60

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/06 20:30:36
matlab分段函数输出图像问题v=linspace(60,120,2);if 60

matlab分段函数输出图像问题v=linspace(60,120,2);if 60
matlab分段函数输出图像问题
v=linspace(60,120,2);
if 60

matlab分段函数输出图像问题v=linspace(60,120,2);if 60

这小段代码问题太多了,简直把我能想到的错误都犯全了. -_-||||

 

1、linspace取点太少,只有两个点,无论怎么算都只能得到直线;

2、if语句不适合使用向量作为判断条件,因为只有向量所有元素都为真的时候才会执行;

3、关系运算不能连写,例如60<=v<100的含义并不是(60<=v)&&(v<100),而是(60<=v)<100,显然,表达式(60<=v)作为关系运算,得到的结果或0或1,肯定是小于100的,所以(60<=v)<100的结果为真,因而,会直接执行if的第一个分支,后面的都不可能被执行到.

4、MATLAB中有elseif关键词,尽管也可以用else if,但更推荐前者;

5、最后else的s算是什么?

 

正确写法之一(使用for循环)

v=linspace(60,120,61);
for i=1:length(v)
    if  60<=v(i) && v(i)<100 c(i)=24000.*v(i)./55;
    elseif v(i)==100 c(i)=24000.*v(i)./80;
    elseif 100<v(i) && v(i)<=120  c(i)=24000.*v(i)./105;
    else c(i)=-5;
    end
end
plot(v,c);

 

正确写法之二(使用向量运算)

v=linspace(60,120,61);
c=ones(size(v))*5;
c(60<=v&v<100)=24000*v(60<=v&v<100)/55;
c(v==100)=24000*v(v==100)/80;
c(100<v&v<=120)=24000*v(100<v&v<=120)/105;
plot(v,c);