使用 MATLAB 对两个不同函数进行数值积分

问题描述 投票:0回答:1

我在 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 中需要它,因为我的仿真在其中运行。

有人可以帮忙吗?

matlab numerical-methods numerical-integration
1个回答
0
投票

我猜

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
© www.soinside.com 2019 - 2024. All rights reserved.