2013-08-30 1 views
0

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

x²-4=0, 
y²-9=0, 
x*y=myMin, 
x+y=myMin. 

Что такое лучший способ реализовать это в Matlab символически, так что она возвращает

x=2 
y=-3 

Я ищу что-то вроде

syms x y 
S=solve(... 
x²-4==0,... 
y²-9==0,... 
x*y==myMin,... 
x+y==myMin); 
+0

Вы попробовали 'help solve'? Что происходит, когда вы пытаетесь использовать решателя? Не используйте символический набор инструментов, но он должен работать для символических уравнений. –

+0

В нем говорится, что невозможно разрешить что-то подобное символически с помощью matlab ... – Caniko

ответ

0

Проблема, с которой вы сталкиваетесь, заключается в том, что решения нет, даже Matlab не может справиться с этим.

Попробуйте так:

myMin = -6; 

syms x y 
S=solve(... 
x²-4==0,... 
y²-9==0,... 
x*y==myMin,... 
x+y==myMin + 5); %Note the +5 to make it feasible 

Не может попробовать себя, но быстрый расчет подсказывает мне, что это один, по крайней мере разрешимы.

+0

Почему я пытаюсь решить проблему, когда знаю это решение? – Caniko

+0

Если вы не знаете, как использовать функции, это, как правило, хорошая отправная точка. Однако, на мой взгляд, ваша первоначальная проблема была неосуществима. По крайней мере, так, как вы его определили, возможно, не так, как вы это предполагали. –

1

Я не знаю, как указать min как функцию для команды solve. Но вот такой подход, который решает уравнения, а затем пост-обработку результатов в соответствии с вашими ограничениями:

syms x y 
S=solve(x^2-4==0,y^2-9==0); 

[~,idx] = min(double(S.x .* S.y)+double(S.x + S.y)); 

X = double(S.x(idx)) 
Y = double(S.y(idx)) 

Это дает:

X = 
    2 

Y = 
-3 

Символические результаты должны быть преобразованы с помощью команды double, чтобы обработка с помощью функции min.

+0

Предполагая, что вы правильно догадались, что хотел искатель (использовать первые два уравнения в качестве ограничений и сумму двух других в качестве целевой функции) это решение очень приятно! –

+0

@DennisJaheruddin Это больше похоже на ощущение, что эти два ограничения могут быть выражены так. – Schorsch

+0

Структура S имеет 2 символьных вектора 2x1. Вот почему вы можете размножать друг друга и работать с ними как векторы. Но в моем случае переменные будут зависеть друг от друга, чтобы вы не могли преобразовать его в двойное. Ваш ответ делает это для моего примера, но не как проблему оптимизации. – Caniko