Я изо всех сил пытаюсь найти способ написать код, который позволит мне сделать следующее:
У меня есть нелинейная ОДУ под названием 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).
еще немного информации: из линейной регрессии я должен был получить набор троек, которые находятся/выходят из моей библиотеки, но это не так... из-за этого моя система неаккуратна. По этой причине я должен найти способ каким-то образом соединить эти два выхода. (г и л).