[問題] function不能用x=linspace執行已回收

看板MATLAB作者 (追求更高處!)時間16年前 (2009/07/17 15:05), 編輯推噓4(4011)
留言15則, 5人參與, 最新討論串1/1
小弟寫了一個Voigt函數 Gaussian(x,sigma)和Lorentzian(x,r)的convolution sigma和r為了簡化,就當Voigt是X的函數就好。X在區間-10~10之間 以下是程式碼 % function V=Voigt(X) x=linspace(-10,10,101); % -10,-9.9,-9.8.................10 G=Gaussian(x); L=Lorentzian(x); Y=conv(G,L); % 作完convolution會出現201個元素 index=(X+10.1).*10; % 這是為了找X是對應到Y的第幾個元素 N=fix(index); % 再確保是整數而已 V=Y(N); 說明:這檔案不過是做出一個Y的陣列,讓輸入的X對應到的值就好。 (黃色的字,影響準度) 問題:在命令視窗呼叫 Voigt(1.1)好了~會出現一個數值 但是如果一次想跑很多個,X1=linspace(-10,10,101);Y1=Voigt(X1);會出現 ??? Subscript indices must either be real positive integers or logicals. 可是不是已經把index用fix變成整數了嗎?而且index運算完一定是正整數阿 請問各位大大~為何Voigt(X)跑一個可以,跑很多個X=linspace(a,b,step)卻不可以呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.222.184 ※ 編輯: devil0631 來自: 140.115.222.184 (07/17 15:09)

07/17 15:58, , 1F
你的X1出現負數了,linspace(-10,10,101),起點是-10
07/17 15:58, 1F

07/17 15:59, , 2F
所以在Y1=Voigt(X1)才會出現那個錯誤訊息
07/17 15:59, 2F

07/17 16:00, , 3F
你貼程式碼linspace那行後面註解都寫從-10開始跑了
07/17 16:00, 3F

07/17 16:07, , 4F
linspace不能有負區間阿=..=事嗎?小弟是半年的新手!感謝
07/17 16:07, 4F

07/17 16:07, , 5F
G大~我想一下!
07/17 16:07, 5F

07/17 16:09, , 6F
不對阿~好像可以@@
07/17 16:09, 6F

07/17 16:11, , 7F
-10丟進去 index=1,找Y(1)好像沒問題
07/17 16:11, 7F

07/17 16:29, , 8F
input 大寫X 但是裡面用小寫?
07/17 16:29, 8F

07/17 16:41, , 9F
小寫在做出Y的陣列~大寫輸入會對應到某個index!找到對應
07/17 16:41, 9F

07/17 16:43, , 10F
Y(index)的值~ 會這麼麻煩是因為conv的關係!
07/17 16:43, 10F

07/17 16:46, , 11F
問題在你的X1=-10的時候 fix完會是0 MATLAB最少是1
07/17 16:46, 11F

07/17 16:50, , 12F
-10丟進去index=1,N=1 ???沒錯阿~~我看看嘿~感謝二位大
07/17 16:50, 12F

07/17 16:51, , 13F
浮點數問題,你看到的1不是1,fix完後變成0
07/17 16:51, 13F

07/17 17:00, , 14F
感謝樓上大~我改一下看看@@
07/17 17:00, 14F

07/17 17:08, , 15F
感謝各位高手~這BUG好難De~真的靠經驗了~再次謝謝
07/17 17:08, 15F
文章代碼(AID): #1AO2AgGO (MATLAB)
文章代碼(AID): #1AO2AgGO (MATLAB)