【问题标题】:Find zero of a nonlinear equation using Julia使用 Julia 查找非线性方程的零
【发布时间】:2021-08-16 05:21:34
【问题描述】:

在使用 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

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 包的解决方案。

【问题讨论】:

  • 我认为这是数据类型问题。参考包回购,我认为你正在使用这个function nlsolve(f, initial_x::AbstractArray; kwargs..) 这里第一个变量是一个函数,它是R,而它接受的第二个变量应该是Array,而你正在提供一个@987654327 @ 数字。尝试将输入作为类型数组。希望这会有所帮助!!!
  • 我试过了,一直报错:nlsolve (R, [5.8])
  • 要完全留在 sympy 中,有 nsolve。如果不尝试,我猜 julia 版本的性能会更好,尽管可能可以忽略不计。

标签: julia sympy nonlinear-functions nonlinear-equation


【解决方案1】:

这个问题已经在 J​​ulia 的讨论中得到了回答: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])

【讨论】:

  • 是的,是我。我在这里问了这个问题后发布了这个问题。你如何交叉引用?我必须编辑我的问题并放置链接吗?
  • 就像我做的那样 - 将链接发布到您提出问题的其他地方!
猜你喜欢
  • 1970-01-01
  • 2018-01-14
  • 2016-04-22
  • 1970-01-01
  • 2022-08-04
  • 2012-09-17
  • 2017-07-11
  • 2014-09-07
  • 2012-10-14
相关资源
最近更新 更多