2013-08-04 3 views
0

Я пишу программу в Matlab, и у меня есть функция, определенная таким образом.Минимизация Matlab с функцией fminsearch и параметризованной функцией

sum (i=1...100) (a*x(i) + b*y(i) + c) 

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

Я думал использовать fminsearch, чтобы решить эту проблему минимизации, но из Mathworks я понимаю, что функции, которые являются подходящими входами для fminsearch определены как это (пример):

square = @(x) x.^2 

Так что в моем случае я мог бы используйте вектор p=[a, b, c] как значение для минимизации, но тогда я не знаю, как определить оставшуюся часть функции. Как вы можете видеть, число возможных значений индекса i огромно, поэтому я не могу просто суммировать все вместе явно, но мне нужно каким-то образом представить суммирование. Если я буду писать функцию где-то в другом месте, то я вынужден использовать символическое исчисление для a, b и c (объявляя их с syms), и я не уверен, что fminsearch примет это.

Что я могу сделать? Конечно, если fminsearch оказывается неосуществимым для моей ситуации, я принимаю ссылки на использование чего-то другого.

+0

Вы хотите, чтобы минимизировать чистую сумму, при условии отсутствия ограничений? Нет минимума. Думаю, у вас другая проблема. Так почему бы нам не рассказать немного больше, а не смутить нас? –

+0

a = b = c = -inf. сделанный. –

ответ

1

Наиболее общим решением является использование x и y в определении целевой функции:

>> objfun = @(p) sum(p(1).*x + p(2).*y + p(3)); 
>> optp = fminsearch(objfun, po, ...); 
+0

Отлично, поэтому вы можете напрямую использовать sum(). Большое спасибо :) – user2321018

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