发布企业信息

数值分析

作者:未知  信息来源:未知  2006-1-26

字体大小:  网友评论  进入论坛  

本节介绍的是关于函数的函数(function functions),这些函数是用来处理函数而非数值的。类别函数描述绘图优化求解fplot画出函数fminbnd由一有范围限制的变量找出函数的最小值fminsearch由几个变量找出函数的最小值fzero找出函数的解(零值)数值积分quad 低阶数值估计积分quad8高阶数值估计积分dblquad二重积分数值微分见下一章...

本节介绍的是关于函数的函数(function functions),这些函数是用来处理函数而非数值的;

类别
函数描述

绘图

优化

求解

fplot画出函数
fminbnd由一有范围限制的变量找出函数的最小值
fminsearch由几个变量找出函数的最小值
fzero找出函数的解(零值)
数值积分
quad 低阶数值估计积分
quad8高阶数值估计积分
dblquad二重积分
数值微分见下一章

MatLab中的函数表达

MatLab中用M文件来表示函数,设有如下函数:

他别表示为一称为hump.m的文件中:

function y = humps(x)
y = 1./((x – 0.3).^2 + 0.01) + 1./((x – 0.9).^2 + 0.04) – 6;

这个函数文件可用于数值分析的函数中.
第二种方法就是创造一个行内对象(inline()),方法如下:

f = inline(‘1./((x–0.3).^2 + 0.01) + 1./((x–0.9).^2 + 0.04)–6’);

用了上面的方法创造了函数文件,我们就可以找出函数在2的值:

f(2.0)
ans =
   –4.8552

用创造行内对象的方法还可以创造多参数的函数,如下:

f= inline('y*sin(x)+x*cos(y)','x','y')
f(pi,2*pi)
ans =
   3.1416

把函数画出来

fplot()可画出在给定范围内的函数值,如下

fplot('humps',[–5 5])
grid on

可通过限制y轴来放大图形

fplot('humps',[–5 5 –10 25])
grid on

你也可直接在fplot()中传递表达式,如:

fplot('2*sin(x+3)',[–1 1])

更可在一附图中画多个函数,如下

fplot('[2*sin(x+3), humps(x)]',[–1 1])

式中,[2*sin(x+3), humps(x)]组成了一个矩阵,每一列都是对应于x的函数

函数的最小值与解

找出一变量的函数的极值

x = fminbnd(’humps’,0.3,1)
x =
   0.6370

你可通过向fminbnd()函数传递一个函数optimset()作为参数来把此过程显示为列表形式:

x = fminbnd(’humps’,0.3,1,optimset(’Display’,’iter’))
Func-count  x      f(x)    Procedure
1      0.567376   12.9098   initial
2      0.732624   13.7746   golden
3      0.465248   25.1714   golden
4      0.644416   11.2693   parabolic
5      0.6413    11.2583   parabolic
6      0.637618   11.2529   parabolic
7      0.636985   11.2528   parabolic
8      0.637019   11.2528   parabolic
9      0.637052   11.2528   parabolic
x =
  0.6370

多变量函数极值

先创造一个m文件,three_var.m:

function b = three_var(v)
x = v(1);
y = v(2);
z = v(3);
b = x.^2 + 2.5*sin(y) – z^2*x^2*y^2;

现在,以x = –0.6, y = –1.2,z = 0.135为起始点找出函数的极值:

v = [–0.6 –1.2 0.135];
a = fminsearch('three_var',v)
a =
   0.0000 –1.5708 0.1803

设置寻找极值的参数

x = fminbnd(fun,x1,x2,options)
x = fminsearch(fun,x0,options)

其中,options是优化工具箱中(Optimization Toolbox)中的函数所用的一个结构,可如下设置

options = optimset('Display','iter');

options.Display用来设置是否显示中间过程,如为:"iter"则显示,为"off"则不显示,为"final"则只显示最后结果;
options.To1X设置结果的误差范围,默认值是:1.e–4.
options.MaxFunEval设置函数运行次数的上限,默认fminbnd()是500次,fminsearch()是200*length(x0)次

找出函数的解(零点值)

fzero()找出函数的零点值,你可以给出一个起始点,函数会从点开始搜索直到找到一个异号的值,最终给出解;
如果你知道函数会于哪两点异号,你可以给出一个两点的向量,表明起始值和起始搜索步长

a = fzero('humps',–0.2)
a =
  –0.1316

验证一下,此函数值的确很接近0,

humps(a)
ans =
   8.8818e –16

再看看下面的命令,看看你是否能看懂!

humps(1)
ans =
  16
humps(–1)
ans =
   –5.1378
options = optimset('Display','iter');
a = fzero('humps',[–1 1],options)
Func-count  x       f(x)       Procedure
1      –1      –5.13779    initial
1       1      16       initial
2      –0.513876  –4.02235    interpolation
3      0.243062   71.6382    bisection
4      –0.473635  –3.83767    interpolation
5      –0.115287   0.414441    bisection
6      –0.150214  –0.423446   interpolation
7      –0.132562  –0.0226907   interpolation
8      –0.131666  –0.0011492   interpolation
9      –0.131618  1.88371e–07  interpolation
10     –0.131618   –2.7935e–11 ?interpolation
11     –0.131618   8.88178e–16   interpolation
12     –0.131618   –9.76996e–15  interpolation
a =
   –0.1316

  最优化问题常常需要多次的运算才能汇集到一点,因此,起始点的选择显得至关重要,它不仅能提高效率,更可使我们找到的值不是局部的极值,而是全局的最值;
  下面是可能遇见的问题及解决的方法

得出的结果不是全局最值用不同的起始值或不同的起始步长去寻找
对应与x,无法计算出f改变你的函数使之含有罚函数,给f更大的数值空间
计算似乎进入了无限循环或返回的值不是最小值函数返回的是Inf, NaN,或复数值时,可在M文件中加上一些判断避免情况的发生,如:isreal(),isfinite()等函数

数值积分

  某区域内函数所围的区间可由数值积分来确定,MatLab中的一维函数积分用quad(),quad8().如:

q = quad(’humps’,0,1)
q =
   29.8583

  函数可有第4个参数,指明误差范围,还可有第5个参数,用来画出图形.

例子:计算曲线长

如有一曲线如下确定:

x(t)=sin(2t);y(t)=cos(t);z(t)=t;

此函数可如下画出:

t = 0:0.1:3*pi;
plot3(sin(2*t),cos(t),t)

hcurce()用来计算曲线长度:

function f = hcurve(t)
f = sqrt(4*cos(2*t).^2 + sin(t).^2 + 1);

下面就是计算结果:

len = quad(’hcurve’,0,3*pi)
len =
   1.7222e+01

二重积分

result = dblquad(’integrnd’,xmin,xmax,ymin,ymax);

默认状态下,dblquad是用的quad()来计算,为更精确,可

result = dblquad(’integrnd’,xmin,xmax,ymin,ymax,[],’quad8’);

分页:
Google


推荐图文

广告

机械热点图文

  • 数控车床加工编程典型实例分析2
  • 内螺纹车削加工——数控车床编程实例42
  • 子程序编程方法-数控车床编程实例36
  • 塑料模具动画演示

机械风云人物

Copyright © 2004 51base.com Inc. All rights reserved.

无忧基地 版权所有│粤ICP备06098418号│XHTML | CSS

客服:+86-755-2212 2202 工作时间:周1~5 10点~16点

感谢中国网络提供带宽支持

《网络营销技巧》