【问题标题】:Matlab piecewise function in same plot as continuousMatlab分段函数在同一图中连续
【发布时间】:2025-12-31 12:30:06
【问题描述】:

我正在尝试将分段函数绘制为函数 f(x) = 1/(1+25x^2) 的插值。这就是我之前在不分段处理时绘制两个函数的方式。

z = linspace(-1,1,200);
yexact = 1./(1+25.*z.^2);
plot(z,yexact)

N=2;
x = size(N+1);
for i = 1:(N+1)
x(i) = -1+(1+cos(((2*i+1)*pi)/(2*(N+1))));
end
a = polyfit(x,1./(1+25.*x.^2),N);
yinter = polyval(a,z);
plot(z,yexact,z,yinter);
title('N = 2');
legend('exact','interpolation');

这是为 N = 2, 5, 10, 15, 20, 30 完成的。现在我需要更改它以适用于具有相同 N 值的分段。 x(i) 是区间,P(i) 是分段函数的斜率。所以对于 N = 2,我需要绘制从 x(1) 到 x(2) 的 P(1) 和从 x(2) 到 x(3) 的 P(2)。

N=2;
x = size(N+1);
P = size(N);
for i = 1:(N+1)
    x(i) = -1 + 2*i/N;
end
for i = 1:N
    P(i) = (1/(1+25*(x(i)).^2)) + ((i-1-x(i))/(x(i+1)-x(i)))*((1/(1+25*(x(i+1)).^2))-(1/(1+25*(x(i)).^2)));
end

【问题讨论】:

  • 我不认为这是重复的,因为它确实是我不明白的分段方面,在一个图中的多个情节问题中没有提到。跨度>
  • 你的每一个“片段”都是一个新的情节,所以相应地对待它们,你就会被排序

标签: matlab plot piecewise


【解决方案1】:

您所要做的就是将您的N 值定义为一个向量,然后对其进行迭代。在每次迭代中,对当前 N 值的计算返回的结果将绘制在现有轴上(有关更多信息,请访问 Matlab 官方文档的 this link)。

这是一个例子:

z = linspace(-1,1,200);
yexact = 1./(1+25.*z.^2);
plot(z,yexact);

hold on;

for n = [2 5 10]
    x = size(n+1);
    for i = 1:(n+1)
    x(i) = -1+(1+cos(((2*i+1)*pi)/(2*(n+1))));
    end
    a = polyfit(x,1./(1+25.*x.^2),n);
    yinter = polyval(a,z);

    plot(z,yinter);
end

hold off;

这是结果输出:

【讨论】: