【问题标题】:rSymPy solve symbolic equation with substituted defined variablesrSymPy 用替换的定义变量求解符号方程
【发布时间】:2016-01-15 07:20:20
【问题描述】:

我有下面的代码,我试图用rSymPy 解决。方程中的所有变量都在下面定义,y 除外——我正在求解。

如何将QnmgkSf 的值同时代入下面定义的等式中并获得y 的值?

Q <- 1.2
n <- 0.045
m <- 3.4
g <- 9.806
k <- 1
Sf <- 0.2

library(rSymPy)
sympy("solve( [ Eq(n*Q*(2*y*sqrt(1+m**2))**(2/3) - k*(m*y**2)** 
(5/3)*sqrt(Sf), 0)], [y] )")

这是我从函数调用中收到的错误:

Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl,  : 
  Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'n' is not defined

【问题讨论】:

  • 您不需要sympy 来创建变量吗?
  • @Pascal 谢谢你的建议。我回到 SymPy 教程并研究了更多示例,直到找到解决问题的方法。

标签: r sympy symbolic-math


【解决方案1】:

以下是我想出的解决方案:

library(rSymPy)
Q <- Var("Q")
n <- Var("n")
m <- Var("m")
g <- Var("g")
k <- Var("k")
Sf <- Var("Sf")
y <- Var("y")

sympy("expr = n*Q*(2*y*sqrt(1+m**2))**(2/3) - k*(m*y**2)**(5/3)*sqrt(Sf)")
# [1] "Q*n - k*m*Sf**(1/2)*y**2"

sympy("solve(expr.subs([(Q, 1.2), (n, 0.045), (m, 3.4), (Sf, 0.2), (g, 9.806), (k, 1)]), y)")
# [1] "[-0.188451640531767, 0.188451640531767]"
# This is the answer that I am referring to (above)

out <- sympy("solve(expr.subs([(Q, 1.2), (n, 0.045), (m, 3.4), (Sf, 0.2), (g, 9.806), (k, 1)]), y)")
out <- as.numeric(unlist(strsplit(gsub("\\[|\\]", "", out), ",")))
length(out)
# [1] 2
out
# [1] -0.1884516  0.1884516

【讨论】:

  • 最好避免回答新问题。
  • @Pascal 谢谢你的回答。下次我会在单独的帖子中提出单独的问题。
  • 请不要破坏代码中的行。如果引入 break,sympy 会抛出错误。
  • @Pascal 好的,谢谢你告诉我。我引入了中断只是为了改进格式。
  • 是的,这是一个很好的做法。但是在sympy的情况下,好像就破坏了功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
相关资源
最近更新 更多