在matlab中使用函数的向量

时间:2015-11-06 18:51:45

标签: matlab

我有关于matlab代码的问题。我有一个特定的变量函数,我想在这个函数中指定一个向量或数组作为x值。但我没有取得成功。 我的代码的一部分在下面:

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值检查,它会给出如下错误:&#34;下标索引必须是正整数或逻辑。&#34; < / p>

 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文件后,调用main函数。不需要在f中编写x数组。

2 个答案:

答案 0 :(得分:0)

在Matlab中,您需要在单独的.m文件中声明函数。我创建了一个单独的文件“f.m”并插入了以下代码:

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)

希望这有帮助。

答案 1 :(得分: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