【问题标题】:Extrapolation nonlinear data in matlab [closed]matlab中的外推非线性数据[关闭]
【发布时间】:2013-09-07 23:17:07
【问题描述】:

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

【问题讨论】:

  • 我会说你必须把它适应某种形状,然后很容易得到曲线中的任何其他点。看看fit 方法。

标签: matlab extrapolation


【解决方案1】:

如果您绘制log(y)log(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)

你会得到:

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-06-14
      • 2021-03-17
      • 2018-02-26
      • 2017-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      • 1970-01-01
      相关资源
      最近更新 更多