2015-11-06 118 views
0

我有一個關於matlab代碼的問題。我有一個特定的一個變量函數,我想在這個函數中將一個向量或數組賦值爲一個x值。但我沒有達到成功。 我的代碼的一部分是在低於:在matlab中使用函數的矢量

a=-5; b=10; n=20; %[a,b] interval range and n is number of interval 
sz = (b-a)/n; %interval size 
t=1; %iteration number 
for i=1:n 
I(i,:,t) = [a+(i-1)*sz a+i*sz]; %interval 
x(i,:,t) = a+(i-0.5)*sz; %midpoint of interval 
end 
f= x.^2-3.*x+5; %my sample function 
for i=1:n 
     if i==1 
      j=i+1; 
      neigbor(i,:,t) = I(j,:,t); %neigbor of interval I1's 
      h_f(i,:,t) =abs(f(x(i,:,t))-f(x(j,:,t))); %heuristic value 

      prob(i,:,t)=(ph(j,:,t).*h_f(i,:,t))./(ph(j,:,t).*h_f(i,:,t)); %probability 
... 

其他如果條件跟隨此代碼,但我檢查這在下面樣品部分i和j值,它給出錯誤是這樣的:「下標索引必須是真正的正整數或邏輯「。

h_f(i,:,t) =abs(f(x(i,:,t))-f(x(j,:,t))); 

我不知道什麼?我的錯誤是什麼?你能提出什麼建議嗎?如果你需要完整的代碼,我可以發佈。

編輯:其實這個函數f通過使用自己返回值。但它在註釋h_f(i,:,t)= abs((f(x(i,:,t)-x(j,:,t))中不返回值

解決方案編輯:單獨的函數m文件,並調用主函數。不需要在f中寫入x數組。

+1

更改您的變量名稱,使其更易於閱讀。 – LearningProcess

回答

0

在Matlab中,需要在單獨的.m文件中聲明函數,我創建了一個單獨的文件「fm」插入下面的代碼:

function return_val = f(x) 

return_val = x.^2-3.*x+5; %my sample function 

end 

然後,在你的主文件,你可以調用這個函數如下:

a=-5; b=10; n=20; %[a,b] interval range and n is number of interval 
sz = (b-a)/n; %interval size 
t=1; %iteration number 
for i=1:n 
    I(i,:,t) = [a+(i-1)*sz a+i*sz]; %interval 
    x(i,:,t) = a+(i-0.5)*sz; %midpoint of interval 
end 

f = f(x) 

希望這會有所幫助。

+0

謝謝,但仍然是同樣的問題。我認爲函數不會帶負x值,也不會返回任何值。 (x(1,:,t)),其中x(1,:,t)= -4.625。我有這個負面的價值... – oztaymor

+0

好吧,我現在明白了。如果我像你說的那樣添加一個函數,我只在f函數中刪除x數組。不是f(x(i,:,t)),只有f(i,:,t)。謝謝! – oztaymor

0

如發佈的那樣,您可以創建f作爲文件中的函數,但您也可以使用句柄內聯該函數。這是做如下:

f = @(x) x.^2 - 3.*x + 5; 

f是功能手柄x作爲輸入,在這裏看到的更多信息:http://www.mathworks.com/help/matlab/matlab_prog/creating-a-function-handle.html

然後按照您的預期使用這個新的f

>> f(2) 

ans = 

    3 

>> f(5) 

ans = 

    15 

>> f(1:3) 

ans = 

    3  3  5 

>> f(4:10) 

ans = 

    9 15 23 33 45 59 75 
+0

它也很有用,謝謝。 – oztaymor

+0

不錯!不知道你能做到這一點:) – Pablo