matlab(第四章 函数和方程)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• fun=inline('[4*x(1)-x(2)+exp(x(1))/10-1,x(1)+4*x(2)+x(1)^2/8]','x'); • [x,f,h]=fsolve(fun,[0,0]) • fun=@(x)[4*x(1)-x(2)+exp(x(1))/10-1,x(1)+4*x(2)+x(1)^2/8]; • [x,f,h]=fsolve(fun,[0,0])
4.1 预备知识:零点
非线性方程(组)f (x) = 0, x=(x1, x2, …, xn), f=(f1, f2, …, fm) • 数值方法主要是综合运用线性方程组和非线性方程求 解方法,常用的方法是Newton法、拟Newton法、最 小二乘法等。
4.1 预备知识:极值
设x为标量或向量,y=f(x)是xD上的标量值函数。
MATLAB数学实验
第四章 函数和方程
主要内容
MATLAB指令 非线性方程(组)求解 函数极值 & 曲线拟合 计算实验: 迭代法&非线性拟合问题的线性化处理 建模实验: 购房贷款利率计算&最佳订货量
4.1 预备知识:零点、极值和最小二乘法 4.2 函数零点、极值和最小二乘拟合的 MATLAB指令 4.3 计算实验:迭代法 4.4 建模实验:购房贷款的利率和最佳订货量
[x,f,h]=fsolve(fun, -0.6),
例4 求方程组在原点附近的解
1 x1 4 x1 x2 10 e 1 1 2 x1 4 x2 x1 0 8
•方法一:函数句柄方式求解 •方法二:inline函数或匿名函数求 解
方法一:函数句柄方式求解
例3 求函数y=xsin(x2-x-1)在(-2, -0.1)内的 零点 >> fun=inline('x*sin(x^2-x-1)','x') >> fzero(fun,[-2 -0.1]) 【失效】
x=-1.6和0.6附近各有一个零点,分两个小区间分别求解
方法一: fzero(fun,[-2 -1.2]) , fzero(fun,[1.2, -0.1]) 方法二: fzero(fun,-1.6), fzero(fun,-0.6) 方法三:[x,f,h]=fsolve(fun, -1.6),
用MATLAB求解
• • • • • • clear;x=[ ]; y=[ ]; p=polyfit(x,y,2) %%拟合 xi=[-0.2:0.01:0.3 ]; yi=ployval(p,xi); plot(x,y,’o’,xi,yi) %%%%拟合效果
4.2 非线性函数的MATLAB表达
4.2 函数零点MATLAB指令
x=fzero(Fun, x0) 返回一元函数Fun的一 个零点,其中Fun为函数句柄、 内嵌函数或字符串表达方式。 x0为标量时, 返回函数在x0附近的零点; x0为向量[a, b]时, 返回在[a,b]中的零点 注意:要求区间两端的函数值异号
例 求f(x)=x-10x+2=0在x0=0.5附近的根。 步骤如下: (1) 建立函数文件funx.m。 function fx=funx(x) fx=x-10.^x+2; (2) 调用fzero函数求根。 z=fzero('funx',0.5) z= 0.3758
4.2 多项式MATLAB指令
• 多项式
y=polyval(p,x) 求得多项式p在x处的值y,x可以是一个 或多个点 p3=conv(p1,p2) 返回多项式p1和p2的乘积 [p3,r]=deconv(p1,p2) p3返回多项式p1除以p2的商,r返 回余项 x=roots(p) 求得多项式p的所有复根. p=polyfit(x,y,k)用k次多项式拟合向量数据(x, y),返回多 项式的降幂系数
• 后来伽罗华命运不佳,投考名校巴黎工科大学落榜, 屈就高等师院,并卷入政事两次入狱,被开除学籍, 又决斗受伤,死于1832年。决斗前,他把关于五次 代数求解的研究成果写成长信,留了下来。
• 十四年后,法国数学家刘维尔(J·Liouville)整理 并发表了伽罗华的遗作,人们才意识到这项近代 数学发展史上的重要成果的宝贵。 • 38年后,即1870年,法国数学家若当(C·Jordan) 在专著《论置换与代数方程》中阐发了伽罗华的 思想,一门现代数学的分支—群论诞生了。 • 在前几个世纪中,曾开发出一些求解代数方程的 有效算法,它们构成了数值分析中的古典算法。 至于超越方程则不存在一般的求根方式。
• • • • %%%%egfun.m function f=egfun(x) f(1)=4*x(1)-x(2)+exp(x(1))/10-1; f(2)=-x(1)+4*x(2)+x(1)^2/8;
• [x,f,h]=fsolve(@ egfun,[0,0])
方法二:inline函数或匿名函数求解
4.1 预备知识:零点
高次代数方程 (n次多项式方程) 1. 代数学基本定理可知,n次方程在复数 域上有n个根; 2. n<=4,有求根公式; n>=5无求根公式,只能借助数值解法;
代数方程的解法
• 远在公元前1700年的古巴比伦人就已有关于一、 二次方程的解法。《九章算术》(公元前50~100年) 其中“方程术”有联立一次方程组的一般解法。 • 1535年意大利数学家坦特格里亚(TorTaglia)发现 了三次方程的解法,卡当(H·Cardano)从他那里改 进了这种解法,于1545年在其名著《大术》中公 布了三次方程的公式解,称为卡当算法。
4.1 预备知识:零点
线性方程 方程式中仅含有未知量的一次方和常数项的方程 非线性方程(nonlinear equation) f (x) = 0 除线性方程之外的方程都是非线性方程(高次代数方程&超越方程) • 若对于数有f () = 0, 则称为方程的解或根,也称为函数f (x)的零点 • 若f () = 0, f ’()0 则称为单根。 • 若有k >1, f () = f ’() = …= f (k-1)() = 0,但f (k)()0 , 称为k重根。 注意:一般,非线性方程的解的存在性和个数是很难确定 的,它可能无解,也可能有一个或多个解。 • 非线性方程求解通常用数值方法求近似解,常见的有二分法、牛顿法等
[x,f,h]=fsolve(Fun, x0) 其中x0为迭代初值;
x返回一元或
多元函数Fun在x0附近的一个零点, f返回Fun在x的函数值, 应该接近0; h返回值如果大于0, 说明计算结果可靠, 否则计算结果不可靠。
说明: fsolve—也可以用于多项式方程(组),但计 算量明显比roots命令大; --- 该命令用最小二乘法解非线性方程 (组)的数值解,此种方法需要尝试输入解 的初始值,即使程序中的迭代序列收敛,也 不一定收敛到方程(组)的根。 • fzero只能求零点附近变号的根 • fzero和fsolve只能求实根 • roots—多项式求根 (复根)
注意: • MATLAB没有专门提供求函数最(极)大值的函 数,但只要注意到f(x)在区间(a,b)上的最(极)大 值M,则-f(x)在(a,b)的最(极)小值为-M。 • 在使用fsolve, fminsearch等指令时,多变量 必须合写成一个向量变量,如用x(1), x(2),…。
例3 求函数y=xsin(x2-x-1)极小值点
如果对于包含x=a的某个邻域 ,有 f(a)f(x) (f(a)f(x))对任意x成立, 则称a为f(x)的一个局 部极小(大)值点。 如果对任意xD,有f(a)f(x)(f(a)f(x))成立, 则称a为f(x)在区域D上的一个全局极小(大)值点。
4.1 预备知识:极值
4.1 预备知识:最小二乘法
MATLAB中一个多项式用系数降幂排列 向量来表示。(缺项的要补上)
例1.求多项式x3 + 2 x2 - 5的根 »p=[1 2 0 -5]; x=roots(p) , polyval(p,x) 例2.用2次多项式拟合下列数据. x 0.1 0.2 0.15 0 -0.2 0.3 y 0.95 0.84 0.86 1.06 1.50 0.72
• 假设已知经验公式y=f(c,x)(c和x均可为向量), 要求根据一 批有误差的数据(xi,yi), i=0,1,…,n, 确定参数c.这样的问题 称为曲线拟合。 • 最小二乘法就是求c使得均方误差最小化 Q(c)=
( yi f (c, xi )) 2
i 0
n
• 当f关于c是线性函数,问题转化为一个线性方程组求解,且 其解存在唯一。 • 如果f关于c是非线性函数,问题转化为函数极值问题
• 1828年17岁的法国数学家伽罗华(E·Galois 18111832)写出了划时代的论文“关于五次方程的代数 解法问题”,指出即使在公式中容许用n次方根, 并用类似算法求五次或更高次代数方程的根是不可 能的
• 文章呈交法兰西科学院后,因辈份太低遭到冷遇, 且文稿丢失。1830年伽罗华再进科学院递稿,得到 泊松院士的判词“完全不能理解”。
• 后来卡当的学生弗瑞里(Ferrari)又提出了四次方程 的解法。此成果更激发了数学家们的情绪,但在 以后的二个世纪中,求索工作始终没有成效,导 致人们对高次代数方程解的存在性产生了怀疑。
• 1799年,高斯证明了代数方程必有一个实根或复 根的定理,称此为代数基本定理,并由此可以立 刻推理n次代数方程必有n个实根或复根。 • 但在以后的几十年中仍然没有找出高次代数方程 的公式解。一直到18世纪,法国数学家拉格朗日 用根置换方法统一了二、三、四方程的解法。 • 但求解五次方程时未能如愿,开始意识到有潜藏其 中的奥妙, 用现代术语表示就是置换群理论问题。 • 在继续探索5次以上方程解的艰难历程中,第一个 重大突破的是挪威数学家阿贝尔(N·Abel18021829) 1824年阿贝尔发表了“五次方程代数解法 不可能存在”的论文,但并未受到重视,连数学 大师高斯也未理解这项成果的重要意义。
例 5 .求二பைடு நூலகம்函数f(x,y)= 5-x4-y4+4xy 在原点附近的极大值。
Fun=inline(‘funstr’,’var’) 定义一个Inline 函数,其中funstr是函数的表达式, var是变量名
Fun=@Mfun 定义一个函数句柄,这里 Mfun是函数的M文件表达方式 Fun=@(var)funstr 定义匿名函数,其中var 是变量名, funstr是函数的表达式
4.2 函数极值MATLAB指令
min(y) max(y) 返回向量y的最小值 返回向量y的最大值
[x,f]=fminbnd(fun,a,b) x返回一元函数y=f(x)在[a,b]内的 局部极小值点,f返回局部极小值 fun为函数句柄或inline。 [x,f]=fminsearch(fun,x0) x返回多元函数y=f(x)在初始值x0 附近的局部极小值点,f返回局部极小值. x, x0均为向量。
4.1 预备知识:零点
超越方程 方程包含x的超越函数,称为超越方程
(如指数方程、对数方程、三角方程、反三角 方程等) 注意:没有一般的求根公式,其解可能是一个 或者几个甚至无穷多个,也可能无解。
4.1 预备知识:零点
通常求非线性方程的数值解大致分为3个步骤 1. 判断根的存在性,即方程有没有根,如果有根,有几 个根; 2. 确定根的近似位置(有根区间),即将每一个根用区 间隔离开,获得方程各根的初始近似值; 3. 根的精确化,即将根的初始近似值按某种方法逐步精 确化,直到满足预先要求的精确度为止。
• x=-1.6:0.01:-1;y=x.*sin(x.^2-x-1); • [m,k]=min(y) • x(k) 【较高精度】 • fun=inline('x*sin(x^2-x-1)','x'); • [x,f]=fminbnd(fun,-1.6,-1) • [x,f]=fminsearch(fun,-1)
4.1 预备知识:零点
非线性方程(组)f (x) = 0, x=(x1, x2, …, xn), f=(f1, f2, …, fm) • 数值方法主要是综合运用线性方程组和非线性方程求 解方法,常用的方法是Newton法、拟Newton法、最 小二乘法等。
4.1 预备知识:极值
设x为标量或向量,y=f(x)是xD上的标量值函数。
MATLAB数学实验
第四章 函数和方程
主要内容
MATLAB指令 非线性方程(组)求解 函数极值 & 曲线拟合 计算实验: 迭代法&非线性拟合问题的线性化处理 建模实验: 购房贷款利率计算&最佳订货量
4.1 预备知识:零点、极值和最小二乘法 4.2 函数零点、极值和最小二乘拟合的 MATLAB指令 4.3 计算实验:迭代法 4.4 建模实验:购房贷款的利率和最佳订货量
[x,f,h]=fsolve(fun, -0.6),
例4 求方程组在原点附近的解
1 x1 4 x1 x2 10 e 1 1 2 x1 4 x2 x1 0 8
•方法一:函数句柄方式求解 •方法二:inline函数或匿名函数求 解
方法一:函数句柄方式求解
例3 求函数y=xsin(x2-x-1)在(-2, -0.1)内的 零点 >> fun=inline('x*sin(x^2-x-1)','x') >> fzero(fun,[-2 -0.1]) 【失效】
x=-1.6和0.6附近各有一个零点,分两个小区间分别求解
方法一: fzero(fun,[-2 -1.2]) , fzero(fun,[1.2, -0.1]) 方法二: fzero(fun,-1.6), fzero(fun,-0.6) 方法三:[x,f,h]=fsolve(fun, -1.6),
用MATLAB求解
• • • • • • clear;x=[ ]; y=[ ]; p=polyfit(x,y,2) %%拟合 xi=[-0.2:0.01:0.3 ]; yi=ployval(p,xi); plot(x,y,’o’,xi,yi) %%%%拟合效果
4.2 非线性函数的MATLAB表达
4.2 函数零点MATLAB指令
x=fzero(Fun, x0) 返回一元函数Fun的一 个零点,其中Fun为函数句柄、 内嵌函数或字符串表达方式。 x0为标量时, 返回函数在x0附近的零点; x0为向量[a, b]时, 返回在[a,b]中的零点 注意:要求区间两端的函数值异号
例 求f(x)=x-10x+2=0在x0=0.5附近的根。 步骤如下: (1) 建立函数文件funx.m。 function fx=funx(x) fx=x-10.^x+2; (2) 调用fzero函数求根。 z=fzero('funx',0.5) z= 0.3758
4.2 多项式MATLAB指令
• 多项式
y=polyval(p,x) 求得多项式p在x处的值y,x可以是一个 或多个点 p3=conv(p1,p2) 返回多项式p1和p2的乘积 [p3,r]=deconv(p1,p2) p3返回多项式p1除以p2的商,r返 回余项 x=roots(p) 求得多项式p的所有复根. p=polyfit(x,y,k)用k次多项式拟合向量数据(x, y),返回多 项式的降幂系数
• 后来伽罗华命运不佳,投考名校巴黎工科大学落榜, 屈就高等师院,并卷入政事两次入狱,被开除学籍, 又决斗受伤,死于1832年。决斗前,他把关于五次 代数求解的研究成果写成长信,留了下来。
• 十四年后,法国数学家刘维尔(J·Liouville)整理 并发表了伽罗华的遗作,人们才意识到这项近代 数学发展史上的重要成果的宝贵。 • 38年后,即1870年,法国数学家若当(C·Jordan) 在专著《论置换与代数方程》中阐发了伽罗华的 思想,一门现代数学的分支—群论诞生了。 • 在前几个世纪中,曾开发出一些求解代数方程的 有效算法,它们构成了数值分析中的古典算法。 至于超越方程则不存在一般的求根方式。
• • • • %%%%egfun.m function f=egfun(x) f(1)=4*x(1)-x(2)+exp(x(1))/10-1; f(2)=-x(1)+4*x(2)+x(1)^2/8;
• [x,f,h]=fsolve(@ egfun,[0,0])
方法二:inline函数或匿名函数求解
4.1 预备知识:零点
高次代数方程 (n次多项式方程) 1. 代数学基本定理可知,n次方程在复数 域上有n个根; 2. n<=4,有求根公式; n>=5无求根公式,只能借助数值解法;
代数方程的解法
• 远在公元前1700年的古巴比伦人就已有关于一、 二次方程的解法。《九章算术》(公元前50~100年) 其中“方程术”有联立一次方程组的一般解法。 • 1535年意大利数学家坦特格里亚(TorTaglia)发现 了三次方程的解法,卡当(H·Cardano)从他那里改 进了这种解法,于1545年在其名著《大术》中公 布了三次方程的公式解,称为卡当算法。
4.1 预备知识:零点
线性方程 方程式中仅含有未知量的一次方和常数项的方程 非线性方程(nonlinear equation) f (x) = 0 除线性方程之外的方程都是非线性方程(高次代数方程&超越方程) • 若对于数有f () = 0, 则称为方程的解或根,也称为函数f (x)的零点 • 若f () = 0, f ’()0 则称为单根。 • 若有k >1, f () = f ’() = …= f (k-1)() = 0,但f (k)()0 , 称为k重根。 注意:一般,非线性方程的解的存在性和个数是很难确定 的,它可能无解,也可能有一个或多个解。 • 非线性方程求解通常用数值方法求近似解,常见的有二分法、牛顿法等
[x,f,h]=fsolve(Fun, x0) 其中x0为迭代初值;
x返回一元或
多元函数Fun在x0附近的一个零点, f返回Fun在x的函数值, 应该接近0; h返回值如果大于0, 说明计算结果可靠, 否则计算结果不可靠。
说明: fsolve—也可以用于多项式方程(组),但计 算量明显比roots命令大; --- 该命令用最小二乘法解非线性方程 (组)的数值解,此种方法需要尝试输入解 的初始值,即使程序中的迭代序列收敛,也 不一定收敛到方程(组)的根。 • fzero只能求零点附近变号的根 • fzero和fsolve只能求实根 • roots—多项式求根 (复根)
注意: • MATLAB没有专门提供求函数最(极)大值的函 数,但只要注意到f(x)在区间(a,b)上的最(极)大 值M,则-f(x)在(a,b)的最(极)小值为-M。 • 在使用fsolve, fminsearch等指令时,多变量 必须合写成一个向量变量,如用x(1), x(2),…。
例3 求函数y=xsin(x2-x-1)极小值点
如果对于包含x=a的某个邻域 ,有 f(a)f(x) (f(a)f(x))对任意x成立, 则称a为f(x)的一个局 部极小(大)值点。 如果对任意xD,有f(a)f(x)(f(a)f(x))成立, 则称a为f(x)在区域D上的一个全局极小(大)值点。
4.1 预备知识:极值
4.1 预备知识:最小二乘法
MATLAB中一个多项式用系数降幂排列 向量来表示。(缺项的要补上)
例1.求多项式x3 + 2 x2 - 5的根 »p=[1 2 0 -5]; x=roots(p) , polyval(p,x) 例2.用2次多项式拟合下列数据. x 0.1 0.2 0.15 0 -0.2 0.3 y 0.95 0.84 0.86 1.06 1.50 0.72
• 假设已知经验公式y=f(c,x)(c和x均可为向量), 要求根据一 批有误差的数据(xi,yi), i=0,1,…,n, 确定参数c.这样的问题 称为曲线拟合。 • 最小二乘法就是求c使得均方误差最小化 Q(c)=
( yi f (c, xi )) 2
i 0
n
• 当f关于c是线性函数,问题转化为一个线性方程组求解,且 其解存在唯一。 • 如果f关于c是非线性函数,问题转化为函数极值问题
• 1828年17岁的法国数学家伽罗华(E·Galois 18111832)写出了划时代的论文“关于五次方程的代数 解法问题”,指出即使在公式中容许用n次方根, 并用类似算法求五次或更高次代数方程的根是不可 能的
• 文章呈交法兰西科学院后,因辈份太低遭到冷遇, 且文稿丢失。1830年伽罗华再进科学院递稿,得到 泊松院士的判词“完全不能理解”。
• 后来卡当的学生弗瑞里(Ferrari)又提出了四次方程 的解法。此成果更激发了数学家们的情绪,但在 以后的二个世纪中,求索工作始终没有成效,导 致人们对高次代数方程解的存在性产生了怀疑。
• 1799年,高斯证明了代数方程必有一个实根或复 根的定理,称此为代数基本定理,并由此可以立 刻推理n次代数方程必有n个实根或复根。 • 但在以后的几十年中仍然没有找出高次代数方程 的公式解。一直到18世纪,法国数学家拉格朗日 用根置换方法统一了二、三、四方程的解法。 • 但求解五次方程时未能如愿,开始意识到有潜藏其 中的奥妙, 用现代术语表示就是置换群理论问题。 • 在继续探索5次以上方程解的艰难历程中,第一个 重大突破的是挪威数学家阿贝尔(N·Abel18021829) 1824年阿贝尔发表了“五次方程代数解法 不可能存在”的论文,但并未受到重视,连数学 大师高斯也未理解这项成果的重要意义。
例 5 .求二பைடு நூலகம்函数f(x,y)= 5-x4-y4+4xy 在原点附近的极大值。
Fun=inline(‘funstr’,’var’) 定义一个Inline 函数,其中funstr是函数的表达式, var是变量名
Fun=@Mfun 定义一个函数句柄,这里 Mfun是函数的M文件表达方式 Fun=@(var)funstr 定义匿名函数,其中var 是变量名, funstr是函数的表达式
4.2 函数极值MATLAB指令
min(y) max(y) 返回向量y的最小值 返回向量y的最大值
[x,f]=fminbnd(fun,a,b) x返回一元函数y=f(x)在[a,b]内的 局部极小值点,f返回局部极小值 fun为函数句柄或inline。 [x,f]=fminsearch(fun,x0) x返回多元函数y=f(x)在初始值x0 附近的局部极小值点,f返回局部极小值. x, x0均为向量。
4.1 预备知识:零点
超越方程 方程包含x的超越函数,称为超越方程
(如指数方程、对数方程、三角方程、反三角 方程等) 注意:没有一般的求根公式,其解可能是一个 或者几个甚至无穷多个,也可能无解。
4.1 预备知识:零点
通常求非线性方程的数值解大致分为3个步骤 1. 判断根的存在性,即方程有没有根,如果有根,有几 个根; 2. 确定根的近似位置(有根区间),即将每一个根用区 间隔离开,获得方程各根的初始近似值; 3. 根的精确化,即将根的初始近似值按某种方法逐步精 确化,直到满足预先要求的精确度为止。
• x=-1.6:0.01:-1;y=x.*sin(x.^2-x-1); • [m,k]=min(y) • x(k) 【较高精度】 • fun=inline('x*sin(x^2-x-1)','x'); • [x,f]=fminbnd(fun,-1.6,-1) • [x,f]=fminsearch(fun,-1)