You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
491 lines
17 KiB
491 lines
17 KiB
2 years ago
|
% This file's purpose is to compare quadtree, gauss-green, and szego-green...
|
||
|
% quadrature methods using a small suite of test cases defined by two
|
||
|
% domains and various integrands:
|
||
|
% Domains:
|
||
|
close all;
|
||
|
clear all;
|
||
|
shape=3;
|
||
|
testIntegrands=0;
|
||
|
% 1. A circular region whose boundary is defined by four rational curves
|
||
|
lroffset=[.3957106819596820 -1.5728593603867];
|
||
|
Circletemp=load("Circle.mat"); Circle= Circletemp.Circle1;
|
||
|
Circle(1:3:end,:)=Circle(1:3:end,:)+lroffset(1).*Circle(3:3:end,:);
|
||
|
Circle(2:3:end,:)=Circle(2:3:end,:)+lroffset(2).*Circle(3:3:end,:);
|
||
|
% 2. A region defined by the intersection of two circular regions.
|
||
|
offset=.1364728595817;
|
||
|
C1=Circle; C1(2:3:end,:)=C1(2:3:end,:)+offset.*C1(3:3:end,:);
|
||
|
C2=Circle; C2(2:3:end,:)=C2(2:3:end,:)-offset.*C1(3:3:end,:);
|
||
|
C3=Circle; C3(1:3:end,:)=C3(1:3:end,:)+2*offset.*C3(3:3:end,:);
|
||
|
InterCirclestemp=RatboolEls(C1,C2,true); InterCircles=InterCirclestemp{1};
|
||
|
InterCirclesShift=InterCircles; InterCirclesShift(2:3:end,:)=InterCirclesShift(2:3:end,:)+(offset).*InterCirclesShift(3:3:end,:);
|
||
|
WeirdShapetemp=RatboolEls(InterCirclesShift,C3,false); WeirdShape=WeirdShapetemp{1};
|
||
|
WeirdShape(1:3:end,:)=WeirdShape(1:3:end,:)-.5*WeirdShape(3:3:end,:);
|
||
|
WeirdShape(2:3:end,:)=WeirdShape(2:3:end,:)+1.5*WeirdShape(3:3:end,:);
|
||
|
Circles{1}=Circle;
|
||
|
|
||
|
testFig=load("testFig3"); testFigs= testFig.testFig;
|
||
|
|
||
|
% plot_rat_bern_poly(InterCircles,2,.001,'k')
|
||
|
% plot_rat_bern_poly(WeirdShape,2,.001,'k')
|
||
|
% Integrands:
|
||
|
% 1. Monomials up to 6th degree: (1, x, y, ...)
|
||
|
counter=1;
|
||
|
for i=0:5
|
||
|
for j=0:i
|
||
|
a=i-j; b=j;
|
||
|
monfuncts(counter) = {@(x,y) x.^a.*y.^(b)};
|
||
|
bla(counter,:)=[a,b];
|
||
|
counter=counter+1;
|
||
|
end
|
||
|
end
|
||
|
monfuncts(7)= {@(x,y) (2*x.^2 +x.*y - y +2)};
|
||
|
monfuncts(8)= {@(x,y) sqrt((x+10).^2+(x+10).*(y+10).^2 +x)};
|
||
|
% 2. Three polynomials of degree 2 (bilinear), 4 (biquadratic), and 6
|
||
|
% (bicubic)
|
||
|
polyfuncts={@(x,y) (2*x.^2 +x.*y - y +2);
|
||
|
@(x,y) (2*x.^2.*y.^2 +.3*x.^2.*y - y.^4 + 3*x +2);
|
||
|
@(x,y) (x.^5 - 5*y.^3.*x.^3 + .2*x.^2 + 2*y.*x.^2 +3);};
|
||
|
% 3. A rational function of degree 4 and an exponential function.
|
||
|
otherfuncts={@(x,y) (y.^3 - (x.^3.*y.^2) - (x.*y) -3)./((x.^2).*(y.^2) +10);
|
||
|
@(x,y) 10*(exp( - x.^2 ) + 2*y);
|
||
|
@(x,y) sqrt((x+10).^2+(x+10).*(y+10).^2 +x)};
|
||
|
addpath("../Rational_Quadrature/Matlab/Src",...
|
||
|
"../Rational_Quadrature/Matlab/Tests",...
|
||
|
"../Rational_Quadrature/Matlab/ThirdPartySupportingCode")
|
||
|
d=2;
|
||
|
gaussOrders=[2:25];
|
||
|
% Test cases: There are 3 functions that we will consider, two of which have
|
||
|
% known antiderivatives. These functions were taken from
|
||
|
|
||
|
|
||
|
if testIntegrands==0
|
||
|
integrands=monfuncts;
|
||
|
elseif testIntegrands==1
|
||
|
integrands=polyfuncts;
|
||
|
elseif testIntegrands==2
|
||
|
integrands=otherfuncts;
|
||
|
end
|
||
|
monfunctmat=zeros(length(integrands),6);
|
||
|
monfunctquad=zeros(length(integrands),6);
|
||
|
|
||
|
% if shape==0
|
||
|
shapeObject{1}=Circle;
|
||
|
% SO{1}=Circle;
|
||
|
% elseif shape==1
|
||
|
% shapeObject=InterCircles;
|
||
|
% elseif shape==2
|
||
|
% shapeObject=WeirdShape;
|
||
|
% elseif shape==3
|
||
|
% shapeObject=weirdObject;
|
||
|
% end
|
||
|
% figure(7)
|
||
|
% plot_rat_bern_poly([C1;C2],2,.001,"k.")
|
||
|
% hold on
|
||
|
% plot_rat_bern_poly(shapeObject,2,.001,"b.")
|
||
|
% figure(8)
|
||
|
% plot_rat_bern_poly([C1;C2],2,.001,"k.")
|
||
|
% hold on
|
||
|
% plot_rat_bern_poly(shapeObject,2,.001,"b.")
|
||
|
|
||
|
for jjj=1:5
|
||
|
|
||
|
SO=generateTestFigures(jjj);
|
||
|
if jjj==4
|
||
|
M=3;
|
||
|
else
|
||
|
M=2;
|
||
|
end
|
||
|
componentsizes=cellfun(@length,SO);
|
||
|
% SO{1}=SOS{2};
|
||
|
% shapeObject=SO;
|
||
|
% shapeObject{1}=shapeObject{1}+1e-3*rand(size(shapeObject{1}));
|
||
|
% shapeObject{2}=shapeObject{2}+1e-5*rand(size(shapeObject{2}));
|
||
|
RationalOn=0;
|
||
|
numIntegrands=length(integrands);
|
||
|
elemSize=size(shapeObject,1)/3;
|
||
|
int2evals={};
|
||
|
int2errs={};
|
||
|
int2evals(1:length(integrands))={zeros(length(numIntegrands),1)};
|
||
|
int2errs(1:length(integrands))={zeros(length(numIntegrands),1)};
|
||
|
ggevals=int2evals;
|
||
|
sgevals=int2evals;
|
||
|
global evalCounter;
|
||
|
global scatterEvals;
|
||
|
scatterEvals=0;
|
||
|
for i=8:8%length(integrands)
|
||
|
% figure(1)
|
||
|
field = @(x,y) field2(x,y,integrands{i});
|
||
|
if shape==0
|
||
|
truev = integral2(field, -1+lroffset(1),1+lroffset(1), @(x)-sqrt(1-(x-lroffset(1)).^2)+lroffset(2), @(x)sqrt(1-(x-lroffset(1)).^2)+lroffset(2),'AbsTol',1e-17,'RelTol',1e-18);
|
||
|
elseif shape==1
|
||
|
truev = integral2(field, -sqrt(1-offset^2)+lroffset(1), sqrt(1-offset^2)+lroffset(1), @(x)-sqrt(1-(x-lroffset(1)).^2)+offset+lroffset(2),@(x)sqrt(1-(x-lroffset(1)).^2)-offset+lroffset(2),'AbsTol',1e-17,'RelTol',1e-18);
|
||
|
elseif shape==2
|
||
|
% fanti=@(a,b) gauss1D(@(x)field(x,b),0,a,15);
|
||
|
% mfanti=@(a,b) arrayfun(fanti,a,b);
|
||
|
SO{1}=shapeObject; truev=ggPolygonIntegrate(SO,field,15,15);
|
||
|
elseif shape==2
|
||
|
fanti=@(a,b) gauss1D(@(x)field(x,b),0,a,15);
|
||
|
mfanti=@(a,b) arrayfun(fanti,a,b);
|
||
|
SO{1}=shapeObject; truev=ggPolygonIntegrate(SO,field,40,40);
|
||
|
elseif shape==3
|
||
|
fanti=@(a,b) gauss1D(@(x)field(x,b),0,a,40);
|
||
|
mfanti=@(a,b) arrayfun(fanti,a,b);
|
||
|
truev=ggPolygonIntegrate(SO,field,40,40);
|
||
|
end
|
||
|
for jj=1:14
|
||
|
evalCounter=0;
|
||
|
if jj==100000
|
||
|
scatterEvals=1;
|
||
|
else
|
||
|
scatterEvals=0;
|
||
|
end
|
||
|
if shape==0
|
||
|
int2errs{i}(jj) = truev-integral2(field, -1+lroffset(1),1+lroffset(1), @(x)-sqrt(1-(x-lroffset(1)).^2)+lroffset(2), @(x)sqrt(1-(x-lroffset(1)).^2)+lroffset(2),'RelTol',10^(-jj));
|
||
|
int2evals{i}(jj)=evalCounter;
|
||
|
elseif shape==1
|
||
|
int2errs(jj) = truev-integral2(field, -sqrt(1-offset^2)+lroffset(1), sqrt(1-offset^2)+lroffset(1), @(x)-sqrt(1-(x-lroffset(1)).^2)+offset+lroffset(2),@(x)sqrt(1-(x-lroffset(1)).^2)-offset+lroffset(2),'RelTol',10^(-jj+3));
|
||
|
int2evals(jj)=evalCounter;
|
||
|
end
|
||
|
end
|
||
|
% int2errs(int2errs==0)=1e-17;
|
||
|
% figure(1)
|
||
|
% semilogy(int2evals,abs(int2errs),'k.','MarkerSize',36)
|
||
|
% hold on
|
||
|
% plot_rat_bern_poly(shapeObject,2,.001,'k');
|
||
|
% Intersect each element, store moment of each material
|
||
|
% fanti=@(a,b) gauss1D(@(x)field(x,b),0,a,7);
|
||
|
% mfanti=@(a,b) arrayfun(fanti,a,b);
|
||
|
% SO{1}=shapeObject;
|
||
|
|
||
|
% s=plot_bern_poly(Intersection{1},2,.001,{},{},true);
|
||
|
% plot_rat_bern_poly(Intersection{1},2,.1,'r');
|
||
|
RationalOn=1;
|
||
|
ggevals=zeros(length(gaussOrders),1);
|
||
|
ggerrs=zeros(length(gaussOrders),1);
|
||
|
sgevals=zeros(length(gaussOrders),1);
|
||
|
sgerrs=zeros(length(gaussOrders),1);
|
||
|
for jj=8:length(gaussOrders)
|
||
|
j=gaussOrders(jj);
|
||
|
if testIntegrands==0
|
||
|
kk=M*ceil(invTri(i-1))+M*(3);
|
||
|
kg=ceil(invTri(i-1)+1);
|
||
|
if i==7
|
||
|
kk=M*ceil(invTri(i-2))+M*(3);
|
||
|
kg=ceil(invTri(i-2)+1);
|
||
|
elseif i==8
|
||
|
kk=M*2+M*3;
|
||
|
kg=j;
|
||
|
end
|
||
|
elseif testIntegrands==1
|
||
|
kk=4*i+6;
|
||
|
kg=i;
|
||
|
else
|
||
|
kg=4;
|
||
|
kk=j;
|
||
|
end
|
||
|
evalCounter=0;
|
||
|
fanti=@(a,b) gauss1D(@(x)field(x,b),0,a,kg);
|
||
|
% intxw= @(a,b) gaussXW(@(x)field(x,b),0,a,j);
|
||
|
mfanti=@(a,b) arrayfun(fanti,a,b);
|
||
|
% mintxw= @(a,b) arrayfun(intxw,a,b);
|
||
|
evalCounter=0;
|
||
|
ggerrs(jj)=ggPolygonIntegrate(SO,field,jj,kg)-truev;
|
||
|
ggevals(jj)=evalCounter;
|
||
|
evalCounter=0;
|
||
|
% if jj==9
|
||
|
% scatterEvals=1;
|
||
|
% else
|
||
|
% scatterEvals=0;
|
||
|
% end
|
||
|
sgerrs(jj)=sgPolygonIntegrate(SO,field,jj,kk,kg)-truev;
|
||
|
scatterEvals=0;
|
||
|
sgevals(jj)=evalCounter;
|
||
|
evalCounter=0;
|
||
|
end
|
||
|
% sgerrs;
|
||
|
% ggerrs;
|
||
|
% mpr=find(abs(sgerrs)<(3*min(abs(sgerrs(abs(sgerrs)>0)))),1);
|
||
|
% mpg=find(abs(ggerrs)<(3*min(abs(sgerrs(abs(sgerrs)>0)))),1);
|
||
|
% monfunctmat(i,jjj)=[ggerrs(find(abs(ggevals)>sgevals(mpr),1))/abs(sgerrs(mpr))];
|
||
|
% monfunctquad(i,jjj)=sgevals(mpr)/ggevals(mpg);
|
||
|
% figure(i)
|
||
|
ggev{i,jjj}=ggevals;
|
||
|
gger{i,jjj}=ggerrs;
|
||
|
% semilogy(ggevals,abs(ggerrs),'bx')
|
||
|
% hold on
|
||
|
Quadpoints=(invTri(i-1)*kg*+3*invTri(i-1))*M*(sum(componentsizes)/3);
|
||
|
% Quadpoints=(kk+1)*kg*(sum(componentsizes)/3);
|
||
|
sgindex=find(sgevals>Quadpoints,1);
|
||
|
% semilogy(sgevals(sgindex),abs(sgerrs(sgindex)),'ro')
|
||
|
if i==7
|
||
|
sger
|
||
|
end
|
||
|
if i<8
|
||
|
sgev{i,jjj}=sgevals(1);
|
||
|
if ~isempty(sgindex)
|
||
|
sger{i,jjj}=sgerrs(sgindex);
|
||
|
else
|
||
|
sger{i,jjj}=sgerrs(1);
|
||
|
end
|
||
|
else
|
||
|
sgev{i,jjj}=sgevals;%(sgindex);
|
||
|
sger{i,jjj}=sgerrs;%(sgindex);
|
||
|
end
|
||
|
% xlim([0,max(max(ggevals),min(int2evals))])
|
||
|
end
|
||
|
|
||
|
end
|
||
|
% end
|
||
|
% Error = (sum(IntersectionI)-integral2(field,-2*.26180283,2*.26180283,-2*.26180283,2*.26180283))./integral2(field,-2*.26180283,2*.26180283,-2*.26180283,2*.26180283,'AbsTol',0);
|
||
|
% Error=abs(sum(IntersectionI1(:,gaussOrders),1)-truev);
|
||
|
% figure
|
||
|
% nplot=1000;
|
||
|
% epts=1.5;
|
||
|
% [x,y]= meshgrid([-epts:(epts/nplot):epts]+3,[(-epts:(epts/nplot):epts)']+3); x=x(:); y=y(:); xp=x; yp=y;
|
||
|
% xp(x.^2+y.^2>1)=nan; yp(x.^2+y.^2>1)=nan;
|
||
|
% surf(reshape(xp,2*nplot+1,2*nplot+1),reshape(yp,2*nplot+1,2*nplot+1),zeros(2*nplot+1,2*nplot+1),field(reshape(xp,2*nplot+1,2*nplot+1),reshape(yp,2*nplot+1,2*nplot+1)),'edgecolor','none');
|
||
|
% view([0 90])
|
||
|
% hold on
|
||
|
% for i=1:nElemMesh1
|
||
|
% % Mesh1{i}=Mesh1{i};
|
||
|
% plot_bern_poly(Mesh1{i},2,.001,{},{'k'},false)
|
||
|
% end
|
||
|
% plot_bern_poly(shapeObject,2,.001,{},{'k'},false)
|
||
|
% for i=1:nElemMesh1
|
||
|
% % Mesh1{i}=Mesh1{i};
|
||
|
% plot_rat_bern_poly(Mesh2{i},2,.001,'k')
|
||
|
% end
|
||
|
% plot_rat_bern_poly(shapeObject,2,.001,'b')
|
||
|
% printError= floor(log(Error)/log(10));
|
||
|
% title({sprintf('Background function: $5y^3 + x^2 + 2y +3$, Error $\\approx 10^{%d}$',printError),sprintf('Quadrature points per side of intersection: $%d^2$',gaussOrders(end-1)-1)},'interpreter','latex','FontSize',16)
|
||
|
% % title({sprintf('Background function: $\\frac{y^3 - x^3 y^2 - xy -3}{x^2y^2 + 100}$, Error $\\approx 10^{%d}$',printError),sprintf('Quadrature points per side of intersection: $%d^2$',gaussOrders(end-1)-1)},'interpreter','latex','FontSize',16)
|
||
|
% axis off
|
||
|
% colorbar
|
||
|
% title({sprintf('Background function: $\\frac{y^3 - x^3 y^2 - xy -3}{x^2y^2 + 100}$')},'interpreter','latex','FontSize',16)
|
||
|
% figure;
|
||
|
% if isempty(find(monfunctmat(:,1)==0))
|
||
|
% lasti=size(monfunctmat,1)
|
||
|
% else
|
||
|
% lasti=find(monfunctmat(:,1)==0);
|
||
|
% end
|
||
|
% for jjj=1:1
|
||
|
% for i=1:invTri(lasti)
|
||
|
% ertemp=monfunctmat(find(invTri(0:length(monfuncts))==i-1),1);
|
||
|
% er(i)=mean(ertemp(ertemp~=0 & ertemp~=Inf & ~isnan(ertemp)));
|
||
|
% end
|
||
|
% plot(0:(invTri(lasti)-1),log(abs(er))/log(10));
|
||
|
% end
|
||
|
% for i=1:invTri(lasti)
|
||
|
% er(i)=mean(monfunctquad(find(invTri(0:length(monfuncts))==i-1),1));
|
||
|
% end
|
||
|
% plot(0:(invTri(lasti)-1),er)
|
||
|
figure('Position',[10 10 500 700])
|
||
|
for jjj=1:5
|
||
|
ggert=gger(:,jjj);
|
||
|
ggevt=ggev(:,jjj);
|
||
|
sgert=sger(:,jjj);
|
||
|
sgevt=sgev(:,jjj);
|
||
|
% for i=1:3
|
||
|
% subplot(5,5,(jjj-1)*5 +i+1)
|
||
|
% if jjj==1
|
||
|
% if i==1
|
||
|
% title({"$0$-th degree","monomial"},'Interpreter','Latex','FontName','times')
|
||
|
% elseif i==2
|
||
|
% title({"$1$-st degree","monomials"},'Interpreter','Latex','FontName','times')
|
||
|
% elseif i==3
|
||
|
% title({"$2$-nd degree","monomials"},'Interpreter','Latex','FontName','times')
|
||
|
% end
|
||
|
% end
|
||
|
% set(gca,'YTickLabel',[]);
|
||
|
% yyaxis('right')
|
||
|
% set(gca,'YColor','black','FontName','times');
|
||
|
% gMer=mean(abs(cat(3,ggert{invTri(0:5)==i-1})),3);
|
||
|
% gMev=mean(abs(cat(3,ggevt{invTri(0:5)==i-1})),3);
|
||
|
% sMer=mean(abs(cat(3,sgert{invTri(0:5)==i-1})),3);
|
||
|
% sMev=mean(abs(cat(3,sgevt{invTri(0:5)==i-1})),3);
|
||
|
% sMer(sMer==0)=1e-15;
|
||
|
% semilogy(gMev,gMer,'bx','MarkerSize',4)
|
||
|
% hold on
|
||
|
% semilogy(sMev,sMer,'r.','MarkerSize',15)
|
||
|
% % if i==1 && j==3
|
||
|
% % ylabel("Absolute Error",'Interpreter','Latex','FontName','times','FontSize',16)
|
||
|
% % end
|
||
|
% if i==2 && jjj==5
|
||
|
% xlabel({"Number of quadrature points"},'Interpreter','Latex','FontName','times','FontSize',16)
|
||
|
% end
|
||
|
% axis square
|
||
|
% ylim([1e-17 1])
|
||
|
% yticks([1e-15 1e-10 1e-5 1])
|
||
|
% if i<4
|
||
|
% set(gca,'YTickLabel',[]);
|
||
|
% end
|
||
|
% xtop=max(gMev);
|
||
|
% xticks([0 floor(xtop/2) xtop]);
|
||
|
% end
|
||
|
% subplot(5,5,(jjj-1)*5 +5)
|
||
|
%
|
||
|
% if jjj==1
|
||
|
% title("$p_1(x,y)$",'Interpreter','Latex','FontName','times')
|
||
|
% end
|
||
|
% set(gca,'YTickLabel',[]);
|
||
|
% yyaxis('right')
|
||
|
% set(gca,'YColor','black','FontName','times');
|
||
|
% gMer=abs(ggert{7});
|
||
|
% gMev=ggevt{7};
|
||
|
% sMer=abs(sgert{7});
|
||
|
% sMer(sMer==0)=1e-15;
|
||
|
% sMev=sgevt{7};
|
||
|
% semilogy(gMev,gMer,'bx','MarkerSize',4)
|
||
|
% hold on
|
||
|
% semilogy(sMev,sMer,'r.','MarkerSize',15)
|
||
|
% axis square
|
||
|
% ylim([1e-17 1])
|
||
|
% yticks([1e-15 1e-10 1e-5 1])
|
||
|
% % set(gca,'YTickLabel',[]);
|
||
|
% xtop=max(gMev);
|
||
|
% xticks([0 floor(xtop/2) xtop]);
|
||
|
% yyaxis('right')
|
||
|
% set(gca,'YColor','black','FontName','times');
|
||
|
% if jjj==3
|
||
|
% ylabel("Absolute Error",'Interpreter','Latex','FontName','times')
|
||
|
% end
|
||
|
subplot(5,2,(jjj-1)*2 +2)
|
||
|
if jjj==1
|
||
|
title("$f_2(x,y)$",'Interpreter','Latex','FontName','times')
|
||
|
end
|
||
|
|
||
|
gMer=abs(ggert{8});
|
||
|
gMev=ggevt{8};
|
||
|
sMer=abs(sgert{8});
|
||
|
sMev=sgevt{8};
|
||
|
sMer(sMer==1e-17)=1e-15;
|
||
|
semilogy(gMev,gMer,'bx','MarkerSize',4)
|
||
|
hold on
|
||
|
semilogy(sMev,sMer,'r.','MarkerSize',15)
|
||
|
axis square
|
||
|
yyaxis('right')
|
||
|
set(gca,'yscale','log')
|
||
|
ylim([1e-17 1])
|
||
|
yticks([1e-15 1e-10 1e-5 1])
|
||
|
% set(gca,'YTickLabel',[]);
|
||
|
set(gca,'YColor','black','FontName','times');
|
||
|
if jjj==3
|
||
|
ylabel("Absolute Error",'Interpreter','Latex','FontName','times','FontSize',16)
|
||
|
end
|
||
|
if jjj==5
|
||
|
xlabel({"Number of ","Integration Points"},'Interpreter','Latex','FontName','times','FontSize',12)
|
||
|
end
|
||
|
yyaxis('left')
|
||
|
set(gca,'YTickLabel',[]);
|
||
|
xtop=max(gMev);
|
||
|
xlim([0 2*xtop/5])
|
||
|
xticks([0 floor(xtop/5) floor(2*xtop/5)]);
|
||
|
end
|
||
|
for jjj=1:5
|
||
|
subplot(5,2,(jjj-1)*2 +1)
|
||
|
ss=generateTestFigures(jjj);
|
||
|
for ii=1:length(ss)
|
||
|
plot_rat_bern_poly(ss{ii},2,.01,{})
|
||
|
end
|
||
|
ll=get(gca,'Children')
|
||
|
for i=1:length(ll)
|
||
|
set(ll(i),'SizeData',5)
|
||
|
end
|
||
|
if jjj==3 || jjj==2
|
||
|
axis equal
|
||
|
else
|
||
|
axis ij
|
||
|
axis square
|
||
|
end
|
||
|
axis off
|
||
|
if jjj==1
|
||
|
title("Region",'Interpreter','Latex')
|
||
|
end
|
||
|
end
|
||
|
% subplot(5,4,12)
|
||
|
% ylabel("Absolute Error",'FontSize',16,'Interpreter','Latex','FontName','times')
|
||
|
% subplot(5,4,19)
|
||
|
% xlabel("Number of Quadrature Points",'FontSize',16,'Interpreter','Latex','FontName','times')
|
||
|
% figure(7)
|
||
|
% p=3
|
||
|
|
||
|
figure('Position',[10 10 500 700])
|
||
|
for jjj=1:1
|
||
|
ggert=gger(:,8);
|
||
|
ggevt=ggev(:,8);
|
||
|
sgert=sger(:,8);
|
||
|
sgevt=sgev(:,8);
|
||
|
for i=1:6
|
||
|
subplot(3,2,i)
|
||
|
if jjj==1
|
||
|
if i==1
|
||
|
title("$0$th Moment",'Interpreter','Latex','FontName','times')
|
||
|
elseif i==2
|
||
|
title("$1$st Moments",'Interpreter','Latex','FontName','times')
|
||
|
elseif i==3
|
||
|
title("$2$nd Moments",'Interpreter','Latex','FontName','times')
|
||
|
elseif i==4
|
||
|
title("$3$st Moments",'Interpreter','Latex','FontName','times')
|
||
|
elseif i==5
|
||
|
title("$4$th Moments",'Interpreter','Latex','FontName','times')
|
||
|
elseif i==6
|
||
|
title("$5$th Moments",'Interpreter','Latex','FontName','times')
|
||
|
end
|
||
|
end
|
||
|
set(gca,'YTickLabel',[]);
|
||
|
yyaxis('right')
|
||
|
set(gca,'YColor','black','FontName','times');
|
||
|
gMer=mean(abs(cat(3,ggert{invTri(0:21)==i-1})),3);
|
||
|
gMev=mean(abs(cat(3,ggevt{invTri(0:21)==i-1})),3);
|
||
|
sMer=mean(abs(cat(3,sgert{invTri(0:21)==i-1})),3);
|
||
|
sMev=mean(abs(cat(3,sgevt{invTri(0:21)==i-1})),3);
|
||
|
iMer=mean(abs(cat(3,int2errs{invTri(0:21)==i-1})),3);
|
||
|
iMev=mean(abs(cat(3,int2evals{invTri(0:21)==i-1})),3);
|
||
|
sMer(sMer==0)=2e-16;
|
||
|
semilogy(gMev,gMer,'bx','MarkerSize',15)
|
||
|
hold on
|
||
|
semilogy(sMev,sMer,'r.','MarkerSize',35)
|
||
|
semilogy(iMev,iMer,'ko','MarkerSize',15)
|
||
|
% if i==1 && j==3
|
||
|
% ylabel("Absolute Error",'Interpreter','Latex','FontName','times')
|
||
|
% end
|
||
|
% if i==2 && j==5
|
||
|
% xlabel({"Number of quadrature points"},'Interpreter','Latex','FontName','times')
|
||
|
% end
|
||
|
axis square
|
||
|
ylim([1e-16 1])
|
||
|
yticks([1e-15 1e-10 1e-5 1])
|
||
|
if i==1 | i==3 | i==5
|
||
|
set(gca,'YTickLabel',[]);
|
||
|
end
|
||
|
xtop=floor(1.1*max(min(iMev),min(sMev)));
|
||
|
xlim([0 xtop]);
|
||
|
xticks([0 floor(xtop/2) xtop]);
|
||
|
end
|
||
|
end
|
||
|
subplot(3,2,4)
|
||
|
ylabel("Absolute Error",'FontSize',16,'Interpreter','Latex','FontName','times')
|
||
|
subplot(3,2,5)
|
||
|
xlabel(" Number of Quadrature Points",'FontSize',16,'Interpreter','Latex','FontName','times')
|
||
|
figure(7)
|
||
|
p=3
|
||
|
|
||
|
|
||
|
for ii=1:2
|
||
|
for i=(1:size(shapeObject{ii},1)/3)
|
||
|
% plotNURBScurve(2,p,[zeros(1, p+1) ones(1, p+1)],shapeObject{ii}(((i-1)*3+1):(3*i-1),:),shapeObject{ii}((3*i),:))
|
||
|
plot_rat_bern_poly(shapeObject{ii}(((i-1)*3+1):(3*i),:),2,.001,{})
|
||
|
end
|
||
|
end
|
||
|
% function xw = gaussXW(bound1,bound2,pts)
|
||
|
% % 15 point gauss quadrature weights and nodes on interval [-1,1]
|
||
|
% gaussQuad=load("gaussQuad");
|
||
|
% w=gaussQuad.wv{pts-1};
|
||
|
% x=gaussQuad.abc{pts-1};
|
||
|
% scale=bound2-bound1;
|
||
|
% w=w*scale/2;
|
||
|
% x=(scale/2)*(x+1)+bound1;
|
||
|
% xw=[x w]
|
||
|
% end
|
||
|
|