Написание кода для нелинейных задач оценки параметров

Я изо всех сил пытаюсь найти способ написать код, который позволит мне сделать следующее:

У меня есть нелинейная ОДУ под названием fy.

fy = g1*p1+g2*p2+g3*p3; % g1,g2,g3 are real-valued numbers and p1,p2,p3 are vectors   

g1, g2 и g3 — это константы, найденные методом линейной регрессии.

g1 = 591.5121
g2 = 35.1352
g3 = 107.5798

векторы p1, p2 и p3 задаются следующим образом: (извините, я не даю вектор дыр p1, p2 и p3, так как они имеют 1500 строк):

[ p1        p2        p3] =
-0.8714   -0.0527   -0.3103
-0.3154   -0.0101    0.0874
-0.1972   -0.0029    0.1247
-0.1449   -0.0001    0.1294
-0.1151    0.0012    0.1271
-0.0959    0.0020    0.1231
-0.0824    0.0025    0.1187
-0.0723    0.0028    0.1144
-0.0646    0.0030    0.1104
-0.0584    0.0032    0.1068
-0.0533    0.0033    0.1034
-0.0491    0.0034    0.1003
-0.0455    0.0035    0.0975
-0.0425    0.0035    0.0949
-0.0398    0.0036    0.0925
-0.0375    0.0036    0.0903
-0.0355    0.0036    0.0882
-0.0336    0.0036    0.0863
-0.0320    0.0037    0.0845
-0.0305    0.0037    0.0828
-0.0292    0.0037    0.0812
-0.0280    0.0037    0.0797
-0.0268    0.0037    0.0783
-0.0258    0.0037    0.0769
-0.0249    0.0037    0.0757
-0.0240    0.0037    0.0745
-0.0232    0.0037    0.0733
-0.0224    0.0037    0.0722
-0.0217    0.0037    0.0712
-0.0211    0.0037    0.0702
   .         .          .
   .         .          .
   .         .          .

Я решаю ODE следующим образом:

fy = g1*p1+g2*p2+g3*p3;                     (1)
y= xj; % here has xj the same dim. than fy
f = @(yq)interp1(y, fy, yq);
tspan = 0:0.02:1;
x0 = 0.2;
[~, xt] = ode45(@(t,y)f(y), tspan, x0);

И у меня получается очень красивая кривая.

Моя проблема: у меня есть Library:

Library = [L1 L2 L3]; % L1, L2, L3 are vectors of same size than p1, p2, p3

Это Library содержит потенциальные тройки, и ОДИН НАБОР этих троек (данный в строке... скажем, 568) может позволить мне получить такую ​​же красивую кривую, которую я получаю из (1). Другими словами, если я заменю g1, g2 и g3 на l1, l2 и l3 (которые находятся в строке 586 из Library), я должен получить почти такие же результаты, как в (1).

Мне нужно найти способ найти этот НАБОР троек!

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

 fy = l1*p1+l2*p2+l3*p3;                 (2)
 y= xj; % xj % has the same dim than fy
 f = @(yq)interp1(y, fy, yq);
 tspan = 0:0.02:1;
 x0 = 0.2;
 [~, xt2] = ode45(@(t,y)f(y), tspan, x0);

fy из (1) должно быть приблизительно равно fy из (2).

еще немного информации: из линейной регрессии я должен был получить набор троек, которые находятся/выходят из моей библиотеки, но это не так... из-за этого моя система неаккуратна. По этой причине я должен найти способ каким-то образом соединить эти два выхода. (г и л).


person Sergio Haram    schedule 21.02.2014    source источник


Ответы (1)


Вы можете использовать dsearchn, чтобы найти ближайшую тройку.

x = rand(1000,3);
xi = rand(1,3);
k = dsearchn(x,xi);

Кроме того, вы можете сравнить все 1500 сгенерированных кривых с исходной. Существует несколько методов, таких как описанные здесь -similarity">как найти сходство между двумя кривыми и показатель сходства?

person marsei    schedule 21.02.2014
comment
Привет @Macduff, спасибо за быстрый ответ, я попробую ваше предложение и проверю ссылку, которую вы публикуете. - person Sergio Haram; 21.02.2014
comment
Привет, @Macduff, я рассмотрел твое предложение (и попробовал). Моя проблема в том, что ни одно из моих значений g не существует/не существует в Library. Другими словами, у меня нет xi в моем x. Могу ли я по-прежнему использовать dsearchn? - person Sergio Haram; 21.02.2014
comment
Вы имеете в виду, что не можете найти ближайшую тройку? Вы также можете попробовать расстояние по вашему выбору и найти его минимум (например, минимум евклидова расстояния) - person marsei; 21.02.2014
comment
Привет снова @Macduff. Да, у меня нет ни одной тройки, близкой к моим g-значениям. Это моя проблема, я получаю хорошую кривую с g's, и мне нужно найти значения l, которые помогут мне воспроизвести ту же кривую. Тем не менее, g и l не обязательно должны быть близко друг к другу. И нет. - person Sergio Haram; 21.02.2014
comment
Кстати, я пробовал эту проблему, когда у меня есть контроль над g's и l's, и это работает, но мне нужно найти способ заставить его работать без манипулирования моими g значениями. - person Sergio Haram; 21.02.2014