Почему matlab выдает ошибку оптимизации fminsearch? - PullRequest
0 голосов
/ 29 марта 2020

У меня такой вопрос, и я сделаю это в Matlab. Но я получаю некоторые ошибки:

Найти значение x ∈ [0, 1], которое минимизирует наибольшее собственное значение матрицы A (x) = xM + (1 − x) P, где M - это квадрат 5 × 5 волхвов c, а P - матрица 5 × 5 Pascal.

Мой код Matlab:

 %Define Matrices 
 M = magic(5);
 P = pascal (5);

% Define the variable x
 syms x

%Define the given matrix A
>> A = x*M + (1-x)*P;

%Define the eigenvalue lambda as y;
 syms y

%Find determinant of |A - lambda * I|
 D = det (A - y*eye(5))

%Define Objective function 
objective = @(y) y

%And Define the constraint
constraint = @(x,y) (-1)*D

%initial value x0 = (0:0.001:1);

%Minimization problem solving 

x = fmincon(objective, constraint, x0)

Я получаю эту ошибку;

Ошибка при использовании fmincon (строка 221). Для FMINCON следующие данные должны иметь тип данных double: 'X0'.

Или Если я использую другую функцию: fminsearch

x = fminsearch (цель, ограничение, x0) В этом случае я получаю следующую ошибку:

Ошибка при использовании fminsearch (строка 96 ) FMINSEARCH принимает входные данные только типа данных double.

Как я могу справиться с этими ошибками? Где моя ошибка? Как я могу их исправить?

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Я думаю, что вы ищете, может быть fminbnd, что помогает

Найти минимум функции одной переменной на фиксированном интервале

n = 5;
M = magic(n);
P = pascal(n);
x = fminbnd(@(x) max(eig(x*M + (1-x)*P)),0,1);

такой что

>> x
x =  0.79603
1 голос
/ 29 марта 2020

Я подозреваю, что вы не показали нам правильный код, так как у вас там sums. Я подозреваю, что вы имеете в виду syms.

fmincon работает только для числовых данных c, а не для символов c данных.

...