zoukankan      html  css  js  c++  java
  • 有限元FEM求解一维电磁场问题 Rits法 Galerkin法

    3.FEM

    两块无线大的PEC板位于YOZ平面,一块位于x=0电位为0V,另一块位于x=4电位为20V,使用一维有限元方法求解板间电位。

    1)求解电位的解析表达式

    由泊松方程

    clip_image002

    两边积分2次得到

    clip_image004

    由边界条件clip_image006clip_image008,得到电位的解析表达式为:

    clip_image010

    2Ritz变分法FEM

    利用讲义(21)式

    clip_image012

    将区域离散化后,在每个子区域上的clip_image014的表达式为:

    clip_image016

    代入(21)式得到

    clip_image018

    然后对clip_image020求偏导数,令其等于零,即

    clip_image022

    得到含有N-2个未知量的N-2个线性方程组,求解线性方程组即得到离散点上的解,然后由clip_image014[1]的表达式得到整个区域上的解。

    编写Matlab程序如下:

    clc; clear;

    N=20;

    xstart=0; xend=4; %x range

    xx=linspace(xstart, xend, N);

    syms x y F1 F2

    %construct y

    y=ones(1,N);

    y=sym(y);

    for i=1:N

    y(i)=['y', num2str(i)];

    end

    y(1)=0; y(N)=20; %bound

    f=x^2 + 1/2*x + 1/4;

    tic

    % Ritz method

    for i=1:N-1

    Fd(i) = 0.5*int( ( ( y(i+1)-y(i) ) / ( xx(i+1)-xx(i) ) )^2, x, xx(i), xx(i+1) )...

    +int( f * ( y(i) * ( xx(i+1)-x ) / ( xx(i+1)-xx(i) ) + y(i+1) * ( x-xx(i) ) / ( xx(i+1)-xx(i) ) ) , x, xx(i), xx(i+1) );

    end

    F=sum(Fd);

    for i=2:N-1

    Fdiff(i)=collect(diff(F, y(i)));

    for j=2:N-1

    temp=coeffs(Fdiff(i), y(j)); % Extract the coefficient matrix A, Ax=b

    if( size(temp) == 1 )

    A(i-1,j-1) = 0;

    else

    A(i-1,j-1) = temp(2);

    end

    temp=coeffs(Fdiff(i)); % Extract the right matrix b

    b(i-1)=temp(1);

    end

    end

    A=double(A); b=double(b);

    yy(2:N-1)=inv(A)*(-b');

    t=toc

    yy(1)=double( y(1) );

    yy(N)=double( y(N) );

    plot( xx, yy, 'b*'); hold on

    plot( xx, yy,'b--');

    %Analytic solution

    ax=xstart:0.001:xend;

    ay=1/12*ax.^4 + 1/12*ax.^3 + 1/8*ax.^2 - 13/6*ax;

    plot(ax, ay, 'r')

    title(['Ritz FEM 电位分布,N=', num2str(N)]);

    xlabel('距离'); ylabel('电位');

    legend('精确数值解','数值解', '解析解');

    N=5,10,20,30时的电位分布分别如下图:

    clip_image024clip_image026

    clip_image028clip_image030

    3GarlerkinFEM

    利用讲义(29)式,加权余量为:

    clip_image032

    将区域离散化后,在每个子区域上的clip_image014[2]的表达式为:

    clip_image016[1]

    检验函数clip_image036取为:

    clip_image038

    clip_image014[3]clip_image036[1]代入(29)式得到:

    clip_image042

    clip_image044

    得到含有N-2个未知量的N-2个线性方程组,求解线性方程组即得到离散点上的解,然后由clip_image014[4]的表达式得到整个区域上的解。

    编写Matlab程序如下:

    clc; clear;

    N=20;

    xstart=0; xend=4; %x range

    xx=linspace(xstart, xend, N);

    syms x F1 F2

    %construct y

    y=ones(1,N);

    y=sym(y);

    for i=1:N

    y(i)=['y', num2str(i)];

    end

    y(1)=0; y(N)=20; %bound

    f=x^2 + 1/2*x + 1/4;

    tic

    % Galerkin method

    for i=2:N-1

    F(i) = -int( ( ( y(i)-y(i-1) ) / ( xx(i)-xx(i-1) ) ) * 1 / ( xx(i)-xx(i-1) ), x, xx(i-1), xx(i) )...

    -int( ( ( y(i+1)-y(i) ) / ( xx(i+1)-xx(i) ) ) * (-1) / ( xx(i+1)-xx(i) ), x, xx(i), xx(i+1) )...

    -int( f * ( x-xx(i-1) ) / ( xx(i)-xx(i-1) ) , x, xx(i-1), xx(i) )...

    -int( f * ( xx(i+1)-x ) / ( xx(i+1)-xx(i) ) , x, xx(i), xx(i+1) );

    end

    for i=2:N-1

    Ff(i)=collect(F(i));

    for j=2:N-1

    temp=coeffs(Ff(i), y(j)); % Extract the coefficient matrix A, Ax=b

    if( size(temp) == 1 )

    A(i-1,j-1) = 0;

    else

    A(i-1,j-1) = temp(2);

    end

    temp=coeffs(Ff(i)); % Extract the right matrix b

    b(i-1)=temp(1);

    end

    end

    A=double(A); b=double(b);

    yy(2:N-1)=inv(A)*(-b');

    t=toc

    yy(1)=double( y(1) );

    yy(N)=double( y(N) );

    plot( xx, yy, 'b*', xx, yy, 'b--'); hold on

    %Analytic solution

    ax=xstart:0.001:xend;

    ay=1/12*ax.^4 + 1/12*ax.^3 + 1/8*ax.^2 - 13/6*ax;

    plot(ax, ay, 'r')

    title(['Galerkin FEM 电位分布,N=', num2str(N)]);

    xlabel('距离'); ylabel('电位');

    legend('精确数值解','数值解', '解析解');

    N=5,10,20,30时的电位分布分别如下图:

    clip_image046 clip_image048

    clip_image050 clip_image052

    4)比较RitzGarlerkinFEM的收敛性

    两种方法均收敛。

    收敛速度(使用Matlab的tic,toc计时积分、提取系数矩阵和解方程的时间):

    N=10时,Ritz用时0.266,Garlerkin用时0.297

    N=20时,Ritz用时0.953,Garlerkin用时1.078

    N=30时,Ritz用时2.047,Garlerkin用时2.219

    所以,Ritz方法收敛速度要快于Garlerkin方法。

  • 相关阅读:
    标记法
    学习实际经验
    标准项目文档
    项目开发流程规范文档
    未来与人工智能
    正则表达式
    http.pieplining
    二、防火墙
    一、信息安全产品分类
    【metasploit教程】之建立数据库
  • 原文地址:https://www.cnblogs.com/yanhc/p/2364916.html
Copyright © 2011-2022 走看看