對於第一年級大學科學學生的數學課程,我們(助教)需要使用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它繪製房子很好,所以我不能幫你在這裏。 –