基于Matlab的非线性能量的快速 FEM 评估

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机 

⛄ 内容介绍

基于Matlab的非线性能量的快速 FEM 评估

⛄ 部分代码

clear variables

close all

clc

add_paths;

%=========================================================================

all.levels = 1:5;               % mesh refinement levels

all.p = 1:1;                    % polynomial degrees

all.methods_on = [1 1 0 0 0];   % options

%=========================================================================

all.RUN = kron(all.methods_on,ones(numel(all.levels),1));

all.RUN(5:end,4) = 0;           % exclude some evaluations for option 4

all.RUN(5:end,5) = 0;           % exclude some evaluations for option 5

%=========================================================================

elasticity_setup_parameters;

elasticity_initialize_2D;

%=========================================================================

for lev=1:length(all.levels)

    level = all.levels(lev);

    for pp=1:length(all.p)

        p = all.p(pp);

        params.p = p;

        params.solver.Gauss_order = 2*params.p;    % Gauss quadrature order

        

        elasticity_setup_domain;  % n2c + e2n

        

        mesh = elasticity_setup_mesh(n2c,e2n,params);

        if params.graphs.Hess

            figure; spyown(mesh.Hstr,[mesh.nn mesh.nn]);

        end

  

        ndofs = length(mesh.dofsMinim);      % number of degrees of freedom 

        all.ndofs(lev,pp) = ndofs;

        all.ne(lev,pp) = mesh.ne;

        

        u_init = zeros(2*mesh.nb,1);

        elasticity_setup_u_init;

        if params.graphs.mesh

            figure(1);

            hold on

            nDfull = mesh.nodesDirichlet{1};

            plot(u_init(2*nDfull-1),u_init(2*nDfull),'ro','MarkerSize',8,'Linewidth',1.5);

            hold off

        end

        

        fprintf(separate1);  fprintf('\n');

        

        for m=1:5

            if all.methods_on(m) && all.RUN(lev,m)

                fprintf(separate1); fprintf('\n\n');

                switch m

                    case 1

                        fprintf('ndofs = %d,  OPTION 1 : exact gradient, known hessian pattern \n',ndofs);

                    case 2

                        fprintf('ndofs = %d,  OPTION 2 : approx. gradient, known hessian pattern \n',ndofs);

                    case 3

                        fprintf('ndofs = %d,  OPTION 3 : approx. gradient, no hessian pattern \n',ndofs);

                    case 4

                        fprintf('ndofs = %d,  OPTION 4 : no gradient, no hessian pattern \n',ndofs);

                    case 5

                        fprintf('ndofs = %d,  OPTION 5 : approx. gradient, no hessian pattern \n',ndofs);  

                end

                

                [u, Ju, time, iters, densities] = approx_solution(mesh,u_init,circshift([0 0 0 0 1],m),params);

                                

                all.u{lev,pp,m} = u;

                all.Ju(lev,pp,m) = Ju/1e7;

                all.times(lev,pp,m) = time;

                all.iters(lev,pp,m) = iters;

    

                if ~isempty(params.graphs.solution) && ismember(1,(params.graphs.solution(:,1)==level) ...

                                                                & (params.graphs.solution(:,2)==p) & (params.graphs.solution(:,3)==m))

                    visualize_elasticity_2D;

                    caxis([0 7.5e6]);

                end

            end

        end

    end

end

fprintf('\n');  generate_table_paper_latex_article(all);  % main article table

⛄ 运行结果

⛄ 参考文献

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值