matlab自定义函数与极值求法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验5 matlab 自定义函数与导数应用
实验目的
1.学习matlab 自定义函数.
2.加深理解罗必塔法则、极值、最值、单调性.
实验内容
1.学习matlab 自定义函数及求函数最小值命令.
函数关系是指变量之间的对应法则,这种对应法则需要我们告诉计算机,这样,当我们输入自变量时,计算机才会给出函数值,matlab 软件包含了大量的函数,比如常用的正弦、余弦函数等.matlab 允许用户自定义函数,即允许用户将自己的新函数加到已存在的matlab 函数库中,显然这为matlab 提供了扩展的功能,无庸置疑,这也正是matlab 的精髓所在.因为matlab 的强大功能就源于这种为解决用户特殊问题的需要而创建新函数的能力.matlab 自定义函数是一个指令集合,第一行必须以单词function 作为引导词,存为具有扩展名“.m ”的文件,故称之为函数M -文件.
函数M -文件的定义格式为:
function 输出参数=函数名(输入参数)
函数体
……
函数体
一旦函数被定义,就必须将其存为M -文件,以便今后可随时调用.比如我们希望建立函数12)(2++=x x x f ,在matlab 工作区中输入命令:
syms x ;y=x^2+2*x+1;
不能建立函数关系,只建立了一个变量名为y 的符号表达式,当我们调用y 时,将返回这一表达式.
y ↵
y=x^2+2*x+1
当给出x 的值时,matlab 不能给出相应的函数值来.
x=3;y ↵
y=x^2+2*x+1
如果我们先给x 赋值.
x=3;y=x^2+2*x+1
得结果:y=16
若希望得出2|=x y 的值,输入:
x=2;y ↵
得结果:y=16,不是2=x 时的值.读者从这里已经领悟到在matlab 工作区中输入命令:y=x^2+2*x+1不能建立函数关系,如何建立函数关系呢?我们可以点选菜单Fill\New\M-fill 打开matlab 文本编辑器,输入:
function y=f1(x)
y=x^2+2*x+1;
存为f1.m .调用该函数时,输入:
syms x ;y=f1(x)↵
得结果:y= x^2+2*x+1.输入:
y1=f1(3)↵
得结果:y1=16
matlab 求最小值命令fmin 调用格式:
fmin(‘fun’,a ,b) 给出)(x f 在),(b a 上的最小值点.
2.自定义函数
例5.1.建立正态分布的密度函数
222)(21),.,(σμ--
σπ=μσx e x f
解:打开文本编辑器,输入:
function y=zhengtai(x ,a ,b)
y=1/sqrt(2*pi)/a*exp(-(x-b).^2/2/a^2);
存为zhengtai.m .调用时可输入命令:
y=zhengtai(1,1,0)
得结果:y=0.2420.此即)0,1,1(f 的值.如果想画出标准正态分布的密度函数的图象,输入: ezplot(zhengtai(x ,1,0))
例5.2.解一元二次方程02=++c bx ax .
解:我们希望当输入c b a ,,的值时,计算机能给出方程的两个根.在文本编辑器中建立名为rootquad.m 的文件.
function [x1,x2]=rootquad(a ,b ,c)
d=b*b-4*a*c ;
x1=(-b+sqrt(d))/(2*a)
x2=(-b-sqrt(d))/(2*a)
比如求方程07322=-+x x 的根,可用语句:
[r1,r2]=rootquad(2,3,-7)
得结果:r1=1.2656
r2=-2.7656
2.验证罗必塔法则. 罗必塔法则是指在求00及∞
∞的极限时,可用导数之比的极限来计算(如果导数之比的极限存在或∞)
例5.3.以x
b a x x x -→0lim 为例验证罗必塔法则. 解:这是0
0型极限 f=a^x-b^x ;g=x ;L=limit(f/g ,x ,0)
得结果:L=log(a)-log(b)
df=diff(f ,x);dg=diff(g ,x);L1=limit(df/dg ,x ,0)
得结果:L1=log(a)-log(b)
从结果看出:L=L1,即
x
b a x x x -→0lim =x b a x x x '-→'0)(lim 4.函数的单调性与极值.
例5.4.求函数396)(23++-=x x x x f 的单调区间与极值.
解:求可导函数的单调区间与极值,就是求导函数的正负区间与正负区间的分界点,利用matlab 解决该问题,我们可以先求出导函数的零点,再画出函数图象,根据图象可以直观看出函数的单调区间与极值.输入命令:
f=x^3-6*x^2+9*x+3;df=diff(f ,x);s=solve(df)
得结果:ans=[1,3],画出函数图象.
ezplot(f ,[0,4])
从图上看,)(x f 的单调增区间为)1,(-∞、),1(+∞,单调减区间是)3,1(,极大值7)1(=f ,极小值3)3(=f .
我们可以建立一个名为dandiao.m 的M —文件,用来求求函数的单调区间.
disp(‘输入函数(自变量为x )’)
syms x
f=input('函数f(x)=')
df=diff(f);
s=solve(df)
a=[];
for i=1:size(s);
a(i)=s(i); end
ezplot(f ,[min(a)-1,max(a)+1])
要求函数)1ln(x x y +-=的单调区间与极值,可调用dandiao.m .输入:
dandiao ↵
在matlab 工作区出现以下提示:
输入函数(自变量为x )
函数f(x)=
在光标处输入:x-log(1+x),可得结果s=0.从图上看,)(x f 的单调增区间为),0(+∞,单调减区间是)0,(-∞,极小值0)0(=f .
5.函数的最值
调用求函数最小值命令fmin 时,可得出函数的最小值点,为求最小值,必须建立函数M —文件.
例5.5.求函数1)3()(2--=x x f 在区间)5,0(上的最小值.
解:我们可以建立一个名为f.m 的函数M -文件.
function y=f(x)
y=(x-3).^2-1;