我们常常用微分方程来描述现实世界中的一些物理现象。由于微分方程的复杂性,只有在很简单的情况下才能得到微分方程的解析解。由于计算机的发展,采用数值方法求解微分方程的数值近似解得到广泛应用。微分方程的数值解法主要包括两大类:有限差分法和有限单元法。这里主要介绍有限单元法。

However,对于一个只学过微积分和矩阵论的工科生来说,要了解有限元法的数学原理还是有些困难,所以这里重点是介绍有限元法的思想和具体计算方法,深层的数学原理并不涉及,主要是本人也不懂~~~

1.微分方程基本概念

微分方程主要分为常微分方程和偏微分方程。
常微分方程:未知函数是单一自变量的函数,按照方程中导数的阶数,分为一阶、二阶、n阶常微分方程。
偏微分方程:未知函数是多个自变量的函数,至少是两个自变量,同样可以分为一阶、二阶、n阶偏微分微分方程。

二阶偏微分方程研究较多,又可以分为椭圆型方程、双曲型方程、抛物型方程等。这里不展开,具体可以查看偏微分方程数值解法相关书籍。

2.二阶常微分方程的有限元法求解举例

由于下面涉及大量公式,所以采用截图的方式进行介绍

3.具体Matlab实现如下:

%% main program
%一次有限元求一维常微分方程,基函数为分片线性函数
n = 10;
err = zeros(8, 1);% Linear interpolation
index = zeros(8, 1);
for i=1:8index(i) = 2^(i-1) * n; %10,20,40,80,160,320,640,1280
end
for i = 1:8N = index(i); %网格数量h = 1 / N; %网格大小x = 0:h:1; %节点向量xx = 0:1/1000:1;exact_solu = sin(pi.*xx); %精确解K = zeros(N-1); %初始化系数矩阵(刚度矩阵)K = K + diag(ones(N-1,1).*(2/h+2/3*h), 0) + diag((h/6-1/h).*ones(N-2,1), 1)...+ diag((h/6-1/h).*ones(N-2,1), -1);F = (1+pi^2)/(h*pi^2) * (2.*sin(pi.*x(2:N))-sin(pi.*x(1:N-1))-sin(pi.*x(3:N+1)))';K = sparse(K);coeff = K\F; %Ax=b,matlab求法x=A\bsolu = [0; coeff; 0]; %u(x)节点解%     figure()subplot(3,3,i)plot(x', solu, 'o--',xx', exact_solu, 'g--');legend('numerical solution', 'exact solution')xlabel('x')ylabel('U');xlim([-0.05,1.05])ylim([-0.05,1.05]);title(['numerical solution and exact solution N=',num2str(index(i))]);% calculate the errordu = solu(2:N+1) - solu(1:N);y1 = sin(2.*pi.*x);dy1 = y1(2:N+1) - y1(1:N);y2 = sin(pi.*x);dy2 = y2(2:N+1) - y2(1:N);error = pi^2*h/2*ones(1,N) + du'.^2/h + pi/4*dy1 - 2/h*dy2.*du';err(i) = sqrt(sum(error));
end
% figure()
subplot(3,3,9)
plot(log2(err),'o--');
title('误差阶')
xlabel('N')
ylabel('$log_{2}Error$', 'Interpreter','LaTex')
xlim([0.8,8.2])axis on;
set(gca,'xtick',1:1:8);
set(gca,'xticklabel',{5,10,20,40,80,160,320,640});[order,~] = polyfit(1:1:(length(err)), log2(err)', 1);
disp(order)

最后计算结果如下图所示:

参考文献:

代码 https://blog.csdn.net/waitingwinter/article/details/106164350

[Matlab科学计算] 有限元法求二阶常微分方程相关推荐

  1. [Matlab科学计算] 共轭梯度法求一般函数的最小值

    代码如下: function [x,val,k]=frcg %功能: 用FR共轭梯度法求解无约束问题: min f(x) %x0是初始点, fun, gfun分别是目标函数和梯度 %输出: x, va ...

  2. matlab科学计算的应用,精通MATLAB科学计算与数据统计应用 高清版pdf[12MB]

    在各行各业的工程实践中,有大量的科学计算工作需要完成.传统的计算方式一般需要较长的周期,相比之下开发效率极高的MATLAB是一个更好的选择.在MATLAB中,编程细节被简化,繁琐的实现过程也被略去,用 ...

  3. MATLAB科学计算机lnx代码,[2018年最新整理]Matlab科学计算.ppt

    [2018年最新整理]Matlab科学计算 Matlab与科学计算 计算机学院 刘咏梅 Email:liuyongmei@hrbeu.edu.cn 第二章 MATLAB数值计算基础 Introduct ...

  4. matlab gausspdf,《精通MATLAB科学计算》(王正林 编著).pdf

    <精通MATLAB科学计算>(王正林编著).pdf<精通MATLAB科学计算>(王正林编著).pdf [General Information] 书名=精通MATLAB科学计算 ...

  5. matlab科学计算软件,数据分析软件 Matlab 科学计算软件 科软网——专业正版软件供应商...

    创建二维图形并自定义线条 向图形添加标题.坐标轴标签和图例 合并多个绘图 指定坐标轴范围 创建包含双 y 轴的图. 以交互方式添加文本到图形 二维图和三维图绘制连续.离散.曲面以及三维体数据图 格式和 ...

  6. matlab 计算图像质量因数,matlab科学计算-中国大学mooc-试题题目及答案

    matlab科学计算-中国大学mooc-试题题目及答案 更多相关问题 换算因数表示被测物质的摩尔质量与称量形式的摩尔质量的比值,且物质的被测元素在分子,分母中原子 滴定管读数最后一位不一致是系统误差. ...

  7. scilab 求微分_科学计算自由软件SCILAB在常微分方程中的应用

    0引言随着计算机技术的发展,计算机辅助分析已深入到诸多领域,包括数学的教学与研究.在常微分方程教学和研究中进行计算机辅助分析,就是一个值得探讨的问题.进行辅助分析必须使用计算软件,商品化的计算软件价格 ...

  8. [Matlab科学计算] 四阶Runge-Kutta法解常微分方程

    四阶Runge-Kutta法格式的详细推导请查找相关数值分析书籍,这里直接给出四阶Runge-Kutta法的经典格式和Matlab代码 Matlab代码如下:自行修改常微分方程即可 %% 四阶Rung ...

  9. matlab科学计算 书,MATLAB与科学计算(第3版)

    <MATLAB与科学计算(第3版)> 第1章 安装及使用前的准备1 1.1 MATLAB简介1 1.1.1 21世纪的科学计算语言1 1.1.2 MATLAB的发展历史3 1.1.3 MA ...

  10. matlab科学计算及分析,matlab科学计算

    spContent=当前,科学计算已经成为科学研究.技术创新的重要方法与手段,而作为实现工具的科学计算软件无疑具有至关重要的作用.MATLAB为众多领域的计算问题提供了全面的解决方案,代表了当今国际科 ...

最新文章

  1. in和exists的区别与执行效率问题解析
  2. Spark SQL玩起来
  3. 计算机视觉摔倒检测,基于计算机视觉的室内跌倒检测
  4. windows与linux中的路径书写,斜杠、反斜杠用法总结
  5. 【计算机系统设计】学习笔记(2)
  6. 计算机基础(八):linux编程规范总结
  7. [转]linux下IPTABLES配置详解
  8. Windows Phone 7(WP7)开发 获取网络状态
  9. php 如何去除说有空格,php怎么去除所有空格
  10. 操作系统原理,Windows线程调度,引发线程调度的事件,Windows线程优先级,Windows时间配额,Windows线程调度策略,Windows优先级提升事件
  11. 【彩虹 钢琴伴奏】笔记
  12. explain是mysql的关键字吗_mysql 中的explain关键字
  13. 数字逻辑电路——简单知识点整理(乱)
  14. “正交阵”与“特征值和特征向量”
  15. 如何“0”预算开始你的代发货电商销售(Dropshipping)?
  16. Opencv之多目标追踪(基于Dlib库)
  17. webcam实现拍照
  18. 【干货】ArcGIS常用标注技巧
  19. Mysql高可用性实施方案
  20. arduino 嗡鸣器 音乐_【arduino】继续蜂鸣器音乐播放,arduinoIDE里调用音乐播放库...

热门文章

  1. C语言程序设计实验报告——实验四
  2. c语言自学路线图,C语言的知识体系图,C语言学习路线图
  3. 数据分析专题报告范文6篇_阿里大佬是怎么写数据分析报告的?
  4. 百度文库,道客巴巴等文库免积分下载
  5. 安卓版本客户端2.1
  6. shell脚本学习笔记(二)myplayer添加播放列表的源码
  7. 安全漏洞防御(1)如何防止被拖库
  8. 如何清空c盘只剩系统_怎么清空c盘只保留系统文件 你值得一看的技巧
  9. 计算机快速录入,如何快速把书中的文字扫描并录入电脑
  10. ZYNQ+FPGA读取SD卡BMP图片并通过HDMI显示