【问题标题】:Numerical Integration with MATLAB for two different functions用 MATLAB 对两个不同的函数进行数值积分
【发布时间】:2019-03-28 08:31:27
【问题描述】:

我在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)(其余术语与fun1fun2 相同),它给出了数字答案。

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 integration numerical-methods


【解决方案1】:

我猜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

【讨论】:

  • 效果很好!感谢@banghuazhao 的快速帮助。
  • 没问题 :) 添加一个额外的注释。数学之所以有效,是因为它可以处理大量数字。
猜你喜欢
  • 1970-01-01
  • 2011-02-21
  • 2013-08-24
  • 2023-03-08
  • 2014-02-12
  • 1970-01-01
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多