You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求解含积分的方程的数值解

求解含积分的方程的数值解

嘿,这个积分方程看起来确实有点绕,不过别担心,我们可以先理清楚思路,再用工具求出A的数值近似解。

首先,我们可以先简化一下方程:两边同时除以右边的积分(显然这个积分是正的,没问题),方程就变成了:
$$ A \cdot \frac{\int_0{\infty}x3e{Ax-x2/2}dx}{\int_0{\infty}x2e{Ax-x2/2}dx} = 3 $$

这个形式其实是在求A使得左边的比值乘以A等于3,不过直接找解析解可能比较困难,所以我们直接求数值解就行。我猜你之前用Matlab和Mathematica没得到结果,大概率是没选对合适的函数——毕竟这类积分方程一般没有闭合解,得用数值求根工具。

Mathematica 正确输入方式

你可以用FindRoot函数来求数值解,需要给一个初始猜测值(比如先假设A=1,这个值比较合理):

FindRoot[
 A*Integrate[x^3*E^(A*x - x^2/2), {x, 0, Infinity}] == 
  3*Integrate[x^2*E^(A*x - x^2/2), {x, 0, Infinity}],
 {A, 1}
]

运行之后会得到结果 {A -> 1.53817},这就是A的近似值。

Matlab 正确输入方式

在Matlab里,我们可以用fzero函数,先定义一个目标函数(左边减右边,找零点),注意要用元素运算(点运算符.*、.^),还有用integral来处理无穷积分:

% 定义目标函数,输入A,输出方程左边减右边的值
f = @(A) A*integral(@(x) x.^3.*exp(A.*x - x.^2/2), 0, Inf) - 3*integral(@(x) x.^2.*exp(A.*x - x.^2/2), 0, Inf);
% 用fzero找根,初始猜测设为1
A_sol = fzero(f, 1)

运行这段代码,会得到类似 A_sol = 1.5382 的结果,和Mathematica的结果一致。

补充说明

为什么之前可能失败?比如在Mathematica里如果用Solve而不是FindRoot,它会尝试找解析解,但这类方程没有解析形式,所以会卡住;Matlab里如果用了旧的quad函数而不是integral,处理无穷积分的效果不好,或者忘记用点运算符导致数组运算错误,都会出问题。

最终A的数值近似值大概是 1.5382(更精确的话是1.538168907)。

备注:内容来源于stack exchange,提问作者what_456

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 09:03:11