matlab编写微分方程椭圆型方程(一维形式)

news2024/11/15 20:12:11

文章目录

      • 理论
      • 编程实例
      • 原代码

理论

椭圆型方程一维格式即常微分方程,边值问题,方程如下所示:

在这里插入图片描述
在这里插入图片描述
截断误差:
在这里插入图片描述

h → ∞ h\rightarrow\infty h时,截断误差趋于零,离散方程组成立,
在这里插入图片描述
写成矩阵:
在这里插入图片描述
用离散化方程组求解:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

编程实例

在这里插入图片描述
对比:
在这里插入图片描述

边值条件:

% boundary conditions
u0 = 1;
uN = exp(1);

区域的划分:

% partion of the domain
N = 20;
h = 1/N;
x_all = (0:h:1)';
x = x_all(2:end-1);

代入d:
在这里插入图片描述

% the right hand side
d = fx(x);
d(1) = d(1) + u0/h^2;
d(N-1) = d(N-1) + uN/h^2;

其中:

function y = fx (x)
y = (x-1).*exp(x);
end

thomas算法:

% thomas algorithm
u = thomas (a,b,c,d);

在这里插入图片描述
在这里插入图片描述

function u = thomas(a, b, c, d)
M = length(a);
u = zeros(M,1);
e = zeros(M,1);
f = zeros(M,1);
e(1) = c(1)/b(1);
f(1) = d(1)/b(1);

% forward
for i = 2:M
    e(i) = c(i)/( b(i)-a(i)*e(i-1));
    f(i) = (d(i)+a(i)*f(i-1))/(b(i)-a(i)*e(i-1));
end

在这里插入图片描述

%backward
u(M) = f(M);
for i = M-1:-1:1
    u(i) = f(i) + e(i)*u(i+1);
end
end

计算真解:

% the exact solution
u_e = u_exact(x_all);

原代码

% boundary conditions
u0 = 1;
uN = exp(1);

% partion of the domain
N = 20;
h = 1/N;
x_all = (0:h:1)';
x = x_all(2:end-1);

% the right hand side
d = fx(x);
d(1) = d(1) + u0/h^2;
d(N-1) = d(N-1) + uN/h^2;

% diagonals of the coefficient matrix A
q = qx(x);
a = ones (N-1,1)/h^2;
b = 2*ones (N-1,1)/h^2 + q;
c = a;

% thomas algorithm
u = thomas (a,b,c,d);

% A = spdiags([-a b -c],[-1 0 1],N-1,N-1);
% u = A\d;

% the exact solution
u_e = u_exact(x_all);

figure(1)
plot(x_all,[u0;u;uN],'g*',x_all,u_e,'r');
% end
%——--subroutines-
function y = qx(x)
y = x;
end
 
function y = fx (x)
y = (x-1).*exp(x);
end

function y = u_exact(x)
y = exp(x);
end

function u = thomas(a, b, c, d)
M = length(a);
u = zeros(M,1);
e = zeros(M,1);
f = zeros(M,1);
e(1) = c(1)/b(1);
f(1) = d(1)/b(1);

% forward
for i = 2:M
    e(i) = c(i)/( b(i)-a(i)*e(i-1));
    f(i) = (d(i)+a(i)*f(i-1))/(b(i)-a(i)*e(i-1));
end

%backward
u(M) = f(M);
for i = M-1:-1:1
    u(i) = f(i) + e(i)*u(i+1);
end
end

输出结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1839795.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

就因为没在大屏项目加全屏按钮,早上在地铁挨了领导一顿骂

“嗯嗯”,“嗯嗯”,“那产品也没说加呀”,“按F11不行吗?”,“嗯嗯”,“好的”。 早上在4号线上,我正坐在地铁里,边上站着的妹子,我看他背着双肩包,打着电话…

算法排序之冒泡排序及优化

public class Bubbling {public static void main(String[] args) {// 定义需要排序的数组int[] arr {0,1,21,2,31,12,5,8};// 冒泡排序方法bubbleSort(arr);bubbleOptSort(arr);}/*** 冒泡排序* param arr 数组*/public static void bubbleSort(int[] arr){// i0,…

IPFoxy代理IP:IPv4与IPv6性能与安全性对比

在使用IPFoxy静态代理IP的过程中,经常有小白朋友疑惑,IPv4与IPv6有何区别?他们在性能与安全上的差别如何,又该如何选择?在这篇博文中,我们将从各个方面为您科普这一区别,帮助您更好的选择。 一、…

ROS 机器人运动控制

ROS 机器人运动控制 机器人运动 当我们拿到一台机器人,其配套的程序源码中,通常会有机器人核心节点,这个核心节点既能够驱动机器人的底层硬件,同时向上还会订阅一个速度话题。我们只需要编写一个新的节点(速度控制节点…

【UML用户指南】-19-对基本行为建模-用例图

目录 1、组成结构 2、表示法 3、一般用法 3.1、对主题的语境建模 3.2、对主题的需求建模 4、常用建模技术 4.1、对系统的语境建模 4.1.1、设计过程 4.2、对系统的需求建模 4.2.1、设计过程: 5、正向工程 UML 中的用例图是对系统的动态方面建模的 5 种图之…

4月份最新出品:上海交大动手学大模型教程,快速入门LLM大模型(附课件)

前有 李沐 大神的动手学深度学习 现有 上海交大 的动手学大模型教程,对大模型感兴趣的直接冲! 就在4月份上交大发布了动手学大模型教程,这份教程来自上海交大 《人工智能安全技术》 课程讲义拓展,教师是是张倬胜教授。 朋友们…

[Linux] 历史根源

UNIX系统: 1969年,由贝尔实验室的K.Thompson和D.M.Ritchie为PDP-7机器编写的一个分时操作系统, 最初使用汇编语言编写, 后来1972年C语言出世以后,二人由使用C写了UNIX3, 此后UNIX大为流行开来 UNIX流派树&a…

编程精粹—— Microsoft 编写优质无错 C 程序秘诀 01:假想的编译器

这是一本老书,作者 Steve Maguire 在微软工作期间写了这本书,英文版于 1993 年发布。2013 年推出了 20 周年纪念第二版。我们看到的标题是中译版名字,英文版的名字是《Writing Clean Code ─── Microsoft’s Techniques for Developing》&a…

电脑提示d3dcompiler_47.dll丢失的解决方法,实测靠谱的5种方法

在计算机使用过程中,缺失d3dcompiler_47.dll这一系统文件是一个常见问题,尤其是对于游戏和图形密集型应用程序用户来说尤为重要。这个文件是DirectX软件工具包的一部分,主要用于处理图形渲染的应用程序接口的核心元素。当你在运行游戏或某些软…

[面试题]消息队列

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis[面试题]Nginx[面试题]缓存[面试题]Redis[面试题]消息队列 什么是…

什么是进程

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在了解进程之前,我们需要知道多任务的概念。多任务,顾名思义,就是指操作系统能够执行多个任务。例如,…

微服务必备容器化技术

文章目录 docker介绍与安装及上手应用什么是容器化技术?为什么需要学习docker?如何理解dockerdocker下载与安装docker的基础组成docker体验 dockerfile介绍并创建go-zero环境容器docker的基础组成从容器构建属于go环境的容器基于dockerfile构建go容器镜像…

嵌入式linux系统中SPI子系统验证03

今天主要给大家分享一下,如何使用SPI总线进行验证的方法。 第一:SPI验证流程 1. echo 1 > /dev / spidev3.0 2.逻辑分析仪抓波形 3.十六进指转化为十进制 4.ASCII字符代码表匹配 第二:SPI验证结果 第三:设备…

蚓链数字化生态平台,开启企业未来新篇章!

在如今数字化浪潮势不可挡的时代,企业发展可谓是机遇与挑战并存!而蚓链数字化生态平台系统的出现,绝非是给企业一套平平无奇的营销方案或工具那么简单。 它赋予企业的,是在产业生态链中获取海量数据价值的关键且强大的能力&#x…

18个机器学习核心算法模型总结

最强总结!18个机器学习核心算法模型!! 大家好~ 在学习机器学习之后,你认为最重要的算法模型有哪些? 今儿的内容涉及到~ 线性回归逻辑回归决策树支持向量机朴素贝叶斯K近邻算法聚类算法神经网络集成方法降维算法主成…

Weevil-Optimizer象鼻虫优化算法的matlab仿真实现

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 Weevil-Optimizer象鼻虫优化算法的matlab仿真实现,仿真输出算法的优化收敛曲线,对比不同的适应度函数。 2.测试软件版本以及运行结果展示…

【Redis】基于Redission实现分布式锁(代码实现)

目录 基于Redission实现分布式锁解决商品秒杀超卖的场景: 1.引入依赖: 2.加上redis的配置: 3.添加配置类: 4.编写代码实现: 5.模拟服务器分布式集群的情况: 1.右键点击Copy Configuration 2.点击Modi…

虚拟现实环境下的远程教育和智能评估系统(十)

VR部署测试,采集眼动数据; 经VR内置Camera采集眼睛注视位置后,输出.txt形式的眼动结果: 经处理后,将射线方向和位置投影到视频屏幕二维坐标的位置: 在视频中可视化如下:

Redis的缓存击穿与解决

缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较复杂的Key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。 Redis实战篇 | Kyles Blog (cyborg2077.github.io) 目录 解决方案 互斥锁 实现 逻辑过期 实现 解决方案…

C++ 类与对象的使用要点(超详细解析,小白必看系列)

1.面向过程和面向对象初步认识 C语言是面向过程的语言,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题 例如:洗衣服 C是基于对象的,关注的是对象,将一件事拆分成不同的对象,靠对…