【发布时间】:2015-11-04 11:11:29
【问题描述】:
我正在尝试编写一个可以是标量和向量的函数。这个函数应该处理标量、列向量和行向量。我的想法是我尝试使用 for 循环,但我的尝试没有成功。
function f=funk1(x);
for i =1:length(x)
f=exp(-3*x(i).^2)-log(x(i)+0.6)+1/(x(i)-6);
end
end
这仅返回向量的最后一个值(在我的函数中),但我希望它返回向量中的每个值。
【问题讨论】:
我正在尝试编写一个可以是标量和向量的函数。这个函数应该处理标量、列向量和行向量。我的想法是我尝试使用 for 循环,但我的尝试没有成功。
function f=funk1(x);
for i =1:length(x)
f=exp(-3*x(i).^2)-log(x(i)+0.6)+1/(x(i)-6);
end
end
这仅返回向量的最后一个值(在我的函数中),但我希望它返回向量中的每个值。
【问题讨论】:
对于这个特定的功能,您可以vectorize,也就是说,在没有循环的情况下一次按元素进行所有计算。在数组之间应用时,您只需在 *、^、/ 运算符之前添加一个点(log 和 exp 已经是逐元素的):
function f = funk1(x);
f = exp(-3*x.^2)-log(x+0.6)+1./(x-6);
end
【讨论】:
您错过了 f 的索引。这样做;
function f=funk1(x);
for i =1:length(x)
f(i)=exp(-3*x(i).^2)-log(x(i)+0.6)+1/(x(i)-6);
end
end
【讨论】: