一维抛物线型方程数值解法1附图及matlab程序

合集下载

一维抛物型偏微分方程初边值问题求解

一维抛物型偏微分方程初边值问题求解

一维抛物型偏微分方程初边值问题求解摘要:一、引言二、一维抛物型偏微分方程1.定义与性质2.初边值问题三、求解方法1.紧差分格式2.追赶法3.有限元算法四、Matlab程序实现1.紧差分格式程序2.追赶法程序五、结论与展望正文:一、引言在数学、物理等领域,偏微分方程是一类重要的方程。

其中,一维抛物型偏微分方程在科学研究和实际应用中具有广泛的意义。

本文将探讨一维抛物型偏微分方程的初边值问题的求解方法,并介绍相应的Matlab程序实现。

二、一维抛物型偏微分方程1.定义与性质一维抛物型偏微分方程是指具有如下形式的方程:u_t = a * u_xx其中,u(x, t) 表示未知函数,t 表示时间,x 表示空间坐标,a 为常数。

2.初边值问题初边值问题是指在给定的初始条件和边界条件下求解偏微分方程的问题。

在一维抛物型偏微分方程中,初边值问题可以表示为:u(x, 0) = u_0(x)u(x, t) = u_t(x, t) 在边界x=0,x=L上三、求解方法1.紧差分格式紧差分格式是一种求解偏微分方程的方法,其精度为O(h^(1/2) * Δt),无条件稳定。

在这种方法中,我们首先需要建立离散的网格系统,然后通过数值积分求解离散化的偏微分方程。

2.追赶法追赶法是一种求解线性方程组的方法,也可以用于求解初边值问题。

在这种方法中,我们首先需要将偏微分方程转化为线性方程组,然后使用追赶法求解线性方程组。

3.有限元算法有限元算法是一种基于变分原理的求解方法,可以将偏微分方程问题转化为求解有限元空间的线性方程组。

这种方法在求解一维抛物型偏微分方程时具有较高的精度和可靠性。

一类变系数抛物型方程的数值解法

一类变系数抛物型方程的数值解法

式 , 用方程 算 出第一 层 的数值 解 , 利 之后 每一层 的
计 算都 用到 前两 层 的数值解 。每一层 的计算都 是 解 线性 方程 组 。计算 过程 避免 了迭 代运 算 。通过 该 格式 可 以计算 出 的数 值解 。利 用 7的数 值解 2 和下 面差分 格式 可 以计算 出 “和 “的数值 解 。
n 上 的 网 格 函 数 。 引 入 以 下 记 号 :

。其 收敛 阶 为 O( 。 ) h +r 。
跏 一
D, 一 叫
二 二
1≤ i M 一 1 1≤ k≤ N 一 1 ≤ ,
气 一

+ 宰 +
0≤ k≤ N
厂( z)
a女


第 4期
1≤ i≤ M — l
f ( i x)
1 三 层 线 性 化 格 式

在 问 题 ( ) 令 , U , 定 “ ,) 0 1中 一 假 ( £≠ ,
罕N
并 (一 , 一 ,到 题 1 记a) 警 p) 警 得 问 ( 的 ( )
我们 用 Malb进 行 编 程 计 算 , p t a 在 c机 上计 算 出 的数值结 果见 表 1 ~表 4 。
表 1 M =5 N- 5 0。 - 0时 H , ) 绝 对 误 差 ( 1的
)== + =
1+
表 2 M =5 。 0 N=5 0时 a f 的 绝 对 误 差 ()
n — n^× *
存 在 O i≤M , 得 ≤ 。 使
∈ L X。l i +
ma n t) 口 ≤ ch + r ) x l (女 一 l (

用 类 似 的 方 法 可 以 给 出 如 下 向 后 欧 拉 格

【MATLAB与机械设计】一维优化之二次插值法(抛物线法)

【MATLAB与机械设计】一维优化之二次插值法(抛物线法)

【MATLAB与机械设计】⼀维优化之⼆次插值法(抛物线法)⼆次插值法⼜称抛物线法,它是利⽤函数在极值点附近具有⼆次函数的性质建⽴起来的⼀种多项式逼近⽅法。

利⽤⽬标函数在若⼲点的信息(函数值、导数值等),构造⼀个与⽬标函数值相接近的插值多项式,⽤该多项式的最优解作为函数的近似最优解,随着搜索区间的逐次缩短,多项式的最优点与原函数最优点的距离逐渐减⼩,直⾄满⾜精度要求。

1.⼆次插值的程序框图:2. MATLAB可执⾏程序function [x,f_x]=Quadratic_interpolation(f,x1,x2,x3,exp)%% 函数说明%{本函数应⽤于⼆次插值其中f表⽰输⼊函数x1,x2,x3表⽰要进⾏插值的三个点exp精度x:为输出的极⼩值点f_x:为输出的极⼩值调⽤⽅法:clc;clear;f=@(x)(x+1/x);[x,f]=n_d(f,0,10,30,0.01);xf%}%% 函数主题f1=f(x1);f2=f(x2);f3=f(x3);%{sov_f=[f1,f2,f3]';sov_x=[1,x1,x1^21,x2,x2^21,x3,x3^2];sov_a=sov_x\sov_f;a=sov_a;a0=a(1);a1=a(2);a2=a(3);%x_m=-a1/(2*a2);%}while 1A=2*(f1*(x2-x3)+f2*(x2-x1)+f3*(x1-x2));B=(f1*(x2^2-x3^2)+f2*(x2^2-x1^2)+f3*(x1^2-x2^2));if A==0disp('run is lost!!')elsex_m=B/A;if abs(x2-x_m)<expif f(x_m)<=f2x=x_m;f_x=f(x_m);breakelsex=x2;f_x=f2;breakendelseif (x_m-x1)*(x_m-x2)<0if f(x_m)<=f2x3=x2;x2=x_m;f3=f2;f2=f(x_m);elsex1=x_m;f1=f(x_m);endelseif f(x_m)<=f2x1=x2;x2=x_m;f1=f2;f2=f(x_m);elsex3=x_m;f3=f(x_m);end end endendendend。

matlab曲率半径 (1)

matlab曲率半径 (1)

matlab曲率半径 (1)Matlab曲率半径曲率半径是在数学和物理学中用于描述曲线弯曲程度的一个重要概念。

在Matlab中,我们可以使用不同的方法来计算曲线的曲率半径,包括数值解法和符号解法。

本文将介绍如何使用Matlab计算曲率半径,并提供一些实例来展示其应用。

1. 数值解法数值解法是使用数值逼近的方法计算曲线的曲率半径。

在Matlab中,我们可以通过以下步骤来实现:步骤一:导入曲线数据首先,我们需要导入曲线的数据点。

假设我们有一条曲线,其中包含n个数据点,每个数据点的坐标为(xi, yi)。

在Matlab中,我们可以使用如下代码导入数据:```x = [x1, x2, ..., xn];y = [y1, y2, ..., yn];```步骤二:计算曲线切线向量接下来,我们需要计算曲线上每个数据点的切线向量。

切线向量可以通过计算相邻两个数据点之间的差分来获得。

在Matlab中,我们可以使用如下代码计算切线向量:```dx = diff(x);dy = diff(y);```步骤三:计算切线向量的长度计算切线向量的长度,即切线的长度。

在Matlab中,我们可以使用如下代码计算切线长度:```tangent_length = sqrt(dx.^2 + dy.^2);```步骤四:计算曲率半径通过计算切线长度和切线向量之间的关系,我们可以得到曲线的曲率半径。

在Matlab中,我们可以使用如下代码计算曲率半径:```curvature_radius = tangent_length.^2./(dx.*dy - dy.*dx);```2. 符号解法符号解法是使用符号计算方法来计算曲线的曲率半径。

在Matlab中,我们可以使用符号函数来代表曲线,并利用符号运算来求解曲率半径。

下面是一个示例:假设我们有一个二次曲线,其方程为y = ax^2 + bx + c。

我们可以使用符号计算的方法求解其曲率半径。

步骤一:定义符号变量和函数首先,我们需要定义符号变量和符号函数。

matlab数值解方程

matlab数值解方程

matlab数值解方程MATLAB是一种高级的数值计算软件,它非常适合数学求解问题。

MATLAB有一个非常强大的数值解方程工具箱,可以帮助人们解决各种复杂的方程问题。

在本文中,我们将介绍如何使用MATLAB数值解方程。

MATLAB数值解方程是通过迭代法或牛顿迭代法求解非线性方程或方程组的解。

它可以求解非线性方程组,线性方程组,常微分方程,偏微分方程等。

MATLAB数值解方程可以通过以下步骤进行:1. 定义方程在MATLAB中,通常使用symbolic工具箱来定义方程。

使用syms函数定义变量,并使用等于号将方程左边与右边连接。

例如,要定义以下方程:x ^ 2 + 3 * x - 2 = 0使用以下代码:syms xf = x ^ 2 + 3 * x - 2;2. 求解方程使用solve函数来求解方程。

该函数的输入参数是方程变量和方程,输出是方程的根。

例如,使用以下代码求解上述方程:x = solve(f)执行后,MATLAB将返回方程的根,即[-3.3029, 0.3029]。

3. 解非线性方程组使用fsolve函数可以求解非线性方程组,它可以将一个或多个非线性方程组等效于可用函数语法的单一函数。

示例如下:x0 = [0,0];[x,fval] = fsolve(@(x)[x(1)^2+x(2)^2-1, exp(x(1))-x(2)], x0)其中,x0为初始猜测,@(x)表示匿名函数,包含需要求解的方程组。

4. 解线性方程组使用linsolve函数可以求解线性方程组,它可以将系数矩阵和常数矢量作为输入,并返回解向量。

示例如下:A = [1 2 3; 4 5 6; 7 8 0];B = [3; 6; 9];X = linsolve(A,B)其中,A为系数矩阵,B为常数矢量。

5. 解常微分方程使用ode45函数(一种常用的MATLAB求解常微分方程框架函数)来求解常微分方程。

该函数需要一个匿名函数作为输入,该函数返回微分方程的右侧。

一维抛物线偏微分方程数值解法

一维抛物线偏微分方程数值解法

一维抛物线偏微分方程数值解法(2)上一篇文章请参看一维抛物线偏微分方程数值解法(1)解一维抛物线型方程(理论书籍可以参看孙志忠:偏微分方程数值解法)Ut-Uxx=0, 0<x<1,0<t<=1(Ut-aUxx=f(x,t),a>0)U(x,0)=e^x, 0<=x<=1,U(0,t)=e^t,U(1,t)=e^(1+t), 0<t<=1精确解为:U(x,t)=e^(x+t);Matlab程序:(此为向后差分法)function [u p e x t]=pwxywxh(h1,h2,m,n)%欧拉向后差分法解一维抛物线型偏微分方程%此程序用的是追赶法解线性方程组%h1为空间步长,h2为时间步长%m,n分别为空间,时间网格数%p为精确解,u为数值解,e为误差x=(0:m)*h1+0;t=(0:n)*h2+0;for(i=1:n+1)for(j=1:m+1)f(i,j)=0;endendfor(i=1:n+1)u(i,1)=exp(t(i));u(i,m+1)=exp(1+t(i));endfor(i=1:m+1)u(1,i)=exp(x(i));endr=h2/(h1*h1);for(i=2:n+1) %外循环,先固定每一时间层,每一时间层上解一线性方程组%a(1)=0;b(1)=1+2*r;c(1)=-r;d(1)=u(i-1,2)+h2*f(i,2)+r*u(i,1);for(k=2:m-2)a(k)=-r;b(k)=1+2*r;c(k)=-r;d(k)=u(i-1,k+1)+h2*f(i,k+1);%输入部分系数矩阵,为0的矩阵元素不输入%enda(m-1)=-r;b(m-1)=1+2*r;d(m-1)=u(i-1,m)+h2*f(i,m)+r*u(i,m+1);for(k=1:m-2) %开始解线性方程组消元过程a(k+1)=-a(k+1)/b(k);b(k+1)=b(k+1)+a(k+1)*c(k);d(k+1)=d(k+1)+a(k+1)*d(k);endu(i,m)=d(m-1)/b(m-1); %回代过程%for(k=m-2:-1:1)u(i,k+1)=(d(k)-c(k)*u(i,k+2))/b(k);endendfor(i=1:n+1)for(j=1:m+1)p(i,j)=exp(x(j)+t(i)); %p为精确解e(i,j)=abs(u(i,j)-p(i,j));%e为误差endend[u p e x t]=pwxywxh(0.1,0.005,10,200);surf(x,t,e);xlabel('x');ylabel('t');zlabel('e');>> title('误差曲面');plot(t,e)误差较之前的欧拉向前差分格式增长了两倍[u p e x t]=pwxywxh(0.1,0.05,10,20); plot(t,e)[u p e x t]=pwxywxh(0.01,0.05,100,20); plot(t,e)[u p e x t]=pwxywxh(0.01,0.005,100,200);plot(x,e)[u p e x t]=pwxywxh(0.005,0.005,200,200); plot(x,e)X=1时,出现了误差??? 不是边界条件吗?不能理解这方法还是比前一种方法误差大呀不过可以随便改变时间、空间步长。

教你用MATLAB快速作一维、二维、三维图

教你用MATLAB快速作一维、二维、三维图

精选可编辑ppt
7
• 加图例
• 给图形加图例命令为legend。该命令把图例放置在图形空 白处,用户还可以通过鼠标移动图例,将其放到希望的位 置。
• 格式:legend('图例说明','图例说明');
• 为正弦、余弦曲线增加图例,其程序为:
• x=0:pi/100:2*pi;
• y1=sin(x);
• grid on 加网格线
• text(x,y,‘string’) adds the string in quotes(引号) to the location specified by the point (x,y).
• \bullet ·
• \pi
π
• \rightarrow 右箭头
• EdgeColor -- Color of the rectangle's edge (none by
例 在[-2,2]范围内绘制函数tanh的图形
解 fplot(‘tanh’,[-2,2])
Matlab liti28
例 x 、 y 的 取 值 范 围 都 在 2 [ - 2 , ] ,
画 函 数 t a n h ( x ) , s i n ( x ) , c o s ( x ) 的 图 形
解 输入命令:
--将多条精线选可画编辑在pp一t 起
3
例 在[0,2*pi]用红线画sin(x),用绿圈画cos(x).
解 x=linspace(0,2*pi,30);
y=sin(x); z=cos(x);
Matlab liti1
plot(x,y,'r',x,z,’g0')
1
0.8

MATLAB第十三讲常微分方程初值问题数值解法 ppt课件

MATLAB第十三讲常微分方程初值问题数值解法 ppt课件

1.483240
0.8 1.649783
1.612452
1.0 1.784770
1.732051
误差
0.008602 0.016572 0.025726 0.037331 0.052719
与准确解 y 12x相比,可看出欧拉公式的计算结
果精度很差.
上页 下页
欧拉公式具有明显的几何意义, 就是用折线近似代
或表示为下列平均化形式
yp yc
yn yn
hf hf
( x n , y n ), ( x n1 , y p ),
f(x ,y 1 ) f(x ,y 2 ) L y 1 y 2 .
它表明f满足利普希茨条件,且L的大小反映了右端函 数f关于y变化的快慢,刻画了初值问(1.1)式和(1.2)式 是否为好条件. 这在数值求解中也是很重要的.
上页 下页
虽然求解常微分方程有各种各样的解析方法,但 解析方法只能用来求解一些特殊类型的方程,实际问 题中归结出来的微分方程主要靠数值解法.
利普希茨常数(简称Lips.常数).
上页 下页
定理1 设f在区域D={(x, y)|axb,yR}上连续, 关 于y满足利普希茨条件,则对任意x0[a, b], y0R,常 微分方程初值问题(1.1)式和(1.2)式当x[a, b]时存在 唯一的连续可微解y(x) .
解的存在唯一性定理是常微分方程理论的基本内 容,也是数值方法的出发点,此外还要考虑方程的解 对扰动的敏感性,它有以下结论.
可得欧拉法(2.1)的公式误差为
y (x n 1 ) y n 1 h 2 2y (n ) h 2 2y (x n ), (2 .3 )
称为此方法的局部截断误差.
上页 下页

一维抛物型偏微分方程初边值问题求解

一维抛物型偏微分方程初边值问题求解

一维抛物型偏微分方程初边值问题求解摘要:一、引言1.抛物型偏微分方程简介2.初边值问题的意义和重要性二、一维抛物型偏微分方程初边值问题的求解方法1.分离变量法2.紧差分法3.Crank-Nicolson 方法4.Richardson 外推法三、Matlab程序实现1.紧差分格式求解2.追赶法解线性方程组四、案例分析1.热传导方程的初边值问题求解五、结论与展望1.初边值问题求解的重要性2.未来研究方向和挑战正文:一、引言抛物型偏微分方程是一类重要的偏微分方程,其在物理、工程、数学等领域具有广泛的应用。

其中,一维抛物型偏微分方程的初边值问题更是研究的热点。

初边值问题是指在给定的边界条件下,求解方程在空间和时间上的演化过程。

本文将介绍一维抛物型偏微分方程初边值问题的求解方法,并以热传导方程为例进行具体分析。

二、一维抛物型偏微分方程初边值问题的求解方法1.分离变量法:这是一种常用的求解初边值问题的方法,主要思想是将偏微分方程分解为多个独立的常微分方程。

通过对每个常微分方程求解,最后得到偏微分方程的解。

2.紧差分法:这是一种求解偏微分方程的数值方法。

通过在空间和时间上进行离散化,将偏微分方程转化为线性代数方程组。

然后采用追赶法或迭代法求解线性方程组,从而得到偏微分方程的数值解。

3.Crank-Nicolson 方法:这是一种经典的有限差分法,用于求解一维抛物型偏微分方程。

通过在空间和时间上进行离散化,并采用中心差分公式,将偏微分方程转化为线性代数方程组。

然后求解线性方程组,得到偏微分方程的解。

4.Richardson 外推法:这是一种提高数值解精度的方法,通过多次迭代,逐渐减少空间和时间步长,使数值解接近真实解。

MATLAB求解方程解析解和数值解

MATLAB求解方程解析解和数值解

辽宁工程技术大学上机实验报告用MATLAB求解质点振动方程振动是日常生活和工程技术中常见的一种运动形式。

利用常系数线性微分方程的理论来讨论有关自由振动和强迫振动的相关问题。

利用MATLAB数学软件大致可分四类情况:(1)无阻尼自由振动情况;(2)有阻尼自由振动;(3)无阻尼强迫振动;(4)有阻尼强迫振动求其数值解和解析解;MATLAB软件求解微分方程解析解的命令“ dsolve() ”求通解的命令格式:(’微分方程’自变量'注:微分方程在输入时,一阶导数y'应输入Dy,y'应输入D2y等,D应大写。

1, 无阻尼自由振动情况:常见的数学摆的无阻尼微小振动方程代码如下:>> t=0:pi/50:2*pi;>> y=2*s in( 3*t+2);>>plot(t,y,'b')2 ! ----------------- B------------------ , ------------------- p ----------------- , ------------------ , ------------------- , -----------------1.5 -\ ;1X ; '| - '■' ■I,°.5 ■-! I-0.5 --1 ■-\ : ■-1.5-2 ........................ ....................................................................................................................0 1 2 3 4 5 6 72, 有阻尼自由振动由无阻尼振动的通解可以看出,无阻尼振动是按照正弦规律运动的,摆动似乎可以无限期的进行下去,但事实上,空气从在阻力,在运动时,我们必须把空气阻力考虑在内,所以我们得到有阻尼摆动方程为:记u/m=2n,g/l=w A2,这里n,w是正常数,所以:y=dsolve('D2y+2* n*Dy+wA2*y=0','t'); ( 4.43)解得:y = C3*exp(-t*(n + ((n + w)*(n - w))A(1/2))) + C2*exp(-t*(n - ((n + w)*(n - w))A(1/2)))(1)小阻尼情形:n<w时,方程(4.43)的通解为:y=exp(-n*t)*(c1*cos(w1*t)+c2*si n(w1*t))和前面无阻尼的情形一样,可以把上式的通解改写为一下形式:y=A*exp(-n*t)*si n(w1*t+Q), (4.45)这里的A,Q为任意常数。

已知初始点和初始步长,抛物线法求函数的近似极小点matlab

已知初始点和初始步长,抛物线法求函数的近似极小点matlab

已知初始点和初始步长,抛物线法求函数的近似极小点matlab本文介绍如何利用抛物线法求解函数的近似极小点,给定初始点和初始步长。

使用Matlab编程实现该方法。

抛物线法是一种基于局部二次近似的最优化方法,通常用于求解无约束优化问题。

其基本思路是,利用当前点和前两个点的函数值,构建一个二次函数模型,然后求解该模型的极小点,作为下一步的更新点。

抛物线法的特点是收敛速度快,在一定条件下能够保证全局收敛。

本文中,我们将介绍如何使用抛物线法求解函数的近似极小点,假设我们已知函数的一阶导数和二阶导数存在且连续。

1. 抛物线模型构建假设当前点为x0,前两个点为x-1和x-2,函数值分别为f(x0),f(x-1)和f(x-2)。

我们需要构建一个二次函数模型,该模型在x0处的导数为零,即:y = a(x-x0)^2 + b(x-x0) + cy' = 2a(x-x0) + b = 0y'' = 2a解得:a = (f(x-2) - 2f(x-1) + f(x0)) / h^2b = (f(x0) - f(x-1)) / h - ahc = f(x0)其中h是当前步长,即x0-x-1。

2. 极小点求解我们将抛物线模型的极小点作为下一步的更新点,即:x1 = x0 - b / 2a步长h不变。

3. 步长更新为了保证算法的收敛性和稳定性,我们需要动态更新步长h。

具体来说,如果当前步长h在两次迭代之间变化不大,我们将继续使用当前步长;否则,我们将使用一个缩小因子来缩小步长。

具体来说,假设当前步长为h,上一步的步长为hprev,我们定义一个缩小因子p,如果满足:abs(h - hprev) / hprev <= p则继续使用当前步长,否则我们将步长缩小为:h = p * h4. 算法流程根据以上步骤,我们可以得到抛物线法的算法流程:1. 设置初始点x0和初始步长h,以及其他算法参数。

2. 计算当前点x0和前两个点x-1和x-2的函数值f(x0),f(x-1)和f(x-2)。

常微分方程的数值解的matlab命令实现方法

常微分方程的数值解的matlab命令实现方法

常微分方程的数值解的matlab命令实现方法常微分方程的数值解在 MATLAB 中可以通过 ode 函数或 dsolve 函数进行求解。

其中,ode 函数可以求解一阶常微分方程,而 dsolve 函数可以求解二阶及以上的常微分方程。

下面是具体的实现方法:1. 一阶常微分方程的求解对于一阶常微分方程,可以使用 ode 函数求解。

假设我们要求解的常微分方程为:dx/dt = f(x, t)可以使用以下命令进行求解:y0 = [a, 0]; % 初值条件tspan = [0, 20]; % 时间区间[t, y] = ode45(@(t, y) odefun(t, y, a), tspan, y0); % 求解其中,odefun 函数用于定义常微分方程的解,它是一个自定义函数,其形式可以为:dy/dt = f(t, y)其中,dy 是 y 的求导,f(t, y) 是常微分方程的系数矩阵。

在 MATLAB 中,可以使用 dy[] 函数来计算 y 的求导,例如:dy = dy[](t, y);最后,使用 ode45 函数求解常微分方程的解,其中 tspan 是时间区间,y0 是初值条件。

2. 二阶常微分方程的求解对于二阶常微分方程,可以使用 dsolve 函数求解。

假设我们要求解的二阶常微分方程为:d2y/dt2 + p(t)dyy/dt + q(t)dy/dt + r(t)y = 0可以使用以下命令进行求解:syms t pqr;y0 = [a1, a2, a3]; % 初值条件[t, y] = dsolve(@(t, y) dy0(t, y), t, y0); % 求解其中,dy0 函数用于定义二阶常微分方程的解,其形式可以为:d2y/dt2 + p(t)dyy/dt + q(t)dy/dt + r(t)y = 0其中,d2y/dt2 是 y 的二阶求导,其它项是 y 的求导。

在 MATLAB 中,可以使用 dy0[] 函数来计算 y 的二阶求导。

一维抛物线型方程数值解法附图及matlab程序

一维抛物线型方程数值解法附图及matlab程序

一维抛物线偏微分方程数值解法(1)解一维抛物线型方程(理论书籍可以参看孙志忠:偏微分方程数值解法)Ut-Uxx=0, 0<x<1,0<t<=1(Ut-aUxx=f(x,t),a>0)U(x,0)=e^x, 0<=x<=1,U(0,t)=e^t,U(1,t)=e^(1+t), 0<t<=1精确解为:U(x,t)=e^(x+t);下面给出两个matlab程序,实质一样(用的是向前欧拉格式)第二个程序由之前解线性方程组的G-S迭代法得到,迭代次数k=2(固定)function [p u e x t]=pwxywxq(h1,h2,m,n)% 解抛物线型一维方程向前欧拉格式(Ut-aUxx=f(x,t),a>0)%不用解线性方程组,由下一层(时间层)的值就直接得到上一层的值%m,n为x,t方向的网格数,例如(2-0)/0.01=200;%e为误差,p为精确解u=zeros(n+1,m+1);x=0+(0:m)*h1;t=0+(0:n)*h2;for(i=1:n+1)u(i,1)=exp(t(i));u(i,m+1)=exp(1+t(i));endfor(i=1:m+1)u(1,i)=exp(x(i));endfor(i=1:n+1)for(j=1:m+1)f(i,j)=0;endendr=h2/(h1*h1); %此处r=a*h2/(h1*h1);a=1 要求r<=1/2差分格式才稳定for(i=1:n)for(j=2:m)u(i+1,j)=(1-2*r)*u(i,j)+r*(u(i,j-1)+u(i,j+1))+h2*f(i,j);endendfor(i=1:n+1)for(j=1:m+1)p(i,j)=exp(x(j)+t(i));e(i,j)=abs(u(i,j)-p(i,j));endend或者:function [u e p x t k]=paowuxianyiweixq(h1,h2,m,n,kmax,ep)% 解抛物线型一维方程向前欧拉格式(Ut-aUxx=f(x,t),a>0)%kmax为最大迭代次数%m,n为x,t方向的网格数,例如(2-0)/0.01=200;%e为误差,p为精确解syms temp;u=zeros(n+1,m+1);x=0+(0:m)*h1;t=0+(0:n)*h2;for(i=1:n+1)u(i,1)=exp(t(i));u(i,m+1)=exp(1+t(i));endfor(i=1:m+1)u(1,i)=exp(x(i));endfor(i=1:n+1)for(j=1:m+1)f(i,j)=0;endenda=zeros(n,m-1);r=h2/(h1*h1);%此处r=a*h2/(h1*h1);a=1 要求r<=1/2差分格式才稳定for(k=1:kmax)for(i=1:n)for(j=2:m)temp=(1-2*r)*u(i,j)+r*(u(i,j-1)+u(i,j+1))+h2*f(i,j); a(i+1,j)=(temp-u(i+1,j))*(temp-u(i+1,j));u(i+1,j)=temp;endenda(i,j)=sqrt(a(i,j));if(k>kmax)break;endif(max(max(a))<ep)break;endendfor(i=1:n+1)for(j=1:m+1)p(i,j)=exp(x(j)+t(i));e(i,j)=abs(u(i,j)-p(i,j));endend在命令窗口中输入:[p u e x t]=pwxywxq(0.1,0.005,10,200);>> surf(x,t,u)>> shading interp;>> xlabel('x');ylabel('t');zlabel('u');>> title('一维抛物线方程向前欧拉法数值解');surf(x,t,p)>> shading interp;xlabel('x');ylabel('t');zlabel('p');>> title('一维抛物线方程向前欧拉法精确解')同理:plot(x,u)>> xlabel('x');ylabel('u');>> title('固定时间改变x u与x 的关系数值解')[p u e x t]=pwxywxq(0.1,0.01,10,100);surf(x,t,u)Warning: Axis limits outside float precision, use ZBuffer or Painters instead. Not renderingWarning: Axis limits outside float precision, use ZBuffer or Painters instead. Not renderingWarning: Axis limits outside float precision, use ZBuffer or Painters instead. Not renderingWarning: Axis limits outside float precision, use ZBuffer or Painters instead. Not rendering>> surf(x,t,e)Warning: Axis limits outside float precision, use ZBuffer or Painters instead. Not renderingWarning: Axis limits outside float precision, use ZBuffer or Painters instead. Not renderingWarning: Axis limits outside float precision, use ZBuffer or Painters instead. Not rendering>>所以空间步长与时间步长需要满足上面所说的关系继续减小时间步长[p u e x t]=pwxywxq(0.1,0.001,10,1000)此为欧拉向前差分法,向后差分法请参看下一篇文章:一维抛物线偏微分方程数值解法(2)(附matlab程序及图片)我近期在做这个,有兴趣可以一起学习百度账号:草随风逝。

一阶微分方程的MATLAB数值解法

一阶微分方程的MATLAB数值解法

毕业论文题目一阶微分方程的matlab数值解法学院数学科学学院专业数学与应用数学班级数学1303班学生邹健峰学号7指导教师邢顺来讲师二〇一七年五月七日摘要微分方程的数值解法是近现代数学家和科学家们研究的热点,微分方程的MATLAB数值解法可以帮助我们解决现实生活中的许多数学问题,提高计算机帮助我们解决问题的效率。

本文主要讨论研究一阶微分方程的MATLAB数值解法中的三种Euler法和三种Runge-Kutta法,介绍以上六种方法的主要容,简单介绍了MATLAB的相关容和微分方程的发展简史。

通过具体的微分方程来研究以上算法的编程实现,通过MATBLAB求解具体的一阶微分方程来探究以上方法的优缺点,通过图表来分析得出结论:改进Euler法和四阶Runge-Kutta法的阶的精度较高,具有较好的算法稳定性。

关键词:一阶微分方程;数值解法;MATLAB;Euler法;Runge-Kutta法ABSTRACTThe numerical solution of differential equations is a hot spot for modern mathematicians and scientists,the MATLAB numerical solution of the differential equation can help us solve many mathematical problems in real life,improve the efficiency of the puter to help us solve the problem.This paper mainly discusses three kinds of Euler methods and three Runge-Kutta methods in MATLAB numerical solution of first order differential equation,introduce the main contents of the above six methods, a brief introduction to the development of MATLAB related content and differential equations of a brief history.The programming of the above algorithm is studied by the concrete differential equation,he advantages and disadvantages of the above methods are explored through MATBLAB solving the specific first-order differential equation,through the chart to analyze the conclusions:The improved Euler method and the fourth order Runge-Kutta method have higher accuracy,has good algorithm stability.Keywords:First Order Differential Equation; Numerical Solution; MATLAB; Euler Method; Runge-KuttaMethod目录摘要 ........................................................................................................ 错误!未定义书签。

一维热传导方程数值解法及matlab实现

一维热传导方程数值解法及matlab实现

问题描述实验原理分离变量法实验原理有限差分法实验目的利用分离变量法和有限差分法解热传导方程问题利用matlab进行建模构建图形研究不同的情况下采用何种方法从更深层次上理解热量分布与时间、空间分布关系。

模拟与仿真作业(1)分离变量法(代码):x=0:0.1*pi:pi;y=0:0.04:1;[x,t]=meshgrid(x,y);s=0;m=length(j);%matlab可计算的最大数相当于无穷for i=1:ms=s+(200*(1-(-1)^i))/(i*pi)*(sin(i*x).*exp(-i^2*t)); end;surf(x,t,s);xlabel('x'),ylabel('t'),zlabel('T');title(' 分离变量法(无穷)');axis([0 pi 0 1 0 100]);所得到的三维热传导图形为:有限差分法:u=zeros(10,25); %t=1 x=pi 构造一个1025列的矩阵(初始化为0)用于存放时间t和变量x 横坐标为x 纵坐标为ts=(1/25)/(pi/10)^2;fprintf('稳定性系数S为:\n');disp(s);for i=2:9u(i,1)=100;end;for j=1:25u(1,j)=0;u(10,j)=0;end;for j=1:24for i=2:9u(i,j+1)=s*u(i+1,j)+(1-2*s)*u(i,j)+s*u(i-1,j); endenddisp(u);[x,t]=meshgrid(1:25,1:10);surf(x,t,u);xlabel('t'),ylabel('x'),zlabel('T');title(' 有限差分法解');所得到的热传导图形为:(2)i分离变量法(取前100项和)x=0:0.1*pi:pi;y=0:0.04:1;[x,t]=meshgrid(x,y);s=0;for i=1:100s=s+(200*(1-(-1)^i))/(i*pi)*(sin(i*x).*exp(-i^2*t)); end;surf(x,t,u);xlabel('x'),ylabel('t'),zlabel('T');title(' 分离变量法');axis([0 pi 0 1 0 100]);所得到的热传导图形为:Ii有限差分法根据(1)我们有如下图结论:比较可得这两幅图基本相同,有限差分法和分离变量法对本题都适应(3)第一种情况(取无穷项):在原来程序代码的基础上加上disp(s(:,6)); 可得出第六列(即x=pi/2)处温度随时间的变化情况x=0:0.1*pi:pi;y=0:0.04:1;[x,t]=meshgrid(x,y);s=0;m=length(j);%matlab可计算的最大数,相当于无穷for i=1:ms=s+(200*(1-(-1)^i))/(i*pi)*(sin(i*x).*exp(-i^2*t));end;surf(x,t,s);xlabel('x'),ylabel('t'),zlabel('T');title(' 分离变量法(无穷)');axis([0 pi 0 1 0 100]);disp(s(:,6));我们得到如下一组数据:当温度低于50度是时间为t=23.5*0.04=0.94第二种情况(取前100项和)在原来程序代码的基础上加上disp(s(:,6)); 可得出第六列(即x=pi/2)处温度随时间的变化情况x=0:0.1*pi:pi;y=0:0.04:1;[x,t]=meshgrid(x,y);r=0.04/(0.1*pi)^2;fprintf('稳定性系数S为:')disp(r);s=0;for i=1:100s=s+(200*(1-(-1)^i))/(i*pi)*(sin(i*x).*exp(-i^2*t));end;surf(x,t,s);xlabel('x'),ylabel('t'),zlabel('T');title(' 分离变量法');axis([0 pi 0 1 0 100]);disp(s(:,6));当温度低于50度是时间为t=23.5*0.04=0.94第三种情况(有限差分法)在原来程序代码的基础上加上disp(u(5,:));可得出第五行(即x=pi/2)处温度随时间的变化情况u=zeros(10,25); %t=1 x=pi 10行25列横坐标为x 纵坐标为ts=(1/25)/(pi/10)^2;fprintf('稳定性系数S为:\n');disp(s);for i=2:9u(i,1)=100;end;for j=1:25u(1,j)=0;u(10,j)=0;end;for j=1:24for i=2:9u(i,j+1)=s*u(i+1,j)+(1-2*s)*u(i,j)+s*u(i-1,j);endenddisp(u);[x,t]=meshgrid(1:25,1:10);surf(x,t,u);xlabel('t'),ylabel('x'),zlabel('T');title(' 有限差分法解');disp(u(5,:));得到如下结果我们知19列为50.3505 20列是数据为47.8902 所以时间t为20*0.04=0.78结论:比较一二三种情况,我们得到不同的时间,这是由于:1、加和不同一种为100,一种为无穷;2、采用的方法不同:一种为分离变量法,一种为有限差分法造成的。

一维抛物线方程混合边界问题matlab求解(一维扩散方程

一维抛物线方程混合边界问题matlab求解(一维扩散方程

在差分方法中分为前差、后差、中心差以及显式、隐式、中心式。

这些概念分别对应着对空间和时间的离散。

针对以上抛物线方程的求解方法,分别采用向前、向后、对称六点和三行式进行计算。

一维抛物线的一般方程为此题为混合边界问题1、前差的一般格式为将成为网比,记做r,则差分格式可以写成将上标为k+1的放在一边,k的放在一边,这样就可以写成矩阵形式。

根据已知条件便可以求解。

(下面是前差的matlab代码)r=10;x=0:0.1:1;t=0:0.1:1;U=[];U(:,1)=0;U(:,11)=0;U(1,:)=sin(pi.*x);for i=2:11%%行for j=2:10%%列U(i,j)=r*U(i-1,j-1)+(1-2*r)*U(i-1,j)+r*U(i-1,j+1);endendfigure;surf(x,t,U);例题中并没有给出t的具体值,这里取了1,如同正方形laplace方程一样,纯粹为了好求。

上面两个for循环代替了矩阵的作用。

如果想改成矩阵,很简单,自行解决。

这里请注意前差后差的不同点在于右式中上标的变化。

附上matlab代码:h=0.1;k=0.1;N=1/h;M=1/0.1;r=k/h^2;for i=1:N-1B(i)=sin(i/N*pi);endU(:,1)=B;A=diag(ones(1,N-1)*(1+2*r))-diag(ones(1,N-2)*r,1)-diag(ones(1,N-2)*r, -1);for i=2:M+1U(:,i)=A\U(:,i-1);endZ=[zeros(11,1),U',zeros(11,1)];[X,Y]=meshgrid(linspace(1,0,11),linspace(1,0,11));surf(X,Y,Z);整理上式可以得到类似AX=BY形式的矩阵,h=0.1;k=0.1;N=1/h;M=1/0.1;r=k/h^2;for i=1:N-1B(i)=sin(i/N*pi)endU(:,1)=BA=diag(ones(1,N-1)*(1+r))-diag(ones(1,N-2)*r/2,1)-diag(ones(1,N-2)*r/ 2,-1)C=diag(ones(1,N-1)*(1-r))+diag(ones(1,N-2)*r/2,1)+diag(ones(1,N-2)*r/ 2,-1)for i=2:M+1U(:,i)=A\(C*U(:,i-1))endZ=[zeros(11,1),U',zeros(11,1)];[X,Y]=meshgrid(linspace(0,1,11),linspace(0,1,11));surf(X,Y,Z);三行式的稳定性很差,做出来的结果也令人吃惊,不知是对是错,大家自己好好检查一下。

一维偏微分方程的pdepe(matlab)函数 解法

一维偏微分方程的pdepe(matlab)函数    解法

本文根据matlab帮助进行加工,根据matlab帮助上的例子,帮助更好的理解一维偏微分方程的pdepe函数解法,主要加工在于程序的注释上。

ExamplesExample 1.This example illustrates the straightforward formulation, computation, and plotting of the solution of a single PDE.This equation holds on an intervalfor times.The PDE satisfies the initial conditionand boundary conditionsIt is convenient to use subfunctions to place all the functions required by pdepe in a single function.function pdex1m = 0;x = linspace(0,1,20);%linspace(x1,x2,N)linspace是Matlab中的一个指令,用于产生x1,x2之间的N点行矢量。

%其中x1、x2、N分别为起始值、终止值、元素个数。

若缺省N,默认点数为100t = linspace(0,2,5);sol = pdepe(m,@pdex1pde,@pdex1ic,@pdex1bc,x,t);% Extract the first solution component as u.u = sol(:,:,1);% A surface plot is often a good way to study a solution.surf(x,t,u)title('Numerical solution computed with 20 mesh points.')xlabel('Distance x')ylabel('Time t')% A solution profile can also be illuminating.figureplot(x,u(end,:))title('Solution at t = 2')xlabel('Distance x')ylabel('u(x,2)')% --------------------------------------------------------------function [c,f,s] = pdex1pde(x,t,u,DuDx)c = pi^2;f = DuDx;s = 0;% --------------------------------------------------------------function u0 = pdex1ic(x)u0 = sin(pi*x);% --------------------------------------------------------------function [pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t)pl = ul;ql = 0;pr = pi * exp(-t);qr = 1;In this example, the PDE, initial condition, and boundary conditions are coded in subfunctions pdex1pde, pdex1ic, and pdex1bc.The surface plot shows the behavior of the solution.The following plot shows the solution profile at the final value of t (i.e., t = 2).我们再将该问题复杂化,比如在原方程右边加一项,对于标准形式,其余条件不变function pdex1m = 0;x = linspace(0,1,20);%linspace(x1,x2,N)linspace是Matlab中的一个指令,用于产生x1,x2之间的N点行矢量。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一维抛物线偏微分方程数值解法(1)
解一维抛物线型方程(理论书籍可以参看孙志忠:偏微分方程数值解法)
Ut-Uxx=0, 0<x<1,0<t<=1(Ut-aUxx=f(x,t),a>0)
U(x,0)=e^x, 0<=x<=1,
U(0,t)=e^t,U(1,t)=e^(1+t), 0<t<=1
精确解为:U(x,t)=e^(x+t);
下面给出两个matlab程序,实质一样(用的是向前欧拉格式)
第二个程序由之前解线性方程组的G-S迭代法得到,迭代次数k=2(固定)
function [p u e x t]=pwxywxq(h1,h2,m,n)
% 解抛物线型一维方程向前欧拉格式(Ut-aUxx=f(x,t),a>0)
%不用解线性方程组,由下一层(时间层)的值就直接得到上一层的值
%m,n为x,t方向的网格数,例如(2-0)/0.01=200;
%e为误差,p为精确解
u=zeros(n+1,m+1);
x=0+(0:m)*h1;
t=0+(0:n)*h2;
for(i=1:n+1)
u(i,1)=exp(t(i));
u(i,m+1)=exp(1+t(i));
end
for(i=1:m+1)
u(1,i)=exp(x(i));
end
for(i=1:n+1)
for(j=1:m+1)
f(i,j)=0;
end
end
r=h2/(h1*h1); %此处r=a*h2/(h1*h1);a=1 要求r<=1/2差分格式才稳定for(i=1:n)
for(j=2:m)
u(i+1,j)=(1-2*r)*u(i,j)+r*(u(i,j-1)+u(i,j+1))+h2*f(i,j);
end
end
for(i=1:n+1)
for(j=1:m+1)
p(i,j)=exp(x(j)+t(i));
e(i,j)=abs(u(i,j)-p(i,j));
end
end
或者:
function [u e p x t k]=paowuxianyiweixq(h1,h2,m,n,kmax,ep)
% 解抛物线型一维方程向前欧拉格式(Ut-aUxx=f(x,t),a>0)
%kmax为最大迭代次数
%m,n为x,t方向的网格数,例如(2-0)/0.01=200;
%e为误差,p为精确解
syms temp;
u=zeros(n+1,m+1);
x=0+(0:m)*h1;
t=0+(0:n)*h2;
for(i=1:n+1)
u(i,1)=exp(t(i));
u(i,m+1)=exp(1+t(i));
end
for(i=1:m+1)
u(1,i)=exp(x(i));
end
for(i=1:n+1)
for(j=1:m+1)
f(i,j)=0;
end
end
a=zeros(n,m-1);
r=h2/(h1*h1);%此处r=a*h2/(h1*h1);a=1 要求r<=1/2差分格式才稳定
for(k=1:kmax)
for(i=1:n)
for(j=2:m)
temp=(1-2*r)*u(i,j)+r*(u(i,j-1)+u(i,j+1))+h2*f(i,j); a(i+1,j)=(temp-u(i+1,j))*(temp-u(i+1,j));
u(i+1,j)=temp;
end
end
a(i,j)=sqrt(a(i,j));
if(k>kmax)
break;
end
if(max(max(a))<ep)
break;
end
end
for(i=1:n+1)
for(j=1:m+1)
p(i,j)=exp(x(j)+t(i));
e(i,j)=abs(u(i,j)-p(i,j));
end
end
在命令窗口中输入:
[p u e x t]=pwxywxq(0.1,0.005,10,200);
>> surf(x,t,u)
>> shading interp;
>> xlabel('x');ylabel('t');zlabel('u');
>> title('一维抛物线方程向前欧拉法数值解');
surf(x,t,p)
>> shading interp;
xlabel('x');ylabel('t');zlabel('p');
>> title('一维抛物线方程向前欧拉法精确解')
同理:
plot(x,u)
>> xlabel('x');ylabel('u');
>> title('固定时间改变x u与x 的关系数值解')
[p u e x t]=pwxywxq(0.1,0.01,10,100);
surf(x,t,u)
Warning: Axis limits outside float precision, use ZBuffer or Painters instead. Not rendering
Warning: Axis limits outside float precision, use ZBuffer or Painters instead. Not rendering
Warning: Axis limits outside float precision, use ZBuffer or Painters instead. Not rendering
Warning: Axis limits outside float precision, use ZBuffer or Painters instead. Not rendering
>> surf(x,t,e)
Warning: Axis limits outside float precision, use ZBuffer or Painters instead. Not rendering
Warning: Axis limits outside float precision, use ZBuffer or Painters instead. Not rendering
Warning: Axis limits outside float precision, use ZBuffer or Painters instead. Not rendering
>>
所以空间步长与时间步长需要满足上面所说的关系
继续减小时间步长
[p u e x t]=pwxywxq(0.1,0.001,10,1000)
此为欧拉向前差分法,向后差分法请参看下一篇文章
:一维抛物线偏微分方程数值解法(2)(附matlab程序及图片)
我近期在做这个,有兴趣可以一起学习
百度账号:草随风逝。

相关文档
最新文档