我正在尝试将分段函数绘制为函数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
答案 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;
以下是结果输出: