使用 Julia 查找非线性方程的零
Find zero of a nonlinear equation using Julia
在 Julia 中使用 SymPy 的过程之后,我生成了一个非线性方程组。为了简单起见,我将在此处针对非线性方程的情况进行近似。我得到的是这样的等式:
R = (p) -> -5.0488*p + p^2.81 - 3.38/( p^(-1.0) )^2.0
我可以绘制 R 函数
using Plots
plot(R, 0,8)
我们可以看到 R 函数有两个零点:p = 0 和 5.850< p < 8.75。我想找到正零。为此,我尝试了 nlsolve 函数,但出现错误:
using NLsolve
nlsolve(R , 5.8)
MethodError: no method matching nlsolve(::var"#1337#1338", ::Float64)
Closest candidates are:
nlsolve(::Any, ::Any, !Matched::AbstractArray; inplace, kwargs...)
首先,nlsolve 函数哪里出错了?
如果可能的话,我将不胜感激在 Julia 中使用 SymPy 包的解决方案。
此问题已在此处的 Julia 话语中得到解答:https://discourse.julialang.org/t/find-zero-of-a-nonlinear-equation-using-julia/61974
在多个平台上提问时,交叉引用总是有帮助的。
作为参考,解决方案是
using NLSolve
function R(F,p) #p is a vector too, not a number
F[1] = -5.0488*p[1] + p[1]^2.81 - 3.38/( p[1]^(-1.0) )^2.0
end
nlsolve(R , [5.8])
在 Julia 中使用 SymPy 的过程之后,我生成了一个非线性方程组。为了简单起见,我将在此处针对非线性方程的情况进行近似。我得到的是这样的等式:
R = (p) -> -5.0488*p + p^2.81 - 3.38/( p^(-1.0) )^2.0
我可以绘制 R 函数
using Plots
plot(R, 0,8)
我们可以看到 R 函数有两个零点:p = 0 和 5.850< p < 8.75。我想找到正零。为此,我尝试了 nlsolve 函数,但出现错误:
using NLsolve
nlsolve(R , 5.8)
MethodError: no method matching nlsolve(::var"#1337#1338", ::Float64)
Closest candidates are:
nlsolve(::Any, ::Any, !Matched::AbstractArray; inplace, kwargs...)
首先,nlsolve 函数哪里出错了?
如果可能的话,我将不胜感激在 Julia 中使用 SymPy 包的解决方案。
此问题已在此处的 Julia 话语中得到解答:https://discourse.julialang.org/t/find-zero-of-a-nonlinear-equation-using-julia/61974
在多个平台上提问时,交叉引用总是有帮助的。
作为参考,解决方案是
using NLSolve
function R(F,p) #p is a vector too, not a number
F[1] = -5.0488*p[1] + p[1]^2.81 - 3.38/( p[1]^(-1.0) )^2.0
end
nlsolve(R , [5.8])