对于第一年级大学科学学生的数学课程,我们(助教)需要使用Matlab为pc会话准备材料。所有电脑都配有Matlab版本R2016b。在Matlab中绘制分段函数的不一致性
我们正在研究前几年的一些材料。在描述分段函数的章节中,我们发现了Matlab处理if
条件的一些不一致之处。
我想知道为什么会发生这些事情,所以我们为学生在这些课程中遇到的任何困难做好准备。练习的目标是通过绘制两个分段函数绘制一个房子在绘图窗口中。
第一功能,f1(x)
,计算结果为x+2
当x <= 0
和计算结果为-x+2
否则。要求学生在Matlab中使用if
/else
构造实现该功能。我们的实现是
function y = f1(x)
if x < 0
y = x + 2;
else
y = -x + 2;
end
end
第二个函数,f2(x)
,是间隔的特性函数[-1,1]。还应该使用if
/else
条件来实施。我们的实现是
function y = f2(x)
if x < -1
y = 0;
elseif x > 1
y = 0;
else
y = 1;
end
end
最后,绘图代码应该使用fplot
区间[-1.5, 1.5]
吸取两者的功能,像这样
fplot(@f1, [-1.5, 1.5])
hold on
fplot(@f2, [-1.5, 1.5])
功能f2
是没有问题的绘制。 然而,在绘制f1
时,似乎Matlab决定了if子句的第一个分支并不重要,因为只有线-x+2
绘制为。
由于f1(-1)
正确评估为1,但似乎f1([-1, 1])
评估为[3, 1]
似乎向量化问题是我们问题的核心。然后,f2似乎正确评估没有任何问题。
当我们将-x + 2
中的else
部分f1
更改为-x^2 + 2
时,情况会变得更加奇怪。通过这个定义,两个函数都能够正确绘图,并且Matlab似乎对处理条件没有任何问题。
- 怎么回事?
- 有没有一种方法可以编辑这些练习,使得它从不会造成任何问题,但仍然可以让学生对Matlab有第一次使用体验?
如果(logical_vector)取决于所有元素的分支,所有元素。它与if(all(logical_vector))相同。试试以下内容:'f1(1)' 'f1(-1)' 'f1([ - 1,1])' 'f1([1,-1])' 'f1([1, - 1,1])' 至于你的问题 - 在2015a它绘制房子很好,所以我不能帮你在这里。 –