在 NonlinearSolve.jl 中只求解一半的解

问题描述 投票:0回答:1
using NonlinearSolve, LinearAlgebra, Plots

# Parameters: p = [h, \omega]
N=15

g(u,p) = p[1]*Tridiagonal(fill(1,N), fill(-2,N+1), fill(1,N))*u - u.^3 - p[2]*u 

probg = NonlinearProblem{false}(g, [0.3; fill(0.3, N-1); 0.3], [0.6, -0.4])

solver = solve(probg, NewtonRaphson(), reltol = 1e-9)

在上面的代码中,我利用

NonlinearSolve.jl
包来解决椭圆非线性问题。解决方案通常是对称的。下面是上面代码的输出。注意解决方案的对称性。

为了节省计算时间,我想只解决一半的问题。我如何在这个包中指定它?

例子:

 9.165610097608932e-13
 2.704903846479506e-12
 4.63792285826381e-12
 5.947401561035362e-12
 6.6334560728468356e-12
 6.943120557656446e-12
 7.068988650731425e-12
 7.112134991181518e-12
 7.112134991181518e-12
 7.068988650731425e-12
 6.9431205305513916e-12
 6.633456045741781e-12
 5.947401533930308e-12
 4.63792285826381e-12
 2.7049038871370876e-12
 9.165610097608932e-13
julia solver
1个回答
0
投票

只需在非线性求解的

f
函数上创建一个闭包,该函数接受正在求解的一半,填充另一半,然后计算完整的残差。

© www.soinside.com 2019 - 2024. All rights reserved.