Как найти две общие точки касания одной прямой? как решать бинарные дифференциальные уравнения?
У меня есть функция с именемF
который выглядит следующим образом:линия с двумя ячейками, и я хочу решить уравнения, чтобы получить две общие точки касания (x1,F(x1)),(x2,F(x2)) функции в заданном диапазоне. уравнения:
F'(x1)=F'(x2) (1)
F'(x1)*(x2-x1)+F(x1)=F(x2) (2)
и для решения этих двух уравнений я используюsympy.solve
. код:
x1 = Symbol('x1')
F1 = F(x1,AA, BB, CC, DD, EE, FF)
x2 = Symbol('x2')
F2 = F(x2,AA, BB, CC, DD, EE, FF)
dF1=diff(F1,x1)
dF2=diff(F2,x2)
print(solve([dF1-dF2, F2-F1-dF1*(x2-x1)], [x1, x2]))
но выход есть[(x2, x2)]
. это довольно сбивает меня с толку
- как позволить
x1 != x2
? - как получить числовой вывод уравнений?
- как позволить
x1
иx2
в определенном диапазоне?
Я действительно не знаю, что здесь не так, следующая команда решения имеет правильный вывод:
print(solve([y1+y2,y1-y2], [x1, x2]))
print(solve(dy1, x1))
но не работает для бинарных дифференциальных уравнений (1) и (2)
Спасибо!
@Lutz Lehmann: Распечатайте функции и уравнения, чтобы увидеть, действительно ли они такие, как вы думаете:
-------------------------------------------------------------------
In [1]: x1 = Symbol('x1')
F1 = F(x1,AA, BB, CC, DD, EE, FF)
x2 = Symbol('x2')
F2 = F(x2,AA, BB, CC, DD, EE, FF)
dF1=diff(F1,x1)
dF2=diff(F2,x2)
-------------------------------------------------------------------
In [2]: F1
Out[2]: 1⋅(1−1)(−0.05017656665838731+0.244249682150038(21−1)5−0.535363152864316(21−1)4+0.197479965493092(21−1)3−0.366799918223659(21−1)2−0.203076238788926)
(Out [2] is F)
-------------------------------------------------------------------
In [3]:dF1
Out[3]:1⋅(1−1)(−2.934399345789271+2.44249682150038(21−1)4−4.28290522291453(21−1)3+1.18487979295855(21−1)2+1.41702310623625)−1(−0.05017656665838731+0.244249682150038(21−1)5−0.535363152864316(21−1)4+0.197479965493092(21−1)3−0.366799918223659(21−1)2−0.203076238788926)+(1−1)(−0.05017656665838731+0.244249682150038(21−1)5−0.535363152864316(21−1)4+0.197479965493092(21−1)3−0.366799918223659(21−1)2−0.203076238788926)
(Out [3] is correct)
-------------------------------------------------------------------
In [4]:print(solve([F1+F2,F1-F2], [x1, x2]))
[(0.0, 0.0), (0.0, 1.00000000000000), (1.00000000000000, 0.0), (1.00000000000000, 1.00000000000000)]
(In [4] is correct)
-------------------------------------------------------------------
In [5]:print(solve(dF1, x1))
[0.143449671600321, 0.462174698289538, 0.744534434388284, 1.44258261390104, 0.573315370351492 - 0.261496971434863*I, 0.573315370351492 + 0.261496971434863*I]
(In [5] is correct)
-------------------------------------------------------------------
In [6]:print(solve([dF1-dF2, F2-F1-dF1*(x2-x1)], [x1, x2]))
[(x2, x2)]
(In [6] is what I confused??)
-------------------------------------------------------------------