Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 编写非线性参数估计问题的代码_Matlab_Parameter Passing_Time Series_Similarity_Curves - Fatal编程技术网

Matlab 编写非线性参数估计问题的代码

Matlab 编写非线性参数估计问题的代码,matlab,parameter-passing,time-series,similarity,curves,Matlab,Parameter Passing,Time Series,Similarity,Curves,我正在努力寻找一种编写代码的方法,可以让我做到以下几点: 我有一个非线性常微分方程,叫做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行: [

我正在努力寻找一种编写代码的方法,可以让我做到以下几点:

我有一个非线性常微分方程,叫做
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 = [L1 L2 L3]; % L1, L2, L3 are vectors of same size than p1, p2, p3
这个
包含潜在的三元组,其中一组三元组(第568行中给出)可以让我得到从(1)中得到的相同曲线。换句话说,如果我用
l1
g2
g3
l2
l3
(在
的第586行中找到)我应该得到与(1)中几乎相同的结果

我要想办法找到这组三元组

我要处理的唯一信息是(1)中的信息和我得到的曲线。如果我必须将所有曲线与(1)中得到的曲线进行比较,那将非常糟糕……因为我的
有1500个三元组,这意味着1500条曲线……在我有了三元组后,我可以用与(1)相同的方法解决以下系统

fy
from(1)应近似于
fy
from(2)


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

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

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

或者,您可以将所有生成的1500条曲线与原始曲线进行比较。这里介绍了几种技巧

Hi@Macduff,感谢您的快速回答,我将尝试您的建议并查看您发布的链接。Hi@Macduff,我已经检查了您的建议(并尝试了)。我的问题是,我的
g
-值在
库中都不存在。换句话说,我的
x
中没有任何
xi
。我还可以使用
dsearchn
?你的意思是找不到任何最近的三元组吗?你也可以尝试选择一个距离并找到它的最小值(例如,欧几里德距离的最小值)再次@Macduff大家好。是的,我没有任何接近我的
g
-值的三元组。这就是我的问题,我用
g
得到了一条很好的曲线,我必须找到
l
-值来帮助我重现同一条曲线。然而,
g
l
不需要彼此接近。而且它们不需要.顺便说一句,我已经尝试过这个问题,我可以控制
g
l
,它可以工作,但我需要找到一种方法,使它不需要操纵我的
g
-值。
x = rand(1000,3);
xi = rand(1,3);
k = dsearchn(x,xi);