关于matlab的quad函数

y='4*a*sqrt(1-(c/a)^2*sin(x)^2))';
true=quad(y,0,2*pi,10^-6);
为什么输入这样的指令总是出现如下错误
??? Error using ==> inline.subsref at 14
Not enough inputs to inline function.

Error in ==> quad at 77
y = f(x, varargin{:});

Error in ==> Untitled5 at 9
true=quad(y,0,2*pi,10^-6)

还有我想问下那个@(x)是什么意思

@(x)是用来定义无名函数的。以你的函数为例

y=@(x)4*a*sqrt(1-(c/a)^2*sin(x).^2);

这就定义了这样的一个以x为自变量的函数y,但是与用function来定义的函数不同,它在matlab里没有函数名,并且只存在于内存中(关掉matlab后就被删除了)。
之后直接积分就可以
true=quad(y,0,2*pi,1e-8);

你用这个y='4*a*sqrt(1-(c/a)^2*sin(x).^2)';也可以,只是不能用a和c,要把a和c改成对应的数值。比如当a=2和c=1时,你要输入y='4*2*sqrt(1-(1/2)^2*sin(x).^2)';之后再用true=quad(y,0,2*pi,1e-8);追问

你的函数y=@(x)4*a*sqrt(1-(c/a)^2*sin(x).^2)里面在sin(x)后面有个点,这是为什么呢?

追答

quad是数值积分,所以输入的函数必须可以进行向量运算。若没有这个点,x就不能是向量,也就不能进行向量运算了。

追问

那如果我不是要进行向量运算,是不是直接不要那个点就可以了?还有这个点放在外面和里面有什么差别呢?

追答

当你使用quad时,就默认是在做向量运算了。如果用在其他不需要向量运算的地方,这个点就不用加。
因为在做乘方这个运算时用到这个点,所以它必须紧连^符号。点只适用在乘法,乘方和除法这三个运算,加减法加不加都一样。sin(x.)语法上是不对的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-19
你这个函数是第二类完全椭圆积分,Matlab提供了现成的方法:
[K,E]=ellipke % 分别返回两类椭圆积分的结果,你查一下Help

M2=[0: 0.01 : 0.99] %其中M2 = (c/a)^2
[K,E]=ellipke(M2); %不知道你的前面系数a、c代表什么含义?
plot(M2, E) % E就是你需要的第二类椭圆积分,K是第一类椭圆积分

@是匿名函数,和inline函数差不多,只不过更方便调用而已
第2个回答  2013-07-19
y=@(x)4*3*sqrt(1-(2/3)^2.*sin(x).^2);true=quad(y,0,2*pi)
按上面语句试试
@(x)表示函数以x为自变量,
相似回答