• 大小: 2KB
    文件类型: .m
    金币: 2
    下载: 2 次
    发布日期: 2021-06-01
  • 语言: Matlab
  • 标签: 五点差分  CG  

资源简介

本例用五点差分法求解一个二阶偏微分方程,其间用CG法处理,此实验可分别选取N=4,8,16,32

资源截图

代码片段和文件信息

function [ output_args ] = Untitled1( input_args )
%本例用五点差分法求解一个二阶偏微分方程,其间用CG法处理,此实验可分别选取N=4,8,16,32
disp(‘请输入N的值:‘);
N=input(‘N= ‘);
a=0;b=1;
h1=pi/(N+1);
h2=(b-a)/(N+1);
h=pi;
x=1:N;y=1:N;
x=h1*x;y=h2*y;
I1=-(h*h)*diag(ones(1N));
AA=zeros(N);
AA(11:2)=[2*h*h+1-1];
AA(NN-1:N)=[-12*h*h+1];
for i=2:N-1
    AA(ii-1:i+1)=[-12*(h*h+1)-1];
end

%构造矩阵
A=zeros(N*N);
A(1:N1:2*N)=[AAI1];
A((N-1)*N+1:N*N(N-2)*N+1:N*N)=[I1AA];
for i=2:N-1
    A((i-1)*N+1:i*N(i-2)*N+1:i*N+N)=[I1AAI1];
end

%构造右端项
for i=1:N
    b1((i-1)*N+1:i*N)=h1*h1*cos(3*x).*sin(pi*y(i));
    %精确解
    U((i-1)*N+1:i*N)=cos(3*x).*sin(pi*y(i))/(9+pi*pi);
end


%---------------------------------------------------
%4.求解并与精确值比较
%---------------------------------------------------
step=0;
x0=ones(N*N1);
r0=b1‘-A*x0;
p0=r0;
err(1)=max(abs(x0-U‘));
while r0‘*

评论

共有 条评论