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);