Можно ли решить такую ​​систему уравнений на Python?

Я пытаюсь переписать несколько систем уравнений на питоне, но у меня мало (очень мало) опыта. Я что-то написал, но не понимаю, правильно ли это. Кто-нибудь может помочь?

Вот фото уравнений:док Мой код:

import numpy as np
from scipy.optimize import fsolve

# Initial data
Ptmax_init = 100
Q_init = 100
e_init = 0.01

r0 = 0.85
S = 0.18
b = 0.045
c0 = 9.8 * 10**3
B = 0.53
th = 0.05
Cr = 6.33 * 10**5
mu = 0.8
Qc = 1.177 * 10**4
h_kr = 0.6
L = 2.5
ec = 0.01
k = 2.81
tang = 0.65

#Equations
def equations(vars):
    Ptmax, Q, e = vars
    eq1 = Ptmax = Q * ((r0 / (r0 - e)) * ((S - b) / S) * ((2 * c0 * (B + 2 * th) * r0) / (Cr * e) + tang - ((2 * c0 * (B + 2 * th)) / Cr)) + (mu * (b / S)))
    eq2 = Q = (Qc + (Ptmax * h_kr / L))
    eq3 = e = (ec + (Ptmax * h_kr) / (L * 1.44 * np.sqrt((Cr**2 * Q) / r0 * (1 + np.sqrt(k + 1))**2)**(1/3)))
    return [eq1, eq2, eq3]

# Solving
initial_guess = [Ptmax_init, Q_init, e_init]
solution = fsolve(equations, initial_guess, maxfev=150)
Ptmax_sol, Q_sol, e_sol = solution

print(f"Solve: Ptmax = {Ptmax_sol}, Q = {Q_sol}, e = {e_sol}")

Привет. Можете ли вы прояснить проблему, пожалуйста? В «данном» находятся значения из Q и e. Но затем вас просят найти значения Q и e?

Stef 26.05.2024 18:47

@Stef Здравствуйте! Начальные значения указаны в разделе «Начальные». Эта система решается путем поиска корней системы уравнений. Решается итеративно, на каждой итерации меняется начальное значение. Я пользуюсь переводчиком, надеюсь, слова понятны.

Leonya 26.05.2024 19:30
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте заменить в уравнениях знаки равенства = на знаки минус -, то есть:

def equations:
    Ptmax, Q, e = vars
    eq1 = Ptmax - Q * ((r0 / (r0 - e)) * ((S - b) / S) * ((2 * c0 * (B + 2 * th) * r0) / (Cr * e) + tang - ((2 * c0 * (B + 2 * th)) / Cr)) + (mu * (b / S)))
    eq2 = Q - (Qc + (Ptmax * h_kr / L))
    eq3 = e - (ec + (Ptmax * h_kr) / (L * 1.44 * np.sqrt((Cr**2 * Q) / r0 * (1 + np.sqrt(k + 1))**2)**(1/3)))
    return [eq1, eq2, eq3]

Сравните с примером, приведенным внизу страницы документации для fsolve:

Найдите решение системы уравнений: x0*cos(x1) = 4, x1*x0 - x1 = 5.

def func(x):
    return [x[0] * np.cos(x[1]) - 4,   # minus 4, not equal 4
            x[1] * x[0] - x[1] - 5]    # minus 5, not equal 5

root = fsolve(func, [1, 1])

В общем, в Python и большинстве других языков программирования = означает присваивание, а == означает равенство. Сам по себе символ = не означает равенства.

Рассмотрим, например:

>>> eq = b = 3
>>> print(eq)
3
>>> print(b)
3
>>> eq = (b = 3)
  File "<stdin>", line 1
    eq = (b = 3)
          ^^^^^
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
>>> eq = (b == 3)
>>> print(eq)
True
>>> if (b = 3):
  File "<stdin>", line 1
    if (b = 3):
        ^^^^^
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?

@cards Я на самом деле устоял перед желанием упомянуть простоту в своем ответе :-p

Stef 27.05.2024 11:45

Спасибо. Результат выглядит как правильный

Leonya 27.05.2024 17:32

Другие вопросы по теме