matlab - 在 MATLAB 中添加分段多项式

标签 matlab spline piecewise cubic-spline

我需要添加从多个数据集导出的分段多项式。有没有一种简单的方法可以将分段多项式相加而无需插值?换句话说,给定 PP1 和 PP2,有没有办法生成 PP3(其中 PP3 保持分段多项式形式)?例如...

    t1 = linspace(0,1,5);
    t2 = linspace(0,1,7);
    pp1 = spline(t1,sin(pi*t1));
    pp2 = spline(t2,t2.^2);
    close all
    hold on
    tnew = linspace(0,1,50);
    h(:,1) = plot(tnew,ppval(pp1,tnew));
    plot(t1,ppval(pp1,t1),'bs')
    h(:,2) = plot(tnew,ppval(pp2,tnew));
    plot(t2,ppval(pp2,t2),'rs')
    h(:,3) = plot(tnew,ppval(pp1,tnew)+ppval(pp2,tnew));
    legend(h,{'spline of sin(\pi t)','spline of t^2','sin(\pi t)+t^2'},...
                'location','northwest')
    xlabel('t')

但我不想明确指定 tnew,而是想要一个新的分段多项式 pp3,它实际上是 pp1+pp2.

Output from example problem

最佳答案

这可能是获取 pp1 的最简单方法+ pp2添加到问题中的代码:

    pp12 = @(x) ppval(pp1,x)+ppval(pp2,x);

    breaks = unique([pp1.breaks,pp2.breaks]);
    pp3 = spline(breaks,pp12(breaks));

    plot(tnew,ppval(pp3,tnew),'k:');

给出黑色虚线:

Piecewise polynomials

pp3采用分段多项式形式,其中段仅由 pp1 和 pp2 的断点定义。运行max(abs(ppval(pp3,tnew) - pp12(tnew)))产量2.7756e-16 ,其顺序为 eps .

感谢@LuisMendo 和@TroyHaskin 的建议。

关于matlab - 在 MATLAB 中添加分段多项式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31006923/

相关文章:

matlab - 在 Matlab 中选择统计随机数据集进行协同训练的正确方法

c++ - 对 3D 空间中的样条插值感到困惑

python - 使用 SymPy 通过给定点构造符号插值样条

python - Python/Scipy 中的分段常数或 0 度样条插值

matlab - CPLEX API for MATLAB 中的分段线性约束

Python——对 numpy 的分段函数感到困惑

matlab - 有没有办法让函数对 MATLAB 中的变量列表执行相同的操作?

matlab - 该语句不在任何函数内

git - 如何自动更改推送到 GitHub 的 Matlab 文件的文件扩展名?

JFreeChart 使用样条线渲染 StackedAreaChart