簡體   English   中英

你如何在 python 上使用 fsolve 求解非線性方程?

[英]How do you solve a non-linear equation using fsolve on python?

我試圖使用下面的代碼作為指導,以解決非線性方程,但我繼續收到錯誤,例如“對象對於所需數組太深”和“函數調用的結果不是正確的浮點數組”。

from scipy.optimize import fsolve
from math import exp

def equations(vars):
    x, y = vars
    eq1 = x+y**2-4
    eq2 = exp(x) + x*y - 3
    return [eq1, eq2]

x, y =  fsolve(equations, (1, 1))

print(x, y)

我的代碼將在下面發布。 它指出了“Q = fsolve(equations, 1)”行上的錯誤

%reset -f
from math import *
T = 4 # N·m
ω = 1800*(pi/30) # rad/s
A1 = .00131 # m^2
A2 = .00055 # m^2
P1 = 12000 # Pa
P2 = 200000 # Pa
ρ = 1000 # kg/m^3
μ = .89e-3 # N·s/m^2
η = .57 # % efficiency
g = 9.81 # m/s^2
γ = 9810 # N/m^3
Z2 = .7 # m

P_motor = T*ω
print(P_motor)

P_pump = P_motor*η
print(P_pump)

from scipy.optimize import fsolve

def equations(vars):
   Q = vars 
   eq1 = γ*Q*( ((P2-P1)/γ) + ( ( ( (Q**2) / (A2**2) ) - ( (Q**2) / (A1**2) ) )/2*g) + Z2) - P_pump
   return [eq1]
                    
Q = fsolve(equations, 1)

print(Q)

由於您只有一個帶有一個未知變量的方程,因此您無需將輸出放入列表中。 您可以將return [eq1]替換為return eq1

新代碼將是:

%reset -f
from math import *
T = 4 # N·m
ω = 1800*(pi/30) # rad/s
A1 = .00131 # m^2
A2 = .00055 # m^2
P1 = 12000 # Pa
P2 = 200000 # Pa
ρ = 1000 # kg/m^3
μ = .89e-3 # N·s/m^2
η = .57 # % efficiency
g = 9.81 # m/s^2
γ = 9810 # N/m^3
Z2 = .7 # m

P_motor = T*ω
print(P_motor)

P_pump = P_motor*η
print(P_pump)

from scipy.optimize import fsolve

def equations(vars):
   Q = vars 
   eq1 = γ*Q*( ((P2-P1)/γ) + ( ( ( (Q**2) / (A2**2) ) - ( (Q**2) / (A1**2) ) )/2*g) + Z2) - P_pump
   return eq1

Q = fsolve(equations, 1)

print(Q)

輸出:

753.9822368615503
429.7698750110836
[0.0011589]

文檔指出

func : 可調用 f(x, *args)
一個函數,它至少接受一個(可能是向量)參數,並返回一個相同長度的值。

如果您的輸入是一個包含 2 個值的列表,則期望該函數返回相同形狀的內容。 所以在你的第一個例子中,你傳遞[x,y]並返回[eq1, eq2] ,所以它有效,但在第二種情況下,你傳遞一個標量並返回一個列表

因此,您可以將輸入更改為Q = fsolve(equations, (1,))或將返回值更改為return eq1

def equations(vars):
   Q = vars 
   eq1 = γ*Q*( ((P2-P1)/γ) + ( ( ( (Q**2) / (A2**2) ) - ( (Q**2) / (A1**2) ) )/2*g) + Z2) - P_pump
   return eq1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM