matlab - 使用 sym.int 时出错输入参数过多

标签 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.

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

最佳答案

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

我的 Matlab 副本为你的积分返回的值是

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

但是,使用命令 integrate(log(x) - log(1000))/(x^2 - 1000000)) from 0 to infinity 和 Wolfram Alpha 只会产生真正的 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 无法计算积分。

关于matlab - 使用 sym.int 时出错输入参数过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29752984/

相关文章:

matlab - 一定区间内服从指数分布的随机数

string - 如何找到一堆最接近的字符串?

algorithm - 使用 symfun/subsindex 的 MATLAB 错误

matlab - 在Matlab中提取嵌入在32位二进制数中的多个数字的最快方法是什么

matlab - matlab中的三次样条

c - mvnpdf 与常规正态(高斯)PDF - matlab/C

python - 四倍精度特征值、特征向量和矩阵对数

image - 获取两幅图像的比例差

matlab - 在 MATLAB 中对矩阵进行归一化的快速技术

algorithm - 如何在 Matlab 中加速我的代码 [包括示例]?