Matlab分段函数在同一图中连续

时间:2018-02-07 04:34:15

标签: matlab plot piecewise

我正在尝试将分段函数绘制为函数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,我需要将P(1)从x(1)绘制到x(2),将P(2)从x(2)绘制到x(3)。

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

1 个答案:

答案 0 :(得分:0)

您所要做的就是将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;

以下是结果输出:

Output