0

我正在努力寻找一种方法来编写可以让我执行以下操作的代码:

我有一个非线性 ODE,称为fy.

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

g1g2并且g3是通过线性回归方法找到的常数。

g1 = 591.5121
g2 = 35.1352
g3 = 107.5798

向量p1p2p3给出如下:(对不起,我没有给出孔向量,p1因为它们有1500 行p2p3

[ 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,g2g3, and (在 586 行中找到) l1,我应该得到与 (1) 中几乎相同的结果。l2l3Library

我需要找到一种方法来找到这组三元组!

我可以处理的唯一信息是来自 (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)。

更多信息:从线性回归中,我应该得到一组在我的库中存在/退出的三元组,但事实并非如此......因此,我的系统很草率。出于这个原因,我必须找到一种方法以某种方式连接这两个输出。(g 和 l)。

4

1 回答 1

1

您可以使用dsearchn找到最近的三元组。

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

或者,您可以将所有 1500 条生成的曲线与原始曲线进行比较。有几种技术,例如此处描述的技术,如何找到两条曲线之间的相似度和相似度得分?

于 2014-02-21T12:28:12.163 回答