我有关于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数组。
答案 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