繁体   English   中英

为 sinc(x)=sin(x)/x 编写 MATLAB function

[英]Writing a MATLAB function for sinc(x)=sin(x)/x

我正在尝试编写 MATLAB function 来评估区间 [0,pi] 上的 sinc(x)=sin(x)/x。 我在下面包含了我的代码。 它被保存为文件 sinc3.m。

function y = sinc3(x)
if x<0
   disp('Outside specified interval of x');
   y=0;
elseif ((x>=0) && (x<=pi))
    sinc=@(x) sin(x)/x;
    y=sinc(x);
else
    disp('Outside specified interval of x');
   y=0;
end 
end 

显示错误消息“sinc3 需要更多输入 arguments 才能运行”。 我不明白这是什么意思。

Sinc Function 用于单个标量:

为运行标量输入而对 function 进行的一些调整包括将 output y设置为零,以处理超出区间的琐碎情况。 这必须完成,因为 function 预计 output 将被初始化并返回。 此外,if 语句在 MATLAB 的末尾不需要分号。

disp(sinc3(2));

function y = sinc3(x)
if x < 0
   disp('Outside specified interval of x');
  y = 0;

elseif ((x>=0) && (x<=pi))
    sinc= @(x) sin(x)/x;
    y =sinc(x);
    
else
   disp('Outside specified interval of x');
   y = 0;
   
end 
end

使用 MATLAB 的向量化运算可以大大减少编写复杂循环的必要性。 下面是评估和绘制截断 sinc 信号的两个示例。

绘制 Sinc 符号/匿名函数:

此方法使用名为Range的逻辑数组截断 sinc 并将信号限制在[0,π]范围内。 Range只会在参数x大于 0 且小于 π 时为真“1”。 其他地方Range为假“0”。 通过按元素将sin(x)./x sinc 乘以Range ,信号被截断。 这个过程可以可视化为将一个矩形脉冲乘以正弦波,该矩形脉冲仅是正的并且存在于该范围内。

符号评估函数

%Plotting the sinc symbolically%
syms x
Range = ((x >= 0) & (x <= pi));
sinc = @(x) (sin(x)./x).*Range;
fplot(sinc(x));

对于评估特定值/向量:

为了评估特定值,我们可以忽略将x声明为符号变量,而是将向量作为输入传递给匿名 function。

具有向量输入的匿名函数

%Generating a vector of x-values to evaluate the sinc for%
Start_Time = 0; End_Time = 20;
Interval = 0.1;
X = (0:Interval:20);

Sinc_Signal = @(x) (sin(x)./x).*((x >= 0) & (x <= pi));
plot(X,Sinc_Signal(X),'Marker','.');
xlim([-5 5]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM