2015-11-06 97 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