символьно/параметрическое решение нелинейного уравнения в Matlab

У меня есть эти два уравнения, где x, y и z — переменные, а p1, p2 и p3 — параметры. Может ли MATLAB найти параметрические/символьные решения для x y z на основе p1, p2, p3?

  • 2(x−p1)+2(xy−p3)y = 0
  • 2(y−p2)+2(xy−p3)x = 0

person Mathew P    schedule 29.07.2014    source источник


Ответы (1)


Проще говоря, да. Возьмите все ваши переменные, используйте syms, чтобы определить каждую из ваших переменных, чтобы они являются символическими переменными, затем используйте solve, чтобы решить уравнение за вас. Вы указываете два уравнения как два параметра в solve. Вывод (который мы сохраним в sol) вернет структуру, содержащую поле x и поле y, поскольку ваше уравнение определено относительно двух переменных, а p1,p2,p3 являются параметрами. Другими словами, сделайте это:

syms p1 p2 p3;
syms x y;
sol = solve(2*(x-p1)+2*(x*y-p3)*y == 0, 2*(y-p2)+2*(x*y-p3)*x == 0);

Вы можете получить доступ к решению того, что такое x и y, обратившись к каждому из соответствующих полей:

>> sol.x

ans =

(p1^3 + p3*p1^2*z1 + p1*z1^4 - 1.0*p2*p1*z1^3 + p1*z1^2 - 1.0*p2*p1*z1 + p3*z1^3 - 1.0*p2*p3*z1^2 + p3*z1 - 1.0*p2*p3)/(p1^2 + p3^2)

>> sol.y

ans =

z1

Однако вы получите предупреждение о том, что решение параметризовано символами, но этого и следовало ожидать. Конкретно:

Warning: The solutions are parametrized by the symbols:
z1 = RootOf(z^5 - p2*z^4 + 2*z^3 - z^2*(2*p2 - p1*p3) + z*(p1^2 - p3^2 + 1) - p1*p3 - p2, z)
person rayryeng    schedule 29.07.2014
comment
спасибо rayryeng, я понимаю z1, но я не знаю, откуда появляется z? - person Mathew P; 29.07.2014
comment
откуда з? - person Mathew P; 29.07.2014
comment
@MathewPalsberg - z - это параметр, который вы меняете, поскольку существует бесконечно много решений, удовлетворяющих уравнению. Таким образом, замените z1 тем, что вы видите в приведенном выше заявлении. z — любое значение по вашему выбору. - person rayryeng; 29.07.2014
comment
@MathewPalsberg - всегда пожалуйста. Пожалуйста, примите мой ответ, если это помогло вам! Перейдите в начало моего поста, и слева под кнопками голосования вверх и вниз нажмите на значок галочки. Это символизирует, что вам больше не нужна помощь, и проблема решена. Спасибо и добро пожаловать в StackOverflow! - person rayryeng; 29.07.2014
comment
@rayryeng Обратите внимание, что решений не бесконечно много из-за бесконечного числа возможных значений z. Решением является корень уравнения в z неизвестно (отсюда RootOf); указанное уравнение зависит от параметров p*. - person ; 29.07.2014
comment
Мне было интересно, не может ли Matlab решить параметрическое/символическое уравнение пятой степени (степень 5)? @CST-Link @rayryeng - person Mathew P; 29.07.2014
comment
@MathewPalsberg - Да, может, но у вас есть параметры p1,p2,p3, поэтому решение будет меняться в зависимости от того, что такое p*. - person rayryeng; 30.07.2014
comment
Действительно? Итак, почему Matlab не смог найти корень пятой степени (степень 5) z1 выше? не должен иметь возможность давать от 1 до 5 корней на основе P1, P2 и P3? - person Mathew P; 30.07.2014
comment
Я на самом деле не уверен. Возможно, @CST-Link сможет объяснить это лучше. Удачи! - person rayryeng; 30.07.2014
comment
@rayryeng Как вы, возможно, знаете, не существует общей формулы для обычного алгебраического уравнения 5-й или большей степени: en.wikipedia.org/wiki/Abel%E2%80%93Ruffini_theorem Итак, MATLAB делает все возможное, то есть показывает уравнение для корней. - person ; 31.07.2014
comment
@MathewPalsberg См. приведенный выше ответ на комментарий rayryeng. - person ; 31.07.2014