matlab定积分计算结果为表达式,我只想得到数值。用double(ans)也没用,不知道还有没有其他方法!

clear
syms x;
k=0.390803 ;
mu=0.463506 ;
sigma= 0.219108 ;
PDF=(1/sigma)*exp((-1+k*(x-mu)/sigma)^(-1/k))*(1+k*(x-mu)/sigma)^(-1-(1/k));
S=int(PDF,x,0.3,2.9);
eval(S)
这是原程序代码,其结果为
ans =

int((2569280689985359*exp(1/((14080161961402176*x)/7894197657231157 - 8226786109654163/4503599627370496)^(5761981903120621/2251799813685248)))/(562949953421312*((14080161961402176*x)/7894197657231157 + 6243305160694637/36028797018963968)^(8013781716805869/2251799813685248)), x, 3/10, 29/10)

经检查是公式写错了,负号位置错了。

k=0.390803;mu=0.463506;sigma=0.219108;

PDF=@(x)(1/sigma).*exp(-(1+k*(x-mu)/sigma).^(-1/k)).*(1+k*(x-mu)/sigma).^(-1-(1/k));

S=quadl(PDF,0.3,2.9)

运行结果

S =         0.897133772014529

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-09-06
可以用符号运算来求:

1234567891011

>> J=int(exp(x)*(x^2+sqrt(x)),0,1) J = 2*exp(1)+1/2*i*pi^(1/2)*erf(i)-2 >> double(J)ans = 1.9739 >> vpa(J,30) ans = 1.97391191101090886191652635584

得到的结果是解析表达式,要想得到具体的数,可以用double或vpa函数(其中vpa可以得到任意精度的结果,而double得到的是双精度浮点数)。

当然,也可以用数值积分:

123
>> quadl(inline('exp(x).*(x.^2+sqrt(x))'),0,1)ans = 1.9739追问

您看,我按照您的方法算我的式子,它在表达式里面还是仍有变量x。得到的结果还是表达式。您可不可以按我给的原代码,算一次啊呀,谢谢!

本回答被网友采纳
第2个回答  2018-09-07
是因为符号积分无法计算,答案还是符号积分,没看见前面还有int吗
只能采用数值积分,例如函数quad追问

quad 我也试了,发生报错,构造函数:function y = myfun(x) k=0.390803 ;mu=0.463506 ;sigma= 0.219108 ;y=(1/sigma).*exp((-1+k.*(x-mu)./sigma).^(-1./k)).*(1+k.*(x-mu)./sigma).^(-1-(1./k));end
求0.1-2的积分 clear syms x;Q =quad(@myfun,0.1,2);
报错:
警告: 遇到无限值或 Not-a-Number 函数值。
> In quad at 100
In gev at 9
就不知道怎么办了

追答

这个数值太大了,超过10^71次方,而且里面包含复数

x=[0.3:0.1:2.9];

y=abs((1/sigma)*exp((-1+k*(x-mu)/sigma).^(-1/k)).*(1+k*(x-mu)/sigma).^(-1-(1/k)));

plot(x,y)

追问

没有啊,我看您的程序表达式好像和我的不太一样,,

clear;

x=0:0.001:2.9;

k=0.390803  ;

mu=0.463506  ;

sigma= 0.219108 ;

pd=1/sigma.*(exp(-mu/sigma).*x.^(1/sigma-1))./((1+(exp(-mu).*x).^(1/sigma)).^2);

%pd = makedist('GeneralizedExtremeValue','k',k,'sigma',sigma,'mu',mu);%这是调用函数

plot(x,pd);

我已经求出来了,麻烦您了!

本回答被提问者采纳
第3个回答  2018-09-07
这个表达式不可以积分
相似回答