function a=convs(varargin) a=1;for i=1:length(varargin) ,a=conv(a,varargin {i});end啥意思,求详解

如题所述

这是一段Matlab程序。并且是一段函数定义。并且这个函数是可重载函数,也就是说,函数的参数个数可变。varargin是一个系统变量,关于他的详细帮助可查看matlab自带帮助。我这里简单说一下就是,这个变量存储着所有输入的参数。当然这也是一个数组。他的长度可用nargin,这也是一个系统变量。表示传入参数个数。要获取每一个输入的参数就要用varargin{n}的形式,获取的就是第n个输入参量,可为一个值也可以为一个数组。其实这里最后的意思就是获得以输入参数为系数的多项式的乘积。
举个例子,a1=[1 1];a2=[1 1];,ans=convs(a1,a2);
结果就是ans=1 2 1;因为(x+1)*(x+1)=x^2+2x+1,如果a3=[1 1];ans=convs(a1,a2,a3);
ans=[1 3 3 1]因为(x+1)(x+1)(x+1)=x^3+3x^2+3x+1.显然这里输入参数数量变化也可以获得正确计算结果。这就是varargin的魅力。如果不知道conv函数可以百度。不明白可追问。追问

对a1=[1 1];a2=[1 1];来说 varargin=[1 1 1 1] length(varargin)=4 ,取a=1即1与任何数相乘不改变原值,这样理解对否?

追答

应该是2吧因为这里获取的应该是输入参数的个数,而不是所有元素数。a初始为1是保证乘没乘没变化。

追问

绘制分段函数y=1.1sign(x),|x|>1.1;y=x,|x|1.1,y=1.1*sign(x);elseif abs(x)<=1.1y=x;end;plot(x,y)为啥不对?请教。我是初学者,有哪些资料可借鉴?

追答

首先你要知道,plot函数是怎么使用的,plot函数是将两个向量按照对应关系,分别作为横纵坐标绘制出来。说白了其实画的就是散点图,然后用折线连接起来,所以你要先获得这些点。
这样我写出代码,你看看看不看得懂。
n=1;
x=-2:0.02:2;
for n=1:length(x)
if abs(x(n))>1.1
y(n)=1.1*sign(x(n));
else
y(n)=x(n);
end
end
plot(x,y)
不明白可追问。

追问

若只实现这个分段函数,function y=f(x) if abs(x)>1.1,y=1.1*sign(x);elseif abs(x)<=1.1,y=x;end对吗?还有x.与x用途区别?

追答

function y=f(x) if abs(x)>1.1,y=1.1*sign(x);elseif abs(x)<=1.1,y=x;end这句话本身就有问题,(逗号)(在y=x之前)是不合理的。x.是用x这个向量中的每一个元素进行运算而不是将这个向量进行运算。例如cn=an/bn.那么c=a./b。(有点)。

温馨提示:答案为网友推荐,仅供参考
相似回答