我在绘制以下函数时遇到问题:
这是我的代码:
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]);
}