0

如何在matlab中推断850及以上的数据?

x =  200.0000  205.0000  210.0000  215.0000  220.0000  225.0000  230.0000  235.0000  240.0000 245.0000  250.0000  255.0000  260.0000  265.0000  270.0000  275.0000  280.0000  285.0000 290.0000  295.0000  300.0000  305.0000  310.0000  315.0000  320.0000  330.0000  340.0000 350.0000  360.0000  370.0000  380.0000  390.0000  400.0000  410.0000  420.0000  430.0000 440.0000  450.0000  460.0000  470.0000  480.0000  490.0000  500.0000  510.0000  520.0000 530.0000  540.0000  550.0000  560.0000  570.0000  580.0000  590.0000  600.0000  620.0000 640.0000  660.0000  680.0000  700.0000  750.0000  800.0000

y =  0.8900    0.8600    0.8400    0.8200    0.8000    0.7900    0.7700    0.7500    0.7400   0.7200    0.7100    0.6900    0.6800    0.6700    0.6500    0.6400    0.6300    0.6200   0.6100    0.6000    0.5900    0.5800    0.5700    0.5600    0.5500    0.5400    0.5200   0.5100    0.4900    0.4800    0.4700    0.4500    0.4400    0.4300    0.4200    0.4100   0.4000    0.3900    0.3900    0.3800    0.3700    0.3600    0.3600    0.3500    0.3400   0.3400    0.3300    0.3200    0.3200    0.3100    0.3100    0.3000    0.3000    0.2900   0.2800    0.2700    0.2600    0.2600    0.2400    0.2200
4

2 回答 2

4

如果你绘制log(y)vslog(x)你会看到它们遵循线性关系。所以我们可以这样做:

x =  [200.0000  205.0000  210.0000  215.0000  220.0000  225.0000  230.0000  235.0000  240.0000 245.0000  250.0000  255.0000  260.0000  265.0000  270.0000  275.0000  280.0000  285.0000 290.0000  295.0000  300.0000  305.0000  310.0000  315.0000  320.0000  330.0000  340.0000 350.0000  360.0000  370.0000  380.0000  390.0000  400.0000  410.0000  420.0000  430.0000 440.0000  450.0000  460.0000  470.0000  480.0000  490.0000  500.0000  510.0000  520.0000 530.0000  540.0000  550.0000  560.0000  570.0000  580.0000  590.0000  600.0000  620.0000 640.0000  660.0000  680.0000  700.0000  750.0000  800.0000];
y =  [0.8900    0.8600    0.8400    0.8200    0.8000    0.7900    0.7700    0.7500    0.7400   0.7200    0.7100    0.6900    0.6800    0.6700    0.6500    0.6400    0.6300    0.6200   0.6100    0.6000    0.5900    0.5800    0.5700    0.5600    0.5500    0.5400    0.5200   0.5100    0.4900    0.4800    0.4700    0.4500    0.4400    0.4300    0.4200    0.4100   0.4000    0.3900    0.3900    0.3800    0.3700    0.3600    0.3600    0.3500    0.3400   0.3400    0.3300    0.3200    0.3200    0.3100    0.3100    0.3000    0.3000    0.2900   0.2800    0.2700    0.2600    0.2600    0.2400    0.2200];

coeff = polyfit(-log10(x) , log10(y), 1)   % the '1' means linear
xp = [200:1000];
yp = 10^coeff(2)*xp.^(-coeff(1));
plot(x,y,'o',xp,yp)

你得到:

在此处输入图像描述

于 2013-09-08T00:40:10.573 回答
3

我正在尝试将上述功能用于我自己想要进一步扩展的曲线,但面临一些问题。我是这个 slm 工具箱的新手。请建议如何避免此错误时间 1 是 x 轴变量数组,其值范围为:9.8682e-05 9.8687e-05在此处输入图像描述

我会评论外推的危险。没有人比马克吐温在密西西比河上的生活中说得更好,在这里。推断太远,并期望随机垃圾作为预测。

话虽如此,有很多工具可以使用。你可能会做一些类似的指数拟合。这里的问题是你需要找到一个形状合适的模型。如果您还没有从第一原理出发有意义的物理模型,这通常需要进行一些实验才能找到适合您的数据的东西。

样条模型更好,但问题是插值样条外插效果不佳。所以我的建议是使用像SLM这样的工具,然后根据您对推断区域可能/应该发生什么的了解建立起来。

在这里,我对曲线的合理属性进行了一些猜测,因为它是通过相当多的方式推断出来的。我在整个曲线上施加了单调递减约束,二阶导数为正。同样,右端点不允许低于零。

mdl = slmengine(x,y,'knots',[200:100:800,1000:500:2000],... 
   'decreasing','on','concaveup','on','rightminvalue',0,'plot','on');

在此处输入图像描述

于 2013-09-08T00:49:43.567 回答