2017-01-23 17 views
1

Есть ли какая-либо функция в MATLAB, которая может найти нули вектор-функции? Обычно используемая функция fzero предназначена только для скалярных функций, а также не может найти нули любой скалярной функции, такой как f(x)=x^2.нули векторной функции

+1

Чтобы уточнить, является ли это набор независимых уравнений, которые вы хотите решить вместе (обычно это делается с помощью 'fzero' и' for' loop) или это многопараметрическое уравнение (они, как правило, и должны решаться с помощью методов оптимизации, например, 'fsolve')? – horchler

+0

Это набор многопараметрических уравнений; эти уравнения независимы. –

+0

Попробуйте 'fsolve'. Не могу сказать больше без конкретного примера. – horchler

ответ

1

оптимизации инструментов MatLab имеет в fsolve method, что государства способен:

Решает проблему, указанный F(x) = 0 для x, где F(x) является функцией, которая возвращает значение вектора а. x - вектор или матрица.

В противном случае поиск нулей общей векторнозначной функции может быть выполнен путем минимизации нормы векторного вывода. Предположим, ваша функция F(x) выдает Nx1 вектор. Вы можете попытаться найти нуля, выполнив следующие действия:

y = fminunc(@(x) sum(F(x).^2)); 

или

y = fminsearch(@(x) sum(F(x).^2)); 

Вы бы тогда проверить, если возвращаемый y «достаточно близко» к нулю.

Последний комментарий, алгоритм функции fzero определяет существование корней, проверяя изменения знака. В [документы] явно говорят, что

x = fzero(fun,x0) пытается найти точку x где fun(x) = 0. Это решение - это то, где fun(x) меняет знак. fzero не может найти корень функции, такой как x^2.

В самом деле, в более старых версиях MATLAB (R2012b) документ fzero «s был раздел с его ограничениями, сказал

Команда fzero находит точку, где функция меняет знак. Если функция непрерывна, это также точка, где функция имеет значение около нуля. Если функция не является непрерывной, fzero может возвращать значения, которые являются прерывистыми точками вместо нулей. Например, fzero (@ tan, 1) возвращает 1.5708, прерывистую точку в tan.

Кроме того, команда fzero определяет нуль как точку, где функция пересекает ось x. Точки, в которых функция касается, но не пересекается, ось х - это недопустимые нули. Например, y = x.^2 - парабола, которая касается оси x в точке 0. Так как функция никогда не пересекает ось x, то нигде не найдено. Для функций без допустимых нулей fzero выполняется до тех пор, пока не обнаружено Inf, NaN или комплексное значение.

+0

Спасибо за ваш ответ. Просто еще один вопрос. Если система нелинейных уравнений допускает более одного решения; как мы можем найти их все. Типичным способом является запуск 'fsolve (f, x0)' на сетке исходных догадок. Но есть ли лучший (более эффективный) способ их найти? –

+0

@SaraWinslet, я не знаю других, более эффективных методов, помимо того, что вы сказали, чтобы найти несколько решений. И даже использование сетки исходных догадок не гарантирует, что вы найдете все решения. – lucianopaz

0

Может быть, я неправильно что-то в вашем вопросе, но вы можете попробовать это решение:

y = @(x) x^2; 

fminbnd(y, -100, 100) 

ans = -3.5527e-15 

А может быть, вы можете попробовать solve:

syms x y 
y = @(x) x^2; 
solve(y==0, x); 

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

+0

У меня есть набор уравнений, а не только одно уравнение. –

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

  • Нет связанных вопросов^_^