2014-01-13 8 views
1

Я использую функцию MATLAB fsolve для решения систем нелинейных уравнений. У меня есть два нелинейных уравнения с двумя переменными (x,y);Matlab: функция Fsolve и все возможные корни

Я пытаюсь найти все возможные корни для обеих переменных. Я отметил, что fsolve дает только один корень. Как можно получить все корни для уравнений?

Мой код, как:

function F = fun(guess) 
    x = guess(1); 
    y = guess(2); 

    F = [2*x -y - exp(-x)); 
     -x + 2*y - exp(-y) ]; 
end 

вызов функции:

guess = [-5 -5] 
fsolve(@fun,guess); 
+1

Отметьте [этот вопрос] (http://stackoverflow.com/questions/16809744/equivalent-to-roots-for-non-polynomials-in-matlab). Я думаю, вы можете изменить [ответ Роди] (http://stackoverflow.com/a/16809955/2338750), изменив вторую и третью входные переменные. –

ответ

0

Докажите, что существует только один корень, так что вам не нужно искать дальше.

Из второго уравнения,

-x + 2·y - exp(-y) = 0 
⇒ x = 2·y - exp(-y) 

Заменитель x в первое уравнение:

2·x - y - exp(-x) = 0 
⇒ 2·(2y-exp(-y)) - y - exp(-(2y-exp(-y)) = 0 

, которая является функцией только y. Стандартное исчисление покажет, что f(y) монотонно возрастает, начинает отрицательное значение на y=-∞ и положительно на y=+∞. Результат тот же, когда вы делаете замену наоборот. Это означает, что для обоих уравнений имеется только один одновременный корень.

QED.

+0

Это всего лишь пример ... Я имею дело с двумя нелинейными уравнениями со степенями 8 и 6 ... Я не писал эти два уравнения, потому что они сложны. так или иначе; мой вопрос: можно ли использовать fsolve, чтобы найти все возможные корни нелинейных уравнений !. и если нет; каков альтернативный метод решения таких нелинейных уравнений. – CS2013

+1

@ CS2013: Затем, в будущем, также включайте комментарий о том, что вы используете фиктивные уравнения.Вы сделали это как * эта * была вашей проблемой. –

+0

@ CS2013: В любом случае, если у вас всего 2 уравнения, вы все равно можете сделать что-то подобное (хотя я бы начал использовать символический набор инструментов математики). Решите уравнение 1 в терминах другого и найдите корни этой функции. Сделайте это наоборот. Корни, общие для обоих, являются ответом. –

0

fsolve не является глобальным решателем. Существуют глобальные решатели (такие как генетические алгоритмы и имитационный отжиг), но они должны работать в течение бесконечного времени, чтобы гарантировать, что возвращаемые решения включают все минимизаторы. На руке почти все остальные решатели оптимизации локальны, а это означает, что они будут гарантировать, что возвращается локальный минимизатор.

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

1) Если проблема выпуклая, то нет локальных минимизаторов, которые не являются глобальными минимизаторами. Таким образом, все, что возвращается fsolve, будет глобальным минимизатором. Более того, этот минимизатор почти всегда уникален. Исключением является то, что технически существует бесконечное количество решений, но все они будут связаны (как на конкретной плоскости). Не может быть конечного числа отдельных минимизаторов, которые не связаны.

2) Полиномы имеют различное количество корней, которые мы можем однозначно определить.

Смежные вопросы