Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab中循环与矢量化的比较 让我们考虑下面的脉冲函数< /P>代码 function y=impulse_function(n); y=0; if n==0 y=1; end end_Matlab_Loops_Vectorization - Fatal编程技术网

matlab中循环与矢量化的比较 让我们考虑下面的脉冲函数< /P>代码 function y=impulse_function(n); y=0; if n==0 y=1; end end

matlab中循环与矢量化的比较 让我们考虑下面的脉冲函数< /P>代码 function y=impulse_function(n); y=0; if n==0 y=1; end end,matlab,loops,vectorization,Matlab,Loops,Vectorization,此代码 >> n=-2:2; >> i=1:length(n); >> f(i)=impulse_function(n(i)); >> >> n=-2:2; >> for i=1:length(n); f(i)=impulse_function(n(i)); end >> f f = 0 0 1 0 0 返回结果 f f = 0 0

此代码

>> n=-2:2;
>> i=1:length(n);
>> f(i)=impulse_function(n(i));
>> 
>> n=-2:2;
>> for i=1:length(n);
f(i)=impulse_function(n(i));
end
>> f

f =

     0     0     1     0     0
返回结果

 f

f =

     0     0     0     0     0
而这个代码

>> n=-2:2;
>> for i=1:length(n);
f(i)=impulse_function(n(i));
end
>> f

f =

     0     0     1     0     0

在两种情况下,i都是1 2 3 4 5,有什么不同?

在第一种情况下,您将数组与值0进行比较。这将给出结果[0 1 0 0],这不是简单的真或假。因此,语句
y=0将不会执行,f将为[0],如图所示

在第二步中,您将逐个值遍历数组值并将其传递给函数。由于数组包含值0,那么您将从f的打印输出中的函数中得到1(或[0 0 1 0 0],这是一个脉冲)

您需要修改函数以获取数组输入

也许这个例子将进一步澄清这个问题:
您的函数未定义为处理向量输入

按如下方式修改impluse函数:

function y=impulse_function(n)
    [a b]=size(n);
    y=zeros(a,b);
    y(n==0)=1;
end

在脉冲函数的定义中,将整个数组与零进行比较,返回值仅为一个数字而不是一个向量。

您可以简单地将脉冲函数定义为此函数-

impulse_function = @(n) (1:numel(n)).*n==0
样本运行-

>> n = -6:4
n =
    -6    -5    -4    -3    -2    -1     0     1     2     3     4
>> out = impulse_function(n)
out =
     0     0     0     0     0     0     1     0     0     0     0
绘图代码-

plot(n,out,'o')    %// data points
hold on
line([0 0],[1 0])  %// impulse point
绘图结果-


您可以编写更简单的函数:

function y=impulse_function(n);
y = n==0;

请注意,这将返回
y
作为类型逻辑数组,但这不应影响以后的数值计算

等等,请区分第一个和第二个是什么?在第一种情况下,我也在重复使用i is not?我已经更改了我的答案,以清楚地解释问题,而其他两个答案旨在提供解决方案,但没有真正解释问题。我相信我的回答实际上回答了你的问题:哪一个是“有什么不同?”