yyc1048
2010-12-05, 21:14
Matlab编程时,数值积分采用inline函数进行关联,出现错误,程序如下:
function w = fenggonglv(mu,sigma,rho)
syms v;
% mu = 2.93; %样本平均值
% sigma = 1.99; %样本方差
% rho=1.0722; %风功率密度
v1=3; %启动风速
v2=25; %停机风速
k=(sigma/mu)^(-1.086); %weibull分布参数k
c=mu/(gamma(1+1/k)); %weibull分布参数c
%利用simplson数值积分计算有效风功率密度表达式中的积分因子
g='v.^3.*(v./c).^(k-1).*exp(-(v./c).^k)';
fun = inline (g,'v');
q=quadl(fun,v1,v2);
w=rho/2*(k/c)/(exp(-(v1/c)^k)-exp(-(v2/c)^k))*q ;
end
Command窗口运行fenggonglv(2.93,1.99,1.0722) 之后,结果如下:
??? Input argument "sigma" is undefined.
Error in ==> fenggonglv at 8
k=(sigma/mu)^(-1.086); %weibull分布参数k
??? Error using ==> inlineeval at 15
Error in inline expression ==> v.^3.*(v./c).^(k-1).*exp(-(v./c).^k)
Undefined function or variable 'c'.
Error in ==> inline.feval at 36
INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);
Error in ==> quadl at 70
y = feval(f,x,varargin{:}); y = y(:).';
Error in ==> fenggonglv at 13
q=quadl(fun,v1,v2);
但是,如果将事先算好的 k=1.5222与c=3.2513代入g='v.^3.*(v./c).^(k-1).*exp(-(v./c).^k)'重新计算,则会得到正确结果:w =81.4403
所以,本人认为,很明显是inline函数的用法出错了,不知如何修改,或者不使用inline函数,而采用其他数值积分方法,请教高手解决,不胜感激!(参考结果:k=1.5222,c=3.2513,w =81.4403)
function w = fenggonglv(mu,sigma,rho)
syms v;
% mu = 2.93; %样本平均值
% sigma = 1.99; %样本方差
% rho=1.0722; %风功率密度
v1=3; %启动风速
v2=25; %停机风速
k=(sigma/mu)^(-1.086); %weibull分布参数k
c=mu/(gamma(1+1/k)); %weibull分布参数c
%利用simplson数值积分计算有效风功率密度表达式中的积分因子
g='v.^3.*(v./c).^(k-1).*exp(-(v./c).^k)';
fun = inline (g,'v');
q=quadl(fun,v1,v2);
w=rho/2*(k/c)/(exp(-(v1/c)^k)-exp(-(v2/c)^k))*q ;
end
Command窗口运行fenggonglv(2.93,1.99,1.0722) 之后,结果如下:
??? Input argument "sigma" is undefined.
Error in ==> fenggonglv at 8
k=(sigma/mu)^(-1.086); %weibull分布参数k
??? Error using ==> inlineeval at 15
Error in inline expression ==> v.^3.*(v./c).^(k-1).*exp(-(v./c).^k)
Undefined function or variable 'c'.
Error in ==> inline.feval at 36
INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);
Error in ==> quadl at 70
y = feval(f,x,varargin{:}); y = y(:).';
Error in ==> fenggonglv at 13
q=quadl(fun,v1,v2);
但是,如果将事先算好的 k=1.5222与c=3.2513代入g='v.^3.*(v./c).^(k-1).*exp(-(v./c).^k)'重新计算,则会得到正确结果:w =81.4403
所以,本人认为,很明显是inline函数的用法出错了,不知如何修改,或者不使用inline函数,而采用其他数值积分方法,请教高手解决,不胜感激!(参考结果:k=1.5222,c=3.2513,w =81.4403)