如何绘制 P_n(x) 函数的图形?

如何绘制 P_n(x) 函数的图形?

魏尔斯特拉斯逼近定理中的迭代函数图

我在绘制以下函数时遇到问题:

在此处输入图片描述

这是我的代码:

import graph;
size(8cm,6cm,false);

real F(real x){return sin(x)*sin(pi*x);}

typedef real integral(real);

integral G(int n){return new real(real x){
                            return ((1-x^2)^n)/(simpson(new real(real t){return (1-t^2)^n;},-1,1));}; }

integral Pnx(int n){return new real(real x){ // I think it is right!
                            return simpson(new real(real t){return F(t)*G(n)(t-x);},0,1);}; }

draw(Label("$x$",EndPoint),(-2,0)--(2,0),Arrow);
draw(Label("$y$",EndPoint),(0,-2)--(0,4),Arrow);
int smooth=400;
path f=graph(F,0,1,smooth);
draw(f,brown);

pen pe[]={red,green,blue,cyan,magenta,pink,gray};
pe.cyclic=true;
path g;
for (int i : new int[]{5,10,15,20,25,30,35}){
g=graph(G(i),-1,1,smooth);
draw(g,pe[i]);
}

// path h=graph(Pnx(5),0,1,smooth); // can't draw
// draw(h,blue); // can't draw

输出:

加拿大广播公司

问题:

我的计算机能力弱到无法绘制该函数吗?

答案1

尝试一下这个:

settings.tex="pdflatex";
import math;
import graph;
size(8cm,6cm,false);
real sc=0.05;
add(shift(-3*sc,-2*sc)*scale(sc)*grid(24,13,paleblue+0.2bp));
real xmin=0,xmax=1;
real ymin=0,ymax=0.5;
xaxis(xmin,xmax,RightTicks(Step=0.2,step=0.1),above=true);
yaxis(ymin,ymax,LeftTicks (Step=0.1,step=0.05),above=true);

real F(real x){return sin(x)*sin(pi*x);}
typedef real realFreal(real);
real sqrtPi=sqrt(pi);
realFreal Q(int n){ // int((1-t^2)^n,t=-1..1)
                    //   = sqrt(pi)*gamma(n+1)/gamma(n+3/2) 
  return 
    new real(real x){
      return (1-x^2)^n*gamma(n+3/2)/gamma(n+1)/sqrtPi;
    }; 
}
realFreal FPn(int n, real x){
  real c=gamma(n+3/2)/gamma(n+1)/sqrt(pi);
  return new real(real t){return c*sin(t)*sin(pi*t)*(1-(t-x)^2)^n;};
}
realFreal Pn(int n){
  return new real(real x){return simpson(FPn(n,x),0,1);};
}

int smooth=400;
pen pe[]={red,green,blue,cyan,magenta,pink,gray}; pe.cyclic=true;

path g;
for (int ni : new int[]{5,10,15,20,25,30,35}){
  g=graph(Pn(ni),0,1,smooth);
  draw(g,pe[ni]);
}

在此处输入图片描述

相关内容