拉普拉斯方程续有限差分法

拉普拉斯方程,三大偏微分方程之首
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

lx=61;ly=101;
v1=zeros(ly,lx);
for j=2:lx-1
v1(ly,j)=5;
end
v2=v1;m=1;t=0;k=0;
while(m>0.00001)
k=k+1
m=0;
for i=2:ly-1
for j=2:lx-1;
v2(i,j)=(v1(i,j+1)+v1(i+1,j)+v1(i-1,j)+v1(i,j-1))/4;
t=(v2(i,j)-v1(i,j));
if(t>m)m=t;end
end
end
v1=v2;
end
subplot(1,2,1),mesh(v2)
axis([0,61,0,101,0,5])
subplot(1,2,2),contour(v2,32)

上述是普通迭代方法,也叫雅各比迭代
下面是高斯迭代法
线性方程组-迭代法 2:Jacobi迭代和Gauss-Seidel迭代

高斯迭代法

原文链接
设有一个长直接地金属矩形槽,长a=40,宽b=20,其侧壁与底面电位均为零,顶盖电位为100V(相对值),求槽内电位分布。

利用高斯迭代求解代码如下(相邻两次迭代值最大允许误差为0.001):

a=zeros(21,41);
a(1,:)=100;
b=zeros(19,39);
c=eye(19,39);
count=1;
d=0;
while(count==1)
    m=0;
    for i=2:1:20
        for j=2:1:40
            b(i-1,j-1)=a(i,j);
            a(i,j)=0.25*(a(i-1,j)+a(i+1,j)+a(i,j-1)+a(i,j+1));
            c(i-1,j-1)=abs(a(i,j)-b(i-1,j-1));
            if(c(i-1,j-1)<0.001)
                for k=1:1:19
                    for n=1:1:39
                        if(c(k,n)<0.00001)
                            m=m+1;
                        else
                            m=0;
                            break;
                        end
                    end
                    if(m==0)
                        break;
                    end
                    if(m==741)
                        count=0;
                    end
                end
            end
            if(count==0)
                break;
            end
        end
        if(count==0)
            break;
        end
    end
    d=d+1;
end
d
a

利用超松弛法程序如下:

d=zeros(1,10);
h=0;
for e=1:0.1:1.9
a=zeros(21,41);
a(1,:)=100;
b=zeros(19,39);
c=eye(19,39);
count=1;
g=0;
while(count==1)
    m=0;
    for i=2:1:20
        for j=2:1:40
            b(i-1,j-1)=a(i,j);
            a(i,j)=a(i,j)+e*0.25*(a(i-1,j)+a(i+1,j)+a(i,j-1)+a(i,j+1)-4*a(i,j));
            c(i-1,j-1)=abs(a(i,j)-b(i-1,j-1));
            if(c(i-1,j-1)<0.001)
                for k=1:1:19
                    for n=1:1:39
                        if(c(k,n)<0.001)
                            m=m+1;
                        else
                            m=0;
                            break;
                        end
                    end
                    if(m==0)
                        break;
                    end
                    if(m==741)
                        count=0;
                    end
                end
            end
            if(count==0)
                break;
            end
        end
        if(count==0)
            break;
        end
    end
   g=g+1;
end
h=h+1;
e
d(1,h)=g;
end
d 

有限差分法代码(待看)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值