MATLAB数学实验 第四章 函数和方程
例3 求函数y=xsin(x2-x-1)在(-2, -0.1)内的 零点 >> fun=inline('x*sin(x^2-x-1)','x') >> fzero(fun,[-2 -0.1]) >> fzero(fun,[-2,-1.2]), fzero(fun,[-1.2,-0.1]) >> fzero(fun,-1.6), fzero(fun,-0.6)
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 M文件eg4_2.m1]上的极小值点 及极小值.
(2)当a=2时,求函数y=(x+a)e|x+a|在[-a-1 a+1] 上的极小值.
(3) 求二元函数f(x,y)= 100(y-x2)2-(1-x)2的 极小值。
(1) >> fun1=inline('x.^2+2*x+1','x') fun = Inline function: fun1(x) = x.^2+2*x+1 >> [x,y]=fminbnd(fun1,-1,1) x= -1 y= 0
4.2 函数零点MATLAB指令
x=fzero(Fun, x0) 返回一元函数Fun的 一个零点,其中Fun为函数句柄、inline函数或 匿名函数。x0为标量时, 返回函数在x0附近 的零点;x0为向量[a, b]时, 返回在[a,b]中的 零点
[x,f,h]=fsolve(Fun, x0) x: 返回多元函数Fun在x0附近的一个零 点,其中x0为迭代初值向量; f: 返回Fun在x的函数值, 应该接近0; h: 返回值如果大于0,说明计算结果可 靠,否则计算结果不可靠。
的调用格式
x= -3 y= -2.7183
• (3) • >> fun3=inline('100*(v(2)-v(1)^2)^2+(1-v(1))^2','v') fun3 = Inline function: fun3(v) = 100*(v(2)-v(1)^2)^2+(1-v(1))^2 • >> [v,fv]=fminsearch(fun3,[1 1]) v= 1 1 fv = 0
4.1 预备知识: 最小二乘拟合 %考虑负指数函数,Matlab程序
4.1 预备知识:最小二乘拟合
13.4 13.3 13.2 13.1 13 12.9 12.8 12.7 12.6 12.5 12.4 1970 1980 1990 2000 2010 2020 2030 2040 2050
4.1 预备知识:最小二乘拟合
>> [x,f,h]=fsolve(fun,-1.6) >> [x,f,h]=fsolve(fun,-0.6)
例4 求方程组在原点附近的解 1 x 4x y e 1 10 x 4 y 1 x 2 0 8 使用函数句柄
xx(1)
y x(2)
4.1 预备知识:最小二乘拟合
问题:估计什么时候突破12秒50?
13.3 13.25 13.2 13.15 13.1 13.05 13 12.95 12.9 12.85 1970 1975 1980 1985 1990 1995 2000 2005 2010
• clear;close all; data=[13.24 13.21 13.16 13.00 12.93 12.92 12.91 12.88 12.87]; year=[1972 1977 1979 1979 1981 1989 1993 2006 2008]; plot(year,data,'o'); y=data;x=year-1972; fun=@(c,x)c(1)*exp(-c(2)*x); %拟合方程y=a*exp(b*x) c=lsqcurvefit(fun,[13,(13.24-12.87)/36],x,y)%结果 c(1)=13.1539 ,c(2)=0.0007 fun2=@(x)c(1)*exp(-c(2)*x)-12.5; x2=fsolve(fun2,50)%结果x2=71.4564,约71年以后,即2043年 xx=0:75; yy=fun(c,xx); figure; plot(year,data,'o',xx+1972,yy);grid on;
MATLAB数学实验
第四章 函数和方程
第四章 函数和方程
4.1 预备知识:零点、极值和最小二乘法 4.2 函数零点、极值和最小二乘拟合的 MATLAB指令 4.3 计算实验:迭代法 4.4 建模实验:购房贷款的利率
4.1 预备知识:零点
非线性方程 f (x) = 0 • 若对于数有f () = 0, 则称为方程的解或根,也称为 函数f (x)的零点 • 若f () = 0, f ’()0 则称为单根。 • 若有k >1, f () = f ’() = …= f (k-1)() = 0,但 f (k)()0 , 称为k重根 • 非线性方程求解通常用数值方法求近似解 非线性方程(组)
• 假设已知经验公式y=f(c,x)(c为参数, x为自变量), 要求根据 一批有误差的数据(xi,yi), i=0,1,…,n, 确定参数c.这样的问 题称为数据拟合。 • 最小二乘法就是求c使得均方误差最小化 Q(c)=
2 ( y f ( c , x )) i i i 0 n
• 当f关于c是线性函数,问题转化为一个线性方程组求解,且 其解存在唯一。 • 如果f关于c是非线性函数,问题转化为函数极值问题
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),返回多 项式的降幂系数
• 假设已知经验公式y=f(c,x)(c为参数, x为自变量), 要求根据 一批有误差的数据(xi,yi), i=0,1,…,n, 确定参数c.这样的问 题称为数据拟合。 • 最小二乘法就是求c使得均方误差最小化 Q(c)=
2 ( y f ( c , x )) i i i 0 n
• 当f关于c是线性函数,问题转化为一个线性方程组求解。 • 如果f关于c是非线性函数,问题转化为函数极值问题
f (x) = 0, x=(x1, x2, …, xn), f=(f1, f2, …, fm)
4.1 预备知识:极值
设x为标量或向量,y=f(x)是xD上的标量值函数。
如果对于包含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上的一个全局极小(大)值点。
function f=eg4_4fun(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(@eg4_4fun,[0 0])
• 使用Inline函数
>>fun=inline('[4*x(1)-x(2)+ exp(x(1)) /10 - 1, - x(1) + 4*x(2)+x(1)^2/8]','x');
返回向量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均为向量。
注: (1) 在上述命令中,fun可以用内联函数, 匿名函数或编写M函数文件。 (2) 在使用fsolve, fminsearch等指令时, 多 变量必须合写成一个向量变量,如用v(1), v(2),…。 (3) 如何求解函数的极大值? (4) 使用帮助文件学习fminunc的使用.
4.2 最小二乘拟合MATLAB指令
(2) >> clear >> fun2=inline('(x+a).*exp(abs(x+a))','x','a') fun = Inline function: fun2(x,a) = (x+a).*exp(abs(x+a)) >> a=2; >> [x,y]=fminbnd(@(x)fun2(x,a),-a-1,a+1) %注意含参数形式
>>[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])
河北工业大学MATLAB实验四
2014秋2012级《MATLAB 程序设计》实验报告一、实验目的:1、掌握MATLAB 二维图形绘制命令及其图形控制;2、熟悉MATLAB 三维图形绘制命令及其图形控制;3、熟悉特殊二维图形、三维图形的绘制方法。
二、实验内容:1、在同一坐标系下绘制下面三个函数在[0,40]t ∈的图象,要求三种曲线采用不同颜色以及不同的线型,同时对每条曲线利用函数进行标注,并添加图例。
120.134sin()t y t y y e t π-===2、编写程序,选择合适的步距,绘制下面函数在区间[-6,6]中的图象,并对分段的曲线进行标注,同时添加x 轴和y 轴的说明。
sin ,0(),036,3x x y x x x x x ≤⎧⎪=<≤⎨⎪-+>⎩3、利用subplot 函数在同一绘图窗口中用不同颜色和线型绘制以下两个函数在t ∈[-2π,2π]范围内的图象。
0.50.21222t t y y e -==4、某学校有30位教师,其中教授5人,副教授8人,讲师12人,助教5人.试画出职称比例结构饼图,并强调图形的教授部分同时添加标注。
5、生成1×10维的随机数向量a ,分别用红、黄、蓝、绿色绘出其连线图、脉冲图、阶梯图和条形图,并分别标出标题“连线图”、“脉冲图”、“阶梯图”、“条形图”。
6、使用subplot 函数,把图形窗口分成两个部分,分别绘制sin2t 和3cos3t 曲线,t 范围:0-5.要求前者用红色实线,数据点形状为五角星,有网格线,x 轴加标注“x ”,y 轴加标注“y=sin2t ”,加题目“y=sin2t 的曲线”;后者用蓝色虚线,数据点形状为圆形,无网格线,x 轴加标注“x ”,y 轴加标注“y=3cos3t ”,加题目“y=3cos3t 的曲线”;7、绘制下列三维曲线:(1)/20/20cos sin ,02t t x e ty e t t z t π--⎧=⎪=≤≤⎨⎪=⎩ (2) 23,01x t y t t z t =⎧⎪=≤≤⎨⎪=⎩8、绘制下列曲面图,并调整三维图的视角、背景色、着色以及透视效果。
2013MATLAB原理及应用实验报告第四章
《MATLAB原理及应用》实验报告第四章MATLAB程序设计一.实验目的1、掌握脚本文件的建立2、掌握条件语句和程序语句的使用3、掌握MATLAB的程序设计方法二.实验内容1.关于M脚本文件和M函数文件M文件是在M文件编辑器窗口中编写的。
在MATLAB的桌面上单击新建按钮,就可以打开M文件编辑器窗口,也可以通过依次单击【File】/【New】/【M-File】打开文件编辑器。
【实验4-1】脚本文件在M文件编辑器窗口输入一下内容:N=3;for m=1:Nfor n=1:Nif m==nA(m,n)=1;elseA(m,n)=0;endendend单击M文件编辑器窗口中的保存按钮,以“ex1.m”为文件名保存在当前工作目录下。
在命令窗口中输入:>> ex1运行后可以在命令窗口中看到变量A的图标,继续在命令窗口输入:>> AA =1 0 00 1 00 0 1这一脚本文件创建了一个3阶单位阵【实验4-2】 M 函数在M 文件编辑器窗口输入一下内容:function [mean,stdev]=stat(x)x=input('请输入x 的值:')%[mean,stdev]=stat(x)计算输入向量的均值和平均差%输入参数x 是向量%第一个输入参数mean 是向量各元素的平均值%第二个输入参数stdev 是向量的均方差%例如,取向量x=[1,2,3,4,5];%调用[mean,stdev]=stat(x),计算可得%均值mean=3%均方差stdev=1.4142n=length(x) %计算向量长度mean=sum(x)/n %计算向量平均值stdev=sqrt(sum((x-mean).^2/n)) %计算均方差输入完毕后,单击保存按钮,把文件保存在当前工作目录下,文件名为“stat.m ”2.MATLAB 程序流程控制【实验4-3】一个简单的for 循环事例。
MATLAB实验四_求微分方程的解
参数说明
[T,Y] = solver(odefun,tspan,y0)
odefun 为显式常微分方程,可以用命令 inline 定义,或 在函数文件中定义,然后通过函数句柄调用。
dy 2 2 y 2 x 2x 求初值问题 的数值解,求解范 例: dx 围为 [0,0.5] y( 0 ) 1
dsolve的输出个数只能为一个 或 与方程个数相等。
只有很少一部分微分方程(组)能求出解析解。 大部分微分方程(组)只能利用数值方法求数值解。
Matlab函数数值求解
[T,Y] = solver(odefun,tspan,y0)
其中 y0 为初值条件,tspan为求解区间;Matlab在数值求解 时自动对求解区间进行分割,T (列向量) 中返回的是分割点 的值(自变量),Y (数组) 中返回的是这些分割点上的近似解, 其列数等于因变量的个数。
数学实验
实验四
求微分方程的解
问题背景和实验目的
自牛顿发明微积分以来,微分方程在描述事物运 动规律上已发挥了重要的作用。实际应用问题通过 数学建模所得到的方程,绝大多数是微分方程。 由于实际应用的需要,人们必须求解微分方程。 然而能够求得解析解的微分方程十分有限,绝大多 数微分方程需要利用数值方法来近似求解。 本实验主要研究如何用 Matlab 来计算微分方程 (组)的数值解,并重点介绍一个求解微分方程的 基本数值解法--Euler折线法。
Runge-Kutta 方法
Euler 法与 R-K法误差比较
Matlab 解初值问题
用 Maltab自带函数 解初值问题 求解析解:dsolve 求数值解:
ode45、ode23、 ode113、ode23t、ode15s、 ode23s、ode23tb
第4章 MATLAB解方程与函数极值
3
2.利用矩阵的分解求解线性方程组 矩阵分解是指根据一定的原理用某种算法将一个矩 阵分解成若干个矩阵的乘积。常见的矩阵分解有LU分解、 QR分解、Cholesky分解,以及Schur分解、Hessenberg分 解、奇异分解等。
2013年8月27日星期二
4
(1) LU分解 矩阵的LU分解就是将一个矩阵表示为一个交换下三 角矩阵和一个上三角矩阵的乘积形式。线性代数中已经证 明,只要方阵A是非奇异的,LU分解总是可以进行的。 MATLAB提供的lu函数用于对矩阵进行LU分解,其 调用格式为: [L,U]=lu(A):产生一个上三角阵U和一个变换形式的 下三角阵L(行交换),使之满足A=LU。注意,这里的矩阵 A必须是方阵。 [L,U,P]=lu(A):产生一个上三角阵U和一个下三角阵 L以及一个置换矩阵P,使之满足PA=LU。当然矩阵A同 样必须是方阵。 实现LU分解后,线性方程组Ax=b的解x=U\(L\b)或 x=U\(L\P*b),这样可以大大提高运算速度。
x= -27 26 8 n= 4 x= NaN NaN NaN n= 2013年8月27日星期二 1012
18
4.2 非线性方程数值求解 4.2.1 单变量非线性方程求解 在MATLAB中提供了一个fzero函数,可以用 来求单变量非线性方程的根。该函数的调用格式 为: z=fzero('fname',x0,tol,trace) 其中fname是待求根的函数文件名,x0为搜索 的起点。一个函数可能有多个根,但fzero函数只 给出离x0最近的那个根。tol控制结果的相对精度, 缺省时取tol=eps,trace• 定迭代信息是否在运算 指 中显示,为1时显示,为0时不显示,缺省时取 trace=0。
15
Matlab教程Ch4(高等数学)
3
3.求函数值 :
>> f=sym('x^2+2*x+y'); >> x=2*pi; y=1; >> f1= eval(f)
%或 >> f2=subs(f) %或 >> subs(f,{x,y},{2*pi,1})
运行结果: ans = 1/(cos(y)+1)
12
finverse函数—反函数
1 例.求函数y 的反函数. cos x
>>syms x >>y=1/cos(x); >>g=finverse(y) 运行结果: g= acos(1/x)
13
第4章 高等数学中的Matlab命令
4.1 求极限
8
Pretty函数— 手写
>> clear >> syms x >> f = x^3-6*x^2+11*x-6;
>> g = (x-1)*(x-2)*(x-3);
>> h = -6+(11+(-6+x)*x)*x; >> pretty(f), pretty(g), pretty(h) 3 2 x - 6 x + 11 x - 6
f y g y h y
f z g z h z
jacobian ([f(x,y,z) ,g(x,y,z), h(x,y,z)],[x,y,z])
数学实验第四章函数和方程习题MATLAB编码(胡良剑版)
%p0,p1是初始值
%delta是给定允许误差
%m是p1-p0的误差估计?
%k是所需
%要的迭代次数?%y=f(p1)
% K=0,p0,p1,feval('f',p0),feval('f',p1)
% for k=1:max1
% if(f1==0)
% root=a;
% end
% if(f2==0)
% root=b;
% end
% if(f1*f2>0)
% disp('两端点函数值乘积大于0!');
% return;
% else
% tol=1;
% fun=diff(sym(f));
% fa=subs(sym(f),findsym(sym(f)),a);
% x=fminsearch(fun,[0 0]) %求极小值
% fun2=inline('-(x(2)^3/9+3*x(1)^2*x(2)+9*x(1)^2+x(2)^2+x(1)*x(2)+9)');
% x=fminsearch(fun2,[0 -5]) %求极大值
%第10题
% t=0:24;
% c=[15 14 14 14 14 15 16 18 20 22 23 25 28 ...
% x(2)=fminsearch(fun2,-2.5);
% x(4)=3;
% feval(fun,x)
%第8题(3)
% fun=inline('abs(x^3-x^2-x-2)');
% fplot(fun,[0 3]);grid on; %作图观察
matlab实验报告函数与方程1
9x 2 36y 2 4z 2 36 2 2 x 2 y 20z 0 16x x 2 2 y 2 16z 2 0
理论推导或编程说明: [x, f, h]=fsolve(Fun, x0) x 返回一元或多元函数 Fun 在 x0 附近的一个零点, 其中 x0 为迭代初值; 返回 Fun 在 x 的函数值, f 应接近 0; 返回值如果大于 0, h 说明计算结果可靠,否则计算结果不可靠。 程序(或命令) : % M 函数 eg4_4fun.m function f=fun(x) f(1)=9*x(1)^2+36*x(2)^2+4*x(3)^2-36; f(2)=x(1)^2-2*x(2)^2-20*x(3); f(3)=16*x(1)-x(1)^3-2*x(2)^2-16*x(3)^2; 指令窗口 >> [x ,f, h]=fsolve(@eg4_4fun ,[0,0,0]) Optimization terminated successfully: first-order optimality is less than options. TolFun. x= 0.1342 0.9972 -0.0985 f= 1.0e-008 * 0.7690 -0.0418 -0.1054 h =1 对实验题目的解答:
实验名称:函数与方程
实验目的: (1)学会 MATLAB 有关非线性方程(组)求解、函数极值和曲线拟合的指令。 (2)了解迭代法的基本原理和非线性拟合问题的线性化处理方法。 (3)学会用 Matlab 解决购房贷款利率与最佳订货量等的实际问题 实验项目: (1)求非线性方程组在原点附近的根。 (2)求购房贷款中的房屋总价格、首付款额、月付款额。 实验背景: (1)在科学研究和工程设计中常常会遇到求解非线性方程组的问题。因此,如 何快速求解非线性方程组是十分重要的。 (2)随着房地产行业的繁荣发展,购房贷款问题在人们的日常生活中会经常遇 到。因此,要学会计算房子的总付款额和月付款额。 实验具体过程: 题目:求解下列非线性方程组在原点附近的根
matlab数值分析第四章
在图4-2中,用‘x’标记了上述解对应的点(ξ,J0(ξ))。
在MATLAB第6版中,可以使用feval对函数参数求值。表达式 feval(F,x,...) 等价于F(x,...) 它们的区别在于,使用feval时,允许F作为一个被传递来的参 数。在MATLAB第7版中,feval就丌再需要了。 fzerotx秳序开始的一段注释内容如下:
y = bessj0(x); plot(z,zeros(1,10),'o',x,y,'-') line([0 10*pi],[0 0],'color','black') axis([0 10*pi -0.5 1.0])
从图中可以看出,J0 (x)的图形很像是cos (x)的幅值和频率经 过调制后的版本,相邻 两个零解的距离近似等 于π。
• 第一段代码对定义搜索区间的变量a、b和c初始化,在初 始区间的端点处对函数F求值。
• 下面是主循环的开始。在每次迭代步的开始,先对a、b和 c重新排列,使它们满足zeroin算法中描述的条件。
• 返部分是收敛条件判断,并可能从循环中退出。
• 下部分代码是在二分法和两种基于揑值的方法间迕行选择。
第一类的零阶贝塞尔函数J0(x)
• 第一类贝塞尔函数(Bessel function of the first kind), 又称贝塞尔函数(Bessel function),简称为J函数, 记作Jα。 • 第一类α阶贝塞尔函数Jα(x)是贝塞尔方秳当α为整数戒 α非负时的解,须满足在x = 0 时有限。另一种定义方 法是通过它在x = 0 点的泰勒级数展开(戒者更一般地 通过幂级数展开,返适用于α为非整数):
Байду номын сангаас
MATLAB数学实验 第四章 函数和方程
2 ( y f ( c , x )) i i i 0 n
• 当f关于c是线性函数,问题转化为一个线性方程组求解。 • 如果f关于c是非线性函数,问题转化为函数极值问题
3387/1943*x^2-7637646031980105/4503599627370496*x+4886217849135065/4503599627370496
• >> vpa(fun,5) ans = 1.7432*x^2-1.6959*x+1.0850
• >> xi=-0.2:0.01:0.3; • >> yi=polyval(p,xi); • >> plot(x,y,‘ro’,xi,yi)%拟合效果作图
c= lsqnonlin (Fun,c0) non-linear least squares problems.
使用迭代法搜索最优参数c. 其中Fun是以参数c(可 以是向量)为自变量的函数,表示误差向量yf(c,x)(x, y为数据),c0为参数c的近似初值(与c同 维向量),具体使请看帮助文件。
c=lsqcurvefit(Fun2,c0, x, y) 从外部输入数据, 这里Fun2为两变量c和x的函数 f(c, x)
的调用格式
x= -3 y= -2.7183
• (3) • >> fun3=inline('100*(v(2)-v(1)^2)^2+(1-v(1))^2','v') fun3 = Inline function: fun3(v) = 100*(v(2)-v(1)^2)^2+(1-v(1))^2 • >> [v,fv]=fminsearch(fun3,[1 1]) v= 1 1 fv = 0
Matlab第四章详细讲解
v11 v21 V = v12 v22
λ 1 v11 A .v1 = λ 1 v1 = λ 1 v12
λ 2 v 21 A.v 2 = λ 2 v 2 = λ 2 v 22
A .v1
A .v 2
a11 a12 v11 v21 a11v11 + a12v12 a11v21 + a12v22 A*V = v v = a v + a v a v + a v a21 a22 12 22 21 11 22 12 21 21 22 22
2 − at
f ( t ) = (sin
t )e
−b=fzero(fun ,x0 ,option,p1,p2)
%(1)使用字符串表示被处理函数 P1=0.1;P2=0.5;
%按泛函指令要求,这里参数必须用P1,P2表示
y_C='sin(x).^2.*exp(-P1*x)-P2*abs(x)';
1、求函数的零点 (1)字符串表达式 q=quad(fun,a,b) 2、数值积分 (2)内联函数 3、解微分方程 q=quadl(fun,a,b) (3)“M函数文件”的函数句柄
[t,y]=ode45(fun ,tspan,y0)
4.3.1 求函数的零点
例:求以下函数的零点。
零点初始 猜测值
向函数fun传 递的参数
4.4 多项式和卷积
4、多项式的根
功能:计算多 项式P的根。
R=roots(P)
p1 x + p2 x
n
n −1
+ ... + pn x + p
-27 ];
