Sympy: как решить с точки зрения X - PullRequest
0 голосов
/ 27 мая 2018

Я симулирую некоторые напряжения в sympy, и у меня были проблемы с получением системы, чтобы упростить вывод.Могу ли я попросить систему не включать ненужные переменные в вывод?Я надеялся устранить V.Я запустил:

from sympy import *
var('V1 V2 V Vout R1 R2 Rf')

solve([
    -V + V1*Rf/(Rf+R1),
    -V + (V2-Vout)*Rf/(Rf+R2),
], Vout)
# output: {Vout: -R2*V/Rf - V + V2}

Могу ли я сказать это, чтобы дать мне результат в терминах V1, V2, R1, R2 и Rf, но не V?

Обратите внимание, что удаление V вручную не является идеальным, потому что не все уравнения так просты, как эти.Когда я удалил его вручную (и решил установить R1=R2), я обнаружил похожую проблему -

solve([
    Eq(V1*Rf/(Rf+R1), (V2-Vout)*Rf/(Rf+R2)),
    Eq(R1, R2)
], Vout)
# output: {Vout: (R1*V2 - R2*V1 - Rf*V1 + Rf*V2)/(R1 + Rf)}

И R1, и R2 включены в вывод.Как я могу заставить систему устранить один?(Между прочим, исключение R2 приведет к отмене R1.) Выход должен быть:

{Vout: -V1 + V2}

(Примечание для поклонников электроники: вы можете заметить, что это дифференциальный усилитель. Я знаю,что-то не так с исходными уравнениями. Выяснение Jupyter / sympy действительно помогло бы мне понять, в чем дело.)

1 Ответ

0 голосов
/ 28 мая 2018

Если V добавить к переменным для поиска, он не появится справа:

solve([
    -V + V1*Rf/(Rf+R1),
    -V + (V2-Vout)*Rf/(Rf+R2),
], (Vout, V))

возвращает {V: Rf*V1/(R1 + Rf), Vout: (-V1*(R2 + Rf) + V2*(R1 + Rf))/(R1 + Rf)}.Получите доступ к решению для Vout с помощью solve(..., (Vout, V))[Vout]

Аналогично,

solve([
    Eq(V1*Rf/(Rf+R1), (V2-Vout)*Rf/(Rf+R2)),
    Eq(R1, R2)
], (Vout, R2))[Vout]

возвращает -V1 + V2.

...