当前位置:文档之家› MATLAB数值计算-第4章-方程求根

MATLAB数值计算-第4章-方程求根

MATLAB数值计算-第4章-方程求根
MATLAB数值计算-第4章-方程求根

MATLAB数值计算

(读书日记及程序编写)

第四章方程求根 (2)

第四章 方程求根

#二分法 求2的值

转化成方程02-2

=x

最慢的方法是取初值1001=x 02-21>x ,取502=x

这样得到

也可以x0=a, x1=x0+h, 进行扫描,若f(x0)*f(x1)<0, 则扫描成功,有根区间为[x0,x1],否则继续扫描,如果出现x1>b ,表面扫描失败,再缩小步长h, 再次扫描。

>> format long %让显示的值为

M=2,a=1,b=2,k=0;

while b-a>eps

x=(a+b)/2;

if x^2>M

b=x

else

a=x

end

k=k+1

end

执行后得到的值为:

k =

50

b =

1.414213562373095

k =

51

b =

1.414213562373095

k =

52

最后得到的值就是Matlab 能表达的最接近的值。

#牛顿法

求解f(x)=0的牛顿法是在f(x)画一条切线,确定切线与x 轴的焦点,通过迭代 )

(x f )f(x -n n 1'=+n n x x 对于平方根的问题,牛顿法简洁有效,

换成f(x)=x^2-M, )(x f n '

=2x 这样

???

? ??+==+n n n n x M x M x x 212x -x -n 2n 1 该算法就是反复求x 和M/x 的平均值,Matlab 的程序为:

format long %让显示的值为

xprev=2; %取的不等于初值x 的一个值,让判断能继续

x=100; %取的初值为3

while abs(x-xprev)>eps*abs(x)

xprev=x;

x=0.5*(x+2/x)

end

x = 1.833333333333333

x = 1.462121212121212

x = 1.414998429894803

x = 1.414213780047198

x = 1.414213562373112

x = 1.414213562373095

x = 1.414213562373095

可见6步很快就收敛

然而,若f(x)不具有连续的、有界的一阶、二阶导数,牛顿法的收敛将变得很慢。

#fzero 函数直接求根

求x^3-1在区间[0,10]上的根

fzero(@(x)x^3-1,[0,10])

ans =

1

fzerogui(@(x)x^3-1,[0,10])

可以通过在图形界面上选择割点来得到

>> fzerogui(@(x)x^3-1,[0,10])

ans =

start 0.0000000000000000

start 10.0000000000000000

secant 0.0100000000000000

bisect 5.0049999999999999

secant 0.0498403198384075

bisect 2.5274201599192034

secant 0.2032825426923320

bisect 1.3653513513057676

secant 0.6575071192259432

bisect 1.0114292352658554

secant 0.9950727548572595

secant 0.9999439297147387

iqi 1.0000000052288878

secant 0.9999999999997068

secant 1.0000000000000000

(bisect:二分,secant:交点,可见,经过多次迭代,非常接近真实解x=1

同理,要求贝塞尔函数的根,输入直接得到

>> fzero(@(x)besselj(0,x),[0,3.83])

ans =

2.4048

输入图形求解,可以得到:

>> fzerogui(@(x)besselj(0,x),[0,3.83])

数理方程基于matlab的数值解法

数理方程数值解法与其在matlab软件上的实现张体强1026222 廖荣发1026226 [摘要] 数学物理方程的数值解在实际生活中越来越使用,首先基于偏微分数值解的思想上,通过matlab软件的功能,研究其数学物理方程的数值解,并通过对精确解和数值解进行对比,追究其数值解的可行性,在此,给出相关例子和程序代码,利于以后的再次研究和直接使用。 [关键字] 偏微分方程数值解matlab 数学物理方程的可视化 一:研究意义 在我们解数学物理方程,理论上求数学物理方程的定解有着多种解法,但是有许多定解问题却不能严格求解,只能用数值方法求出满足实际需要的近似解。而且实际问题往往很复杂,这时即便要解出精确解就很困难,有时甚至不可能,另一方面,在建立数学模型时,我们已作了很多近似,所以求出的精确解也知识推导出的数学问题的精确解,并非真正实际问题的精确解。因此,我们有必要研究近似解法,只要使所求得的近似解与精确解之间的误差在规定的范围内,则仍能满足实际的需要,有限差分法和有限元法是两种最常用的

求解数学物理方程的数值解法,而MATLAB 在这一方面具有超强的数学功能,可以用来求其解。 二:数值解法思想和步骤 2.1:网格剖分 为了用差分方法求解上述问题,将求解区域 {}(,)|01,01x t x t Ω=≤≤≤≤作剖分。将空间区间[0,1]作m 等分,将时 间[0,1]区间作n 等分,并记 1/,1/,,0,,0j k h m n x jh j m t k k n ττ===≤≤=≤≤。分别称h 和τ 为空间和 时间步长。用两簇平行直线,0,,0j k x x j m t t k n =≤≤=≤≤将Ω分割成矩形网格。 2.2:差分格式的建立 0u u t x ??-=??………………………………(1) 设G 是,x t 平面任一有界域,据Green 公式(参考数学物理方程第五章): ( )()G u u dxdt udt udx t x Γ??-=--??? ? 其中G Γ=?。于是可将(1)式写成积分守恒形式: ()0udt udx Γ --=? (2) 我们先从(2)式出发构造熟知的Lax 格式设网格如下图所示

线性代数方程组数值解法及MATLAB实现综述

线性代数方程组数值解法及MATLAB实现综述廖淑芳20122090 数计学院12计算机科学与技术1班(职教本科)一、分析课题 随着科学技术的发展,提出了大量复杂的数值计算问题,在建立电子计算机成为数值计算的主要工具以后,它以数字计算机求解数学问题的理论和方法为研究对象。其数值计算中线性代数方程的求解问题就广泛应用于各种工程技术方面。因此在各种数据处理中,线性代数方程组的求解是最常见的问题之一。关于线性代数方程组的数值解法一般分为两大类:直接法和迭代法。 直接法就是经过有限步算术运算,可求的线性方程组精确解的方法(若计算过程没有舍入误差),但实际犹如舍入误差的存在和影响,这种方法也只能求得近似解,这类方法是解低阶稠密矩阵方程组级某些大型稀疏矩阵方程组的有效方法。直接法包括高斯消元法,矩阵三角分解法、追赶法、平方根法。 迭代法就是利用某种极限过程去逐步逼近线性方程组精确解的方法。迭代法具有需要计算机的存储单元少,程序设计简单,原始系数矩阵在计算过程始终不变等优点,但存在收敛性级收敛速度问题。迭代法是解大型稀疏矩阵方程组(尤其是微分方程离散后得到的大型方程组)的重要方法。迭代法包括Jacobi法SOR法、SSOR法等多种方法。 二、研究课题-线性代数方程组数值解法 一、直接法 1、Gauss消元法 通过一系列的加减消元运算,也就是代数中的加减消去法,以使A对角线以下的元素化为零,将方程组化为上三角矩阵;然后,再逐一回代求解出x向量。

1.1消元过程 1. 高斯消元法(加减消元):首先将A 化为上三角阵,再回代求解。 11121121222212n n n n nn n a a a b a a a b a a a b ?? ? ? ? ???(1)(1)(1)(1)(1)11121311(2)(2)(2)(2)222322 (3)(3)(3)3333()()000 00 n n n n n nn n a a a a b a a a b a a b a b ?? ? ? ? ? ? ??? 步骤如下: 第一步:1 11 1,2,,i a i i n a -? +=第行第行 11121121222212 n n n n nn n a a a b a a a b a a a b ?? ? ? ? ???1112 11(2)(2)(2)22 22 (2)(2)(2)2 00n n n nn n a a a b a a b a a b ?? ? ? ? ??? 第二步:(2)2 (2)222,3, ,i a i i n a -?+=第行第行 111211(2)(2)(2)2222(2)(2)(2)2 00n n n nn n a a a b a a b a a b ?? ? ? ? ???11 12 1311(2)(2)(2)(2)222322 (3)(3)(3)33 33(3)(3)(3)3 0000 0n n n n nn n a a a a b a a a b a a b a a b ?? ? ? ? ? ? ??? 类似的做下去,我们有: 第k 步:() ()k ,1, ,k ik k kk a i i k n a -?+=+第行第行。 n -1步以后,我们可以得到变换后的矩阵为: 11121311(2)(2)(2)(2)222322 (3)(3)(3)3333()()00000 n n n n n nn n a a a a b a a a b a a b a b ?? ? ? ? ? ? ?? ?

一维抛物线偏微分方程数值 解法(3)(附图及matlab程序)

一维抛物线偏微分方程数值解法(3) 上一篇参看一维抛物线偏微分方程数值解法(2)(附图及matlab程序) 解一维抛物线型方程(理论书籍可以参看孙志忠:偏微分方程数值解法) Ut-Uxx=0, 00) U(x,0)=e^x, 0<=x<=1, U(0,t)=e^t,U(1,t)=e^(1+t), 0

r=h2/(h1*h1); for(i=1:n) %外循环,先固定每一时间层,每一时间层上解一线性方程组% a(1)=0;b(1)=1+r;c(1)=-r/2;d(1)=r/2* (u(i+1,1)+u(i,1))+h2*f(i,j)... +(1-r)*u(i,2)+r/2*u(i,3); for(k=2:m-2) a(k)=-r/2;b(k)=1+r;c(k)=- r/2;d(k)=h2*f(i,j)+r/2*u(i,k)+(1-r)... *u(i,k+1)+r/2*u(i,k+2); %输入部分系数矩阵,为0的矩阵元素不输入% end a(m-1)=-r/2;b(m-1)=1+r;d(m-1)=h2*f(i,j)+r/2* (u(i,m+1)+u(i+1,m+1)... )+r/2*u(i,m-1)+(1-r)*u(i,m); 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); end u(i+1,m)=d(m-1)/b(m-1); %回代过程% for(k=m-2:-1:1) u(i+1,k+1)=(d(k)-c(k)*u(i+1,k+2))/b(k); end end for(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为误差 end end [u p e x t]=CN(0.1,0.005,10,200);surf(x,t,e); shading interp; >> xlabel('x');ylabel('t');zlabel('e'); >> title('误差曲面')

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

一维抛物线偏微分方程数值解法(1) 解一维抛物线型方程(理论书籍可以参看孙志忠:偏微分方程数值解法) Ut-Uxx=0, 00) U(x,0)=e^x, 0<=x<=1, U(0,t)=e^t,U(1,t)=e^(1+t), 00) %不用解线性方程组,由下一层(时间层)的值就直接得到上一层的值 %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

第二章非线性方程(组)的数值解法的matlab程序

本章主要介绍方程根的有关概念,求方程根的步骤,确定根的初始近似值的方法(作图法,逐步搜索法等),求根的方法(二分法,迭代法,牛顿法,割线法,米勒(M üller )法和迭代法的加速等)及其MATLAB 程序,求解非线性方程组的方法及其MATLAB 程序. 2.1 方程(组)的根及其MATLAB 命令 2.1.2 求解方程(组)的solve 命令 求方程f (x )=q (x )的根可以用MATLAB 命令: >> x=solve('方程f(x)=q(x)',’待求符号变量x ’) 求方程组f i (x 1,…,x n )=q i (x 1,…,x n ) (i =1,2,…,n )的根可以用MATLAB 命令: >>E1=sym('方程f1(x1,…,xn)=q1(x1,…,xn)'); ……………………………………………………. En=sym('方程fn(x1,…,xn)=qn(x1,…,xn)'); [x1,x2,…,xn]=solve(E1,E2,…,En, x1,…,xn) 2.1.3 求解多项式方程(组)的roots 命令 如果)(x f 为多项式,则可分别用如下命令求方程0)(=x f 的根,或求导数)('x f (见表 2-1). 2.1.4 求解方程(组)的fsolve 命令 如果非线性方程(组)是多项式形式,求这样方程(组)的数值解可以直接调用上面已经介绍过的roots 命令.如果非线性方程(组)是含有超越函数,则无法使用roots 命令,需要调用MATLAB 系统中提供的另一个程序fsolve 来求解.当然,程序fsolve 也可以用于多项式方程(组),但是它的计算量明显比roots 命令的大. fsolve 命令使用最小二乘法(least squares method )解非线性方程(组) (F X =)0 的数值解,其中X 和F (X )可以是向量或矩阵.此种方法需要尝试着输入解X 的初始值(向量或矩阵)X 0,即使程序中的迭代序列收敛,也不一定收敛到(F X =)0的根(见例2.1.8). fsolve 的调用格式: X=fsolve(F,X0) 输入函数)(x F 的M 文件名和解X 的初始值(向量或矩阵)X 0,尝试着解方程(组)

双曲方程基于matlab的数值解法

双曲型方程基于MATLAB 的数值解法 (数学1201,陈晓云,41262022) 一:一阶双曲型微分方程的初边值问题 0,01,0 1.(,0)cos(),0 1. (0,)(1,)cos(),0 1. u u x t t x u x x x u t u t t t ππ??-=≤≤≤≤??=≤≤=-=≤≤ 精确解为 ()t x cos +π 二:数值解法思想和步骤 2.1:网格剖分 为了用差分方法求解上述问题,将求解区域{}(,)|01,01x t x t Ω=≤≤≤≤作剖分。将空间区间[0,1]作m 等分,将时间[0,1]区间作n 等分,并记 1/,1/,,0,,0j k h m n x jh j m t k k n ττ===≤≤=≤≤。分别称h 和τ为空间和时 间步长。用两簇平行直线,0,,0j k x x j m t t k n =≤≤=≤≤将Ω分割成矩形网格。 2.2:差分格式的建立 0u u t x ??-=?? 2.2.1:Lax-Friedrichs 方法 对时间、空间采用中心差分使得 2h 1 1111)(2 1u u x u u u u u t u k j k j k j k j k j k j -+-++-= +=-= ????τ τ 则由上式得到Lax-Friedrichs 格式 1 11111()202k k k k k j j j j j u u u u u h τ+-+-+-+-+=

截断误差为 ()[]k k k j h j j R u L u Lu =- 1 11111()22k k k k k k k j j j j j j j u u u u u u u h t x τ+-+-+-+-??=+-+?? 23222 3 (),(0,0)26k k j j u u h O h j m k n t x ττ??= -=+≤≤≤≤?? 所以Lax-Friedrichs 格式的截断误差的阶式2()O h τ+ 令/s h τ=:则可得差分格式为 1111 11(),(0,0)222 k k k k k j j j j j s s u u u u u j m k n +--++=-+++≤≤≤≤ 0cos()(0)j j u x j m π=≤≤ 0cos(),cos(),(0)k k k m k u t u t k n ππ==-≤≤ 其传播因子为: ()()()e e G h i h i s h i h i σσσστσ---=-+e e 221, 化简可得: ()()()()()h s G h is h G στσσστ σsin 11,sin cos ,2 2 2--=-= 所以当1s ≤时,()1,≤τσG ,格式稳定。 * 2.2.2:LaxWendroff 方法 用牛顿二次插值公式可以得到LaxWendroff 的差分格式,在此不详细分析,它的截断误差为() h 2 2 +O τ ,是二阶精度;当2s ≤时,()1,≤τσG , 格式稳定。在这里主要用它与上面一阶精度的Lax-Friedrichs 方法进行简单对比。 2.3差分格式的求解

线性代数方程组数值解法及MATLAB实现综述

线性代数方程组数值解法及MATLAB 实现综述 廖淑芳 20122090 数计学院 12计算机科学与技术1班(职教本科) 一、分析课题 随着科学技术的发展,提出了大量复杂的数值计算问题,在建立电子计算机成为数值计算的主要工具以后,它以数字计算机求解数学问题的理论和方法为研究对象。其数值计算中线性代数方程的求解问题就广泛应用于各种工程技术方面。因此在各种数据处理中,线性代数方程组的求解是最常见的问题之一。关于线性代数方程组的数值解法一般分为两大类:直接法和迭代法。 直接法就是经过有限步算术运算,可求的线性方程组精确解的方法(若计算过程没有舍入误差),但实际犹如舍入误差的存在和影响,这种方法也只能求得近似解,这类方法是解低阶稠密矩阵方程组级某些大型稀疏矩阵方程组的有效方法。直接法包括高斯消元法,矩阵三角分解法、追赶法、平方根法。 迭代法就是利用某种极限过程去逐步逼近线性方程组精确解的方法。迭代法具有需要计算机的存储单元少,程序设计简单,原始系数矩阵在计算过程始终不变等优点,但存在收敛性级收敛速度问题。迭代法是解大型稀疏矩阵方程组(尤其是微分方程离散后得到的大型方程组)的重要方法。迭代法包括Jacobi 法SOR 法、SSOR 法等多种方法。 二、研究课题-线性代数方程组数值解法 一、 直接法 1、 Gauss 消元法 通过一系列的加减消元运算,也就是代数中的加减消去法,以使A 对角线以下的元素化为零,将方程组化为上三角矩阵;然后,再逐一回代求解出x 向量。 1.1消元过程 1. 高斯消元法(加减消元):首先将A 化为上三角阵,再回代求解。 11121121222212n n n n nn n a a a b a a a b a a a b ?? ? ? ? ???L L M M O M M L (1)(1)(1)(1)(1)11121311(2)(2)(2)(2)222322(3)(3)(3)3333()()000000n n n n n nn n a a a a b a a a b a a b a b ?? ? ? ? ? ? ???L L L M M M O M M L 步骤如下:

偏微分方程数值解法的MATLAB源码

[原创]偏微分方程数值解法的MATLAB源码【更新完毕】 说明:由于偏微分的程序都比较长,比其他的算法稍复杂一些,所以另开一贴,专门上传偏微分的程序谢谢大家的支持! 其他的数值算法见: ..//Announce/Announce.asp?BoardID=209&id=8245004 1、古典显式格式求解抛物型偏微分方程(一维热传导方程) function [U x t]=PDEParabolicClassicalExplicit(uX,uT,phi,psi1,psi2,M,N,C) %古典显式格式求解抛物型偏微分方程 %[U x t]=PDEParabolicClassicalExplicit(uX,uT,phi,psi1,psi2,M,N,C) % %方程:u_t=C*u_xx 0 <= x <= uX,0 <= t <= uT %初值条件:u(x,0)=phi(x) %边值条件:u(0,t)=psi1(t), u(uX,t)=psi2(t) % %输出参数:U -解矩阵,第一行表示初值,第一列和最后一列表示边值,第二行表示第2层…… % x -空间变量 % t -时间变量 %输入参数:uX -空间变量x的取值上限 % uT -时间变量t的取值上限 % phi -初值条件,定义为内联函数 % psi1 -边值条件,定义为内联函数 % psi2 -边值条件,定义为内联函数 % M -沿x轴的等分区间数 % N -沿t轴的等分区间数 % C -系数,默认情况下C=1 % %应用举例: %uX=1;uT=0.2;M=15;N=100;C=1; %phi=inline('sin(pi*x)');psi1=inline('0');psi2=inline('0'); %[U x t]=PDEParabolicClassicalExplicit(uX,uT,phi,psi1,psi2,M,N,C); %设置参数C的默认值 if nargin==7 C=1; end %计算步长 dx=uX/M;%x的步长 dt=uT/N;%t的步长

偏微分方程的MATLAB数值解法

偏微分方程的MATLAB求解精讲? 作者:dynamic 时间:2008.12.10 版权:All Rights Reserved By https://www.doczj.com/doc/2c13989305.html, ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ Matlab Sky联盟----打造最优秀、专业和权威的Matlab技术交流平台! 网址:https://www.doczj.com/doc/2c13989305.html, /com/org/net 邮箱:matlabsky@https://www.doczj.com/doc/2c13989305.html, QQ群:23830382 40510634 16233891(满了) 44851559(满了) 论坛拥有40多个专业版块,内容涉及资料下载、视频教学、数学建模、数学运算、程序设计、GUI开发、simulink 仿真、统计概率、拟合优化、扩展编程、算法研究、控制系统、信号通信、图像处理、经济金融、生物化学、航空航天、人工智能、汽车设计、机械自动化、毕业设计等几十个方面! 请相信我们:1.拥有绝对优秀的技术人员,热情的版主,严谨负责的管理团队 2.免费提供技术交流和在线解答 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

MA TLAB求解微分/偏微分方程,一直是一个头大的问题,两个字,“难过”,由于MA TLAB对LaTeX的支持有限,所有方程必须化成MA TLAB可接受的标准形式,不支持像其他三个数学软件那样直接傻瓜式输入,这个真把人给累坏了! 不抱怨了,还是言归正传,回归我们今天的主体吧! MA TLAB提供了两种方法解决PDE问题,一是pdepe()函数,它可以求解一般的PDEs,据用较大的通用性,但只支持命令行形式调用。二是PDE工具箱,可以求解特殊PDE问题,PDEtool有较大的局限性,比如只能求解二阶PDE问题,并且不能解决偏微分方程组,但是它提供了GUI界面,从繁杂的编程中解脱出来了,同时还可以通过File->Save As直接生成M代码 一、一般偏微分方程组(PDEs)的MA TLAB求解 (3) 1、pdepe函数说明 (3) 2、实例讲解 (4) 二、PDEtool求解特殊PDE问题 (6) 1、典型偏微分方程的描述 (6) (1)椭圆型 (6) (2)抛物线型 (6) (3)双曲线型 (6) (4)特征值型 (7) 2、偏微分方程边界条件的描述 (8) (1)Dirichlet条件 (8) (2)Neumann条件 (8) 3、求解实例 (9)

相关主题
文本预览
相关文档 最新文档