Задать вопрос
@almaska

Что нужно сделать чтобы код заработал как надо?

Есть код, не самый лучший конечно, делаю для учебы, конкретно для 1 лабы, Код перебирает комбинации параметров m3,m4,z3,z4 решает систему уравнений для x3,x4,y3,y4,z3,z4​, после он находит значение r1 и r2 они должны быть равны r1 = sqrt(x3^2+y3^2), r2 = sqrt(x4^2+y4^2) и проверяет условие 42 <= r1 and r2 <= 88 и после идет вывод всех подобранных значений. Код работает, но выдает неправильные ответы. Пытался сделать код сам, но не получается т.к. не хватает знаний. Может кто нибудь да и поможет.
from sympy import symbols, Eq, solve
import math
def main():
    # Объявление переменных
    x3, x4, y3, y4 = symbols('x3 x4 y3 y4')
    m_values = [40, 50, 60, 71, 76]
    z_values = [160, 240, 320]

    print("Решение системы уравнений:")
    try:
        # Перебор всех комбинаций m3, m4, z3, z4
        for m3 in m_values:
            for m4 in m_values:
                for z3 in z_values:
                    for z4 in z_values:
                        # Уравнения первой системы
                        eq1 = Eq(m3 * x3 + m4 * x4 + 1630.2, 0)
                        eq2 = Eq(m3 * x3 * z3 + m4 * x4 * z4 - 88464, 0)

                        # Решение первой системы
                        solutin1 = solve([eq1, eq2], (x3, x4))
                        if solutin1:
                            x3_val = float(solutin1[x3])
                            x4_val = float(solutin1[x4])

                            # Уравнения второй системы
                            eq3 = Eq(m3 * y3 + m4 * y4 + 4636.8, 0)
                            eq4 = Eq(m3 * y3 * z3 + m4 * y4 * z4 + 9772.88, 0)

                            # Решение второй системы
                            solutin2 = solve([eq3, eq4], (y3, y4))
                            if solutin2:
                                y3_val = float(solutin2[y3])
                                y4_val = float(solutin2[y4])

                                # Вычисление r1 и r2
                                r1 = math.sqrt(x3_val**2 + y3_val**2)
                                r2 = math.sqrt(x4_val**2 + y4_val**2)

                                # Проверка диапазона для r1 и r2
                                if 42 <= r1 <= 88 and 42 <= r2 <= 88:
                                    print("Найдено решение, удовлетворяющее условию 42 <= r <= 88:")
                                    print(f"  x3 = {x3_val:.2f}, x4 = {x4_val:.2f}")
                                    print(f"  y3 = {y3_val:.2f}, y4 = {y4_val:.2f}")
                                    print(f"  r1 = {r1:.2f}, r2 = {r2:.2f}")
                                    print(f"  Параметры: m3 = {m3}, m4 = {m4}, z3 = {z3}, z4 = {z4}")
                                    return
    except Exception as e:
        print(f"Произошла ошибка: {e}")

    print("Не найдено решений, удовлетворяющих условию 42 <= r <= 88.")

if __name__ == "__main__":
    main()
  • Вопрос задан
  • 623 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Ох уж эти программисты, не помнящие школьный курс математики. Всего то надо решить две системы линейных уравнений:
m₃     m₄   | -1630.2
m₃z₃   m₄z₄ | 88464

m₃     m₄   | -4636.8
m₃z₃   m₄z₄ | -9772.88

import math

def main():
    m_values = [40, 50, 60, 71, 76]
    z_values = [160, 240, 320]
    for m3 in m_values:
        for m4 in m_values:
            for z3 in z_values:
                for z4 in z_values:
                    d = m3 * m4 * (z4 - z3)
                    if d == 0:
                        continue;
                    x3 = (-1630.2 * z4 - 88464) * m4 / d
                    x4 = (88464 + 1630.2 * z3) * m3 / d
                    y3 = (-4636.8 * z4 + 9772.88) * m4 / d
                    y4 = (-9772.88 + 4636.8 * z3) * m3 / d
                    r1 = math.sqrt(x3 * x3 + y3 * y3)
                    r2 = math.sqrt(x4 * x4 + y4 * y4)
                    if 42 <= r1 <= 88 and 42 <= r2 <= 88:
                        print("Найдено решение, удовлетворяющее условию 42 <= r <= 88:")
                        print(f"  x3 = {x3_val:.2f}, x4 = {x4_val:.2f}")
                        print(f"  y3 = {y3_val:.2f}, y4 = {y4_val:.2f}")
                        print(f"  r1 = {r1:.2f}, r2 = {r2:.2f}")
                        print(f"  Параметры: m3 = {m3}, m4 = {m4}, z3 = {z3}, z4 = {z4}")
                        return
    print("Не найдено решений, удовлетворяющих условию 42 <= r <= 88.")

if __name__ == "__main__":
    main()

Не найдено решений, удовлетворяющих условию 42 <= r <= 88.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
проверяет условие 42 <= r1 and r2 <= 88

if 42 <= r1 <= 88 and 42 <= r2 <= 88:

Это разные условия. Какое из двух тебе нужно?
И если на то пошло, какой именно неправильный ответ выдаёт код? Не находит решение, когда оно должно быть? Или находит решение, когда его не должно быть? Или находит неправильное решение?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
SpectrumData Екатеринбург
от 200 000 до 300 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽
18 янв. 2025, в 21:28
1000 руб./за проект
18 янв. 2025, в 20:50
20000 руб./за проект
18 янв. 2025, в 20:31
20000 руб./за проект