求解未知常数的积分方程

计算科学 积分方程 约束
2021-12-21 12:06:09

考虑方程

0LW(u,s)ds=0

在哪里0sLu是一个常数向量。

从数字上看,确定的最佳方法是什么u满足方程?

1个回答

就像@Kirill 所说的那样,编写一个脚本来定义f(u)是一个近似积分的函数。因此,您需要解决的只是f(u)=0它可以使用像牛顿法这样的标准根查找工具。

你最好的选择可能是 Julia。quadgk使用Gauss-Kronrad 求积的内置函数,您可以f通过以下方式定义函数:

f(u) = quadgk((x)->W(u,x),0,L)[1]

(这[1]是因为quadgk返回一个元组,其中第一部分是积分,第二部分是误差估计,所以这个函数忽略误差估计,只返回积分近似值)。请注意,(x)->W(u,x)它使用了所谓的闭包:它创建了一个匿名函数g(x) = W(u,x),它坚持 的值u,允许您轻松地在x. 由于 Julia v0.5 将匿名函数编译为泛型函数,这将非常快。

然后你只需要解决寻根问题。我特别喜欢图书馆 NLSolve。由于这个功能没有到位,我们将使用命令

using NLsolve
nlsolve(not_in_place(f),initial_u)

哪里initial_x是对 的最终值的猜测u这将使用有限差分。通过启用自动微分,我们可以多次使其更快、更准确:

nlsolve(not_in_place(f),initial_u,autodiff = true)