Нужно ли в этом случае вручную помогать Maxima решить эту систему уравнений? - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть список этих 4 уравнений с 4 неизвестными.Я хотел бы решить их с максимумами.Однако следующий код не возвращает результат.

eq1:I1^2+R1^2=Len1^2;
eq2:I2^2+R2^2=Len2^2;
eq3:R1+R2=U;
eq4:I1+I2=F;

solve([eq1,eq4,eq2,eq3],[R1,I1,R2,I2]);

У меня очень трудоемкое половинное ручное решение.Я пробовал разные порядки подстановки уравнений друг в друга, а затем копировал, вставил предыдущий вывод в следующую строку, как показано ниже.

substitute(solve(eq4,I1), I1 , eq1);
substitute(solve(eq2,I2), I2 , R1^2+(F-I2)^2=Len1^2);
substitute(solve(eq3,R2), R2 , (F-sqrt(Len2^2-R2^2))^2+R1^2=Len1^2);
solve((F-sqrt(Len2^2-(U-R1)^2))^2+R1^2=Len1^2,R1);
    [R1=(Len1^2-Len2^2-F^2+U^2+2*F*sqrt(-U^2+2*R1*U-R1^2+Len2^2))/(2*U)]

Я уже пробовал Solver и to_poly_solve, и ни один из них не дает ощутимых результатов.(Примечание: решение для решения все еще содержит неизвестные в «решении»)

load(to_poly_solve);
to_poly_solve([eq1,eq4,eq2,eq3],[R1,I1,R2,I2]);
    (%o40) %union()

load(solver);
Solver([eq1,eq4,eq2,eq3],[R1,I1,R2,I2]);
    (%o42) [[R1=U-R2,I1=-sqrt(-U^2+2*R2*U-R2^2+Len1^2),
    I2=-sqrt(Len2^2-R2^2)],[R1=U-R2,I1=sqrt(-U^2+2*R2*U-R2^2+Len1^2),
    I2=-sqrt(Len2^2-R2^2)],
    [R1=U-R2,I1=-sqrt(-U^2+2*R2*U-R2^2+Len1^2),I2=sqrt(Len2^2-R2^2)],
    [R1=U-R2,I1=sqrt(-U^2+2*R2*U-R2^2+Len1^2),
    I2=sqrt(Len2^2-R2^2)]]

В идеале я хотел бы получить такой тип результата для каждой переменной, однако мой метод сделать это наполовину - вручную был оченьмедленно и, вероятно, будет хуже для больших систем.Даже поиск одной переменной поможет, так как тогда будет гораздо проще работать с системой.Есть ли более быстрый способ, чем я сделал?

R1=(Len1^2-Len2^2-F^2+U^2+2*F*sqrt(-U^2+2*R1*U-R1^2+Len2^2))/(2*U)
R2=-(Len1^2-Len2^2-F^2+2*F*sqrt(Len2^2-R2^2)-U^2)/(2*U)
I1=(Len1^2-Len2^2+F^2+2*sqrt(-I1^2+2*F*I1-F^2+Len2^2)*U-U^2)/(2*F)
I2=-(Len1^2-Len2^2-F^2+2*sqrt(Len2^2-I2^2)*U-U^2)/(2*F)
...