二阶椭圆偏微分方程实例求解(附matlab代码)(2)
for i=1:2*n-1 %使A.B下标i-1/2变为2i-1 for j=1:2*n-1 x(i)=i*h/2; y(j)=j*h/2;
A(i,j)=FA(x(i),y(j)); B(i,j)=FB(x(i),y(j)); end end
x=zeros(n-1,1); y=zeros(n-1,1); for i=1:n-1 for j=1:n-1 x(i)=i*h; y(j)=j*h;
C(i,j)=FC(x(i),y(j)); D(i,j)=FD(x(i),y(j)); E(i,j)=1;
F(i,j)=FF(x(i),y(j)); U(i,j)=FU(x(i),y(j)); end end
二阶椭圆偏微分方程实例求解(附matlab代码)用的是五点差分法。
%对最终要解的方程组的系数矩阵进行赋值 for i=1:n-1
bcd=zeros(n-1); bb=[]; cc=[]; dd=[]; gg=[]; kk=[]; for j=1:n-1
b(i,j)=(A(2*i+1,2*j)+A(2*i-1,2*j)+B(2*i,2*j+1)+B(2*i,2*j-1))/h^2+E(i,j); c(i,j)=(B(2*i,2*j+1)-h*D(i,j)/2)/h^2;
d(i,j)=(B(2*i,2*j-1)+h*D(i,j)/2)/h^2; g(i,j)=(A(2*i+1,2*j)-h*C(i,j)/2)/h^2;
k(i,j)=(A(2*i-1,2*j)+h*C(i,j)/2)/h^2; bb=[bb b(i,j)]; if j<=n-2
cc=[cc c(i,j)]; end if j>=2
dd=[dd d(i,j)]; end
gg=[gg g(i,j)]; kk=[kk k(i,j)];
%给f赋值 if i==1
ff(i,j)=F(i,j)+k(i,j)*1;%边值为1 elseif i==n-1
ff(i,j)=F(i,j)+g(i,j)*A(i,2*j);%A中i取值无所谓,不影响 else
ff(i,j)=F(i,j); end if j==1
ff(i,j)=ff(i,j)+d(i,j)*1;%边值为1 elseif j==n-1
ff(i,j)=ff(i,j)+c(i,j)*B(2*i,j); end
f((i-1)*(n-1)+j,1) = ff(i,j);%你应该懂的,坐标变换 end
bcd=diag(bb)-diag(cc,1)-diag(dd,-1); BCD=blkdiag(BCD,bcd); if i<=n-2
G=[G gg]; end
二阶椭圆偏微分方程实例求解(附matlab代码)用的是五点差分法。
if i>=2
K=[K kk]; end end
P=BCD-diag(G,n-1)-diag(K,-n+1);
%BCD=BCD-diag(G,n-1)-diag(K,-n+1);x=Doolittle(BCD,f);这样是不是可以减少点内存消耗
x=Doolittle(P,f);%LU分解解方程组,这里也可以输入其他解方程组的方法 %x=GaussXQByOrder(P,f) %高斯消去法
%x0=ones((n-1)^2,1);x=gauseidel(P,f,x0) %gauseidel迭代法 for i=1:n-1 for j=1:n-1
u((i-1)*(n-1)+j)=U(i,j); end end
error=abs(x-u); result=[x u error]; time = toc;
disp('计算时间为:'); disp(time);
disp('---------------------------------------------------------------'); format long;
disp('计算结果为:');
disp(' 数值解真实值误差'); disp(result);
6.2LU分解解线性方程组
function [x,L,U]= Doolittle (A,b) N = size(A); n = N(1);
L = eye(n,n); %L的对角元素为1 U = zeros(n,n);
U(1,1:n) = A(1,1:n); %U的第一行 L(1:n,1) = A(1:n,1)/U(1,1); %L的第一列
for k=2:n for i=k:n
U(k,i) = A(k,i)-L(k,1:(k-1))*U(1:(k-1),i); %U的第k行 end
for j=(k+1):n
L(j,k) = (A(j,k)-L(j,1:(k-1))*U(1:(k-1),k))/U(k,k);
二阶椭圆偏微分方程实例求解(附matlab代码)用的是五点差分法。
%L的第k列 end end
y = SolveDownTriangle(L,b);
x = SolveUpTriangle(U,y); %求解方程
6.3高斯消去法
function [x,XA]=GaussXQByOrder(A,b) N = size(A); n = N(1);
for i=1:(n-1) for j=(i+1):n if(A(i,i)==0)
disp('对角元素为0!'); %防止对角元素为0 return; end
l = A(j,i); m = A(i,i);
A(j,1:n)=A(j,1:n)-l*A(i,1:n)/m; %消元方程 b(j)=b(j)-l*b(i)/m; end end
x=SolveUpTriangle(A,b); %通用的求上三角系数矩阵线性方程组的函数 XA = A; %消元后的系数矩阵
6.4上三角解线性方程组(LU分解法、高斯消去法要用到这个算法) function x=SolveUpTriangle(A,b) N=size(A); n=N(1); for i=n:-1:1 if(i<n)
s=A(i,(i+1):n)*x((i+1):n,1); else s=0; end
x(i,1)=(b(i)-s)/A(i,i); end
6.5下三角解线性方程组(LU分解法要用到这个算法) function x=SolveDownTriangle(A,b)
二阶椭圆偏微分方程实例求解(附matlab代码)用的是五点差分法。
N=size(A); n=N(1); for i=1:n if(i>1)
s=A(i,1:(i-1))*x(1:(i-1),1); else s=0; end
x(i,1)=(b(i)-s)/A(i,i); end
6.6gauseidel迭代法 ifnargin==3
eps= 1.0e-6;%可以安自己的精度要求改变 M =10000;
elseifnargin == 4 M =10000;
elseifnargin<3 error return; end
D=diag(diag(A)); %求A的对角矩阵 L=-tril(A,-1); %求A的下三角阵 U=-triu(A,1); %求A的上三角阵 G=(D-L)\U; f=(D-L)\b; x=G*x0+f;
n=1; %迭代次数 while norm(x-x0)>=eps x0=x;
x=G*x0+f; n=n+1; if(n>=M)
disp('Warning: 迭代次数太多,可能不收敛!'); return; end end
disp('迭代次数为:'); disp(n);
…… 此处隐藏:1236字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [求职职场]加法运算定律的运用练习题
- [求职职场]大型石油化工工业过程节能新技术
- [求职职场]2015-2020年中国箱纸板行业分析与投资
- [求职职场]NADEX-IWC5A点焊机故障代码
- [求职职场]英语阅读 非常有用
- [求职职场]鲁卫疾控发〔2012〕2号(联合,印发山东
- [求职职场]2014年莆田公务员行测技巧:数字推理的
- [求职职场]基于最近发展区理论的高中数学课堂有效
- [求职职场]与贸易有关的知识产权协议
- [求职职场]【王风范】微演说·职场演说三
- [求职职场]新时代国珍健康大课堂
- [求职职场]群论期末考试复习题
- [求职职场]施工现场消防安全专项施工方案(范本)-
- [求职职场]初中物理光学知识点归纳完美版
- [求职职场]毕业设计总结与体会范文
- [求职职场]江南大学2018年上半年展示设计第1阶段
- [求职职场]景尚乡民兵参战支前保障方案
- [求职职场]【优质】2019年工会职工之家建设工作总
- [求职职场]数据库技术与应用—SQL Server 2008(第
- [求职职场]汽车变速箱构造与工作原理
- 首钢工业区工业遗产资源保护与再利用研
- 第4课 《大学》节选
- 2016程序文件——检验检测结果发布程序
- 2011年高考试题文言文阅读全解释__2011
- 化学是一门基础的自然科学
- 海外做市商制度的借鉴意义
- 外国建筑史复习资料(
- 七年级下思想品德期末综合测试(二)
- 思政课部2013年上学期教学工作总结
- 电大国际公法任务3 0004
- 《圆的认识》教学设计
- 中国轨道交通牵引变流器行业市场发展调
- 中泰证券#定期报告:坚守时代硬科技和
- 浅论企业财务管理与企业经营投资风险的
- 大功率半导体激光器光纤耦合技术调研报
- 中国传统家具的现状与发展探讨
- Broadcom数字电视芯片助海尔扩展高清电
- 新HSK4词汇练习 超全(五)
- 2013届高考数学单元考点复习12
- 雨霖铃精品课件




