首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Matlab上外推矩阵值函数?

如何在Matlab上外推矩阵值函数?
EN

Stack Overflow用户
提问于 2014-04-24 21:02:56
回答 1查看 843关注 0票数 0

我有一个矩阵值函数,当x到1时,我试图求它的极限。

因此,在这个例子中,我有三个矩阵v1-3,分别表示在0.85,0.9,0.99的采样值。我现在所做的工作效率很低,主要有以下几点:

代码语言:javascript
复制
for i=1:101
 for j = 1:160
  v_splined = spline([0.85,0.9,0.99], [v1(i,j), v2(i,j), v3(i,j)], [1]);
 end
end

必须有更好、更有效的办法来做到这一点。特别是当足够快的时候,我将面对v将是4-5维向量的情况。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-04-25 01:41:12

免责声明:天真地推断出有风险的业务,自己承担风险。

我要说的是

  1. 使用样条进行外推是一项风险很大的业务,一般不推荐。你知道你的函数在x=1附近的行为吗?
  2. 在只有3个点的情况下,最好使用二阶多项式(抛物线),而不是通过这三个点拟合样条。(除非你有充分的理由不这么做。)
  3. 如果您想使用抛物线(或在有更多点时使用高阶插值多项式),您可以将代码向量化,并使用拉格朗日牛顿多项式进行外推,这可能会给您带来很好的速度。
  4. 使用插值多项式也很容易推广到具有更多点的高阶多项式。然而,这将使外推的风险更大,因为高阶插值多项式往往在区域末端附近剧烈振荡。

如果你想使用拉格朗日多项式来形成抛物线,你的结果是:

代码语言:javascript
复制
v_splined = v1*(1-.9)*(1-.99)/( (.85-.9)*(.85-.99) ) ...
           +v2*(1-.85)*(1-.99)/( (.9-.85)*(.9-.99) ) ...
           +v3*(1-.85)*(1-.9)/( (.99-.85)*(.99-.9) );

我把这个不简化的,所以你可以看到它是如何来自拉格朗日多项式,但显然简化是容易的。还请注意,这消除了循环的需要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23279752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档