[運算] 分段函數

看板MATLAB作者 ((abc0229))時間9年前 (2015/05/14 12:20), 9年前編輯推噓1(107)
留言8則, 3人參與, 最新討論串1/1
我想做一個分段函數 指令如下 x=linspace(0,1,21); if 0<= x <=1/2; f=2*x; else f=2-2*x end 結果出來的值是 2 , 1.9 , 1.8 ,...., 0.1 , 0 意思是他只執行了else後面的函數 所以想請問各位大大我code問題出在哪? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.212.224 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1431577214.A.978.html

05/14 15:17, , 1F
X 從 0 到 21, 你又只能讓他在 x < 0.5 時執行前面那
05/14 15:17, 1F

05/14 15:17, , 2F
一行,當然不行。
05/14 15:17, 2F

05/14 15:18, , 3F
你可以用中文講你要幹嘛嗎?
05/14 15:18, 3F

05/14 15:19, , 4F
因為x是向量,你不能放在if裡面
05/14 15:19, 4F

05/14 15:20, , 5F
你要的應該是 f=2*x; f(x>0.5) = 2-f(x>0.5);
05/14 15:20, 5F
感謝大大的建議,我要做一個分段函數f(x)=2*x as 0<= x <= 1/2,f(x)=2-2*x as 1/2<= x <=1 我修改了一下程式 x=linspace(0,1,21); for i=1:21 if 0<=x(i) & x(i)<=1/2; f(i)=2*x(i); else f(i)=2-2*x(i) end end 之後有執行出想要的答案,感謝幫忙^^ ※ 編輯: abc0229 (36.231.212.224), 05/14/2015 15:43:40

05/14 15:45, , 6F
迴圈雖然可以達到目標,還是建議用向量運算比較好
05/14 15:45, 6F

05/14 15:46, , 7F
無論是效率還是簡潔程度、易讀性等
05/14 15:46, 7F

05/14 15:50, , 8F
好喔~那我試著不用迴圈寫寫看,感謝建議^^
05/14 15:50, 8F
文章代碼(AID): #1LL29-bu (MATLAB)