使用sym.int时出错输入参数太多

时间:2015-04-20 16:10:08

标签: matlab

我搜索了一些“太多的输入参数”。问题,但我还没有找到答案...

我是matlab的新手,所以我有以下问题

我想使用principalvalue方法进行集成,但我得到了以下消息

 syms w
 f2=(log(w)-log(1000))/(w^2-1000000)
 int(f2, w, 0, inf, 'PrincipalValue', true)

我得到:

Error using ==> sym.int
Too many input arguments.

我该怎么做才能克服这个问题?

1 个答案:

答案 0 :(得分:2)

您的Matlab版本7.12.0(也称为R2011a)没有'PrincipalValue'功能。可以找到R2011a的文档here

我的Matlab副本返回的值为

(pi*243045032034301i)/70368744177664000 + pi^2/4000

但是,使用带有Wolfram Alpha的命令integrate(log(x) - log(1000))/(x^2 - 1000000)) from 0 to infinity仅产生没有虚部的真实pi^2/4000组件。此外,Wolfram Alpha不计算主要值,因为它似乎能够在w = 1000处评估here所示的不定积分。根据Wolfram Alpha的说法,这意味着不需要计算普通积分的主值。 Matlab似乎不同意,因为它为f2计算了一个不同的反衍生物。

如果您想尝试使用您的Matlab版本计算其他函数的主值,则以下脚本可以作为模板使用(使用找到的Cauchy主值的定义here):

syms w;
syms e;
syms b;
format long; % For long decimal display
f2=(log(w)-log(1000))/(w^2-1000000);
fake_inf = 5e60; % Really high number, gives NaN for true inf
% Cauchy Principal Value about w = 1000: compute as limit of a sum
integral1 = int(f2, w, 0, 1000-e);
integral2 = int(f2, w, 1000+e, fake_inf);

% Built-in Principal Value integral result:
% int(f2, w, 0, inf, 'PrincipalValue', true);
0.002467401100272 + 0.010850676618623i

CPV = limit(integral1+integral2, e, 0, 'right');
eval(CPV)

输出

ans =

  0.002467401100272 + 0.010850676618623i


ans =

  0.002467401100272 - 0.417381909829793i

其中0.002467...pi^2/4000的十进制扩展。由Matlab和Wolfram Alpha计算的反衍生物在他们的真实论证中达成一致但他们的想象论点不同(Wolfram Alpha没有)。

请注意,我使用' fake_inf'变量:如果使用了真inf值,则Matlab无法计算积分。