两个不同函数的 MATLAB 数值积分
Numerical Integration with MATLAB for two different functions
我在MATLAB中有两个数值积分函数如下:
fun1 = @(x) log2(1+x).*(4*exp(2*lambda*(d*sqrt(- d^2 + (a./x).^(2/alp))-(a./x).^(2/alp).*...
acos(((a./x).^(1/alp)./d).^(-1)))).*(a./x).^(2/alp).*lambda.*acos(((a./x).^(1/alp)./d).^(-1)))./(x.*alp);
num1=integral(@(x)fun1(x),0,a/(d^alp));
fun2 = @(x) exp(1./x).*expint(1./x).*(4*exp(2*lambda*(d*sqrt(- d^2 + (a./x).^(2/alp))-(a./x).^(2/alp).*...
acos(((a./x).^(1/alp)./d).^(-1)))).*(a./x).^(2/alp).*lambda.*acos(((a./x).^(1/alp)./d).^(-1)))./(x.*alp);
num2=integral(@(x)fun2(x),0,a/(d^alp));
在 fun1
中,我有 log2(1+x)
(fun1
和 fun2
的其余术语相同),它给出了数字答案。
在fun2
中,我有exp(1./x).*expint(1./x)
,它没有给出数值。
对于d=1.2; lambda=4.5; alp=2.7;f=1;a=0.5;
num1 =
0.3078
Warning: Infinite or Not-a-Number value encountered.
num2 =
NaN
我注意到这可以用 MATHEMATICA 计算。但是我在 MATLAB 中需要它作为我在其中的模拟 运行。
有人可以帮忙吗?
我猜想 integral
函数会导致上溢或下溢,因为它使用双精度算法。你可以试试vpaintegral
,它使用变精度算法。
修改后的代码:
d=1.2; lambda=4.5; alp=2.7;f=1;a=0.5;
fun1 = @(x) log2(1+x).*(4*exp(2*lambda*(d*sqrt(- d^2 + (a./x).^(2/alp))-(a./x).^(2/alp).*...
acos(((a./x).^(1/alp)./d).^(-1)))).*(a./x).^(2/alp).*lambda.*acos(((a./x).^(1/alp)./d).^(-1)))./(x.*alp);
num1=integral(@(x)fun1(x),0,a/(d^alp))
syms x
fun2 = exp(1./x).*expint(1./x).*(4*exp(2*lambda*(d*sqrt(- d^2 + (a./x).^(2/alp))-(a./x).^(2/alp).*...
acos(((a./x).^(1/alp)./d).^(-1)))).*(a./x).^(2/alp).*lambda.*acos(((a./x).^(1/alp)./d).^(-1)))./(x.*alp);
num2=vpaintegral(fun2,0,a/(d^alp))
输出:
num1 =
0.3078
num2 =
0.197608
我在MATLAB中有两个数值积分函数如下:
fun1 = @(x) log2(1+x).*(4*exp(2*lambda*(d*sqrt(- d^2 + (a./x).^(2/alp))-(a./x).^(2/alp).*...
acos(((a./x).^(1/alp)./d).^(-1)))).*(a./x).^(2/alp).*lambda.*acos(((a./x).^(1/alp)./d).^(-1)))./(x.*alp);
num1=integral(@(x)fun1(x),0,a/(d^alp));
fun2 = @(x) exp(1./x).*expint(1./x).*(4*exp(2*lambda*(d*sqrt(- d^2 + (a./x).^(2/alp))-(a./x).^(2/alp).*...
acos(((a./x).^(1/alp)./d).^(-1)))).*(a./x).^(2/alp).*lambda.*acos(((a./x).^(1/alp)./d).^(-1)))./(x.*alp);
num2=integral(@(x)fun2(x),0,a/(d^alp));
在 fun1
中,我有 log2(1+x)
(fun1
和 fun2
的其余术语相同),它给出了数字答案。
在fun2
中,我有exp(1./x).*expint(1./x)
,它没有给出数值。
对于d=1.2; lambda=4.5; alp=2.7;f=1;a=0.5;
num1 =
0.3078
Warning: Infinite or Not-a-Number value encountered.
num2 =
NaN
我注意到这可以用 MATHEMATICA 计算。但是我在 MATLAB 中需要它作为我在其中的模拟 运行。
有人可以帮忙吗?
我猜想 integral
函数会导致上溢或下溢,因为它使用双精度算法。你可以试试vpaintegral
,它使用变精度算法。
修改后的代码:
d=1.2; lambda=4.5; alp=2.7;f=1;a=0.5;
fun1 = @(x) log2(1+x).*(4*exp(2*lambda*(d*sqrt(- d^2 + (a./x).^(2/alp))-(a./x).^(2/alp).*...
acos(((a./x).^(1/alp)./d).^(-1)))).*(a./x).^(2/alp).*lambda.*acos(((a./x).^(1/alp)./d).^(-1)))./(x.*alp);
num1=integral(@(x)fun1(x),0,a/(d^alp))
syms x
fun2 = exp(1./x).*expint(1./x).*(4*exp(2*lambda*(d*sqrt(- d^2 + (a./x).^(2/alp))-(a./x).^(2/alp).*...
acos(((a./x).^(1/alp)./d).^(-1)))).*(a./x).^(2/alp).*lambda.*acos(((a./x).^(1/alp)./d).^(-1)))./(x.*alp);
num2=vpaintegral(fun2,0,a/(d^alp))
输出:
num1 =
0.3078
num2 =
0.197608