Matlab fmincon | Мне нужно минимизировать функцию (тк, х) только х - PullRequest
0 голосов
/ 07 января 2020

У меня есть массив с данными о положении тела
Пусть A - это массив с данными о положении тела (вектор 218 * 1)

enter image description here

I нужно приблизить этот массив к функции x (1) * exp (x (2) * t) * cos (x (3) * t + x (4)). Для этого нам нужно минимизировать norm(x(1)*exp(x(2)*t)*cos(x(3)*t+x(4))-A) от x и найти x (1), x (2), x (3), x (4).

Для этого я написал в Matlab:

point=load('point5.txt');%array with body position data
tk=linspace(0,218/29,218);%moments of time for the approximation function, 29 this is frequency

fun = @(x)norm(x(1)*exp(x(2)*tk')*cos(x(3)*tk'+x(4))-point);
x0 = [0,0,4,0];
A = [1,1,1,1];
b = 7;
x = fmincon(fun,x0,A,b)

Но есть некоторые ошибки:

Ошибка при использовании * Внутренние размеры матрицы должны совпадать.

Ошибка в точке 5> @ (x) норма (x (1)) * exp (x (2) * tk ') * cos (x (3) * tk' + x (4)) - точка)

Ошибка в fmincon (строка 534) initVals.f = feval (funfcn {3}, X, varargin {:});

Ошибка в точке 5 (строка 9) x = fmincon (fun, x0, A, b)

Причина: ошибка исходного пользователя поставленная целевая функция оценки. FMINCON не может продолжить.

Я не понимаю, что не так, размеры tk и point одинаковы

Пожалуйста, помогите. Как я могу минимизировать f (x, tk) только x? Если вам известен вариант реализации Python, это также будет очень полезно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...