Ritz-Galerkin法求解边值问题

  • 格式:doc
  • 大小:25.50 KB
  • 文档页数:2

Ritz-Galerkin法求解边值问题
2010-05-30 13:37
function varargout=saxplliu(varargin)
%function
%-u''+ru=f(x) 0%u(0)=0,u(2*pi)=0

n=8;
r=1;
% A1=ones(n,n);
% A2=ones(n,n);
% b=ones(n,1);
[x1,w1]=lglnodes(n)
for i=1:n
A1=i^2*pi/4;
A2=pi;
s=0;
for j=1:n+1
s=s+f(pi*(x1(j)+1))*fG(pi*(x1(j)+1),i)*w1(j);
end
b=pi*s;
c(i)=b/(A1+r*A2);
end
% A
% b
h=0.2;
x=0:h:2*pi;
n1=length(x);
y1=x;
y2=x;
for i=1:n1
y1(i)=u(x(i));
end
for i=1:n1
y20=0;
for j=1:n
y20=y20+c(j)*fG(x(i),j);
end
y2(i)=y20;
end
figure(1)
plot(x,y1,x,y2,'ro');
legend('精确解','数值解')
figure(2)
plot(x,abs(y1-y2));
title('误差图')
function [x,w]=lglnodes(N)
N1=N+1;
x=cos(pi*(0:N)/N)';
P=zeros(N1,N1);
xold=2;
while max(abs(x-xold))>eps
xold=x;
P(:,1)=1; P(:,2)=x;
for k=2:N
P(:,k+1)=( (2*k-1)*x.*P(:,k)-(k-1)*P(:,k-1) )/k;
end
x=xold-( x.*P(:,N1)-P(:,N) )./( N1*P(:,N1) );
end
w=2./(N*N1*P(:,N1).^2);
function y=fG(x,I)
y=sin(I*x/2)
function y=f(x)
y=(1/pi^2+1)*2*sin(x/pi)/sin(2)-x/pi;
function y=u(x)
y=2*sin(x/pi)/sin(2)-x/pi