分形插值算法和MATLAB实验

分形插值算法和MATLAB实验
分形插值算法和MATLAB实验

一,分形插值算法

——分形图的递归算法1,分形的定义

分形(Fractal)一词,是法国人B.B.Mandelbrot 创造出来的,其原意包含了不规则、支离破碎等意思。Mandelbrot 基于对不规则的几何对象长期地、系统地研究,于1973 年提出了分维数和分形几何的设想。分形几何是一门以非规则几何形状为研究对象的几何学,用以描述自然界中普遍存在着的不规则对象。分形几何有其显明的特征,一是自相似性;分形作为一个数学集合, 其内部具有精细结构, 即在所有比例尺度上其组成部分应包含整体, 而且彼此是相似的。其定义有如下两种描述:

定义 1如果一个集合在欧式空间中的 Hausdorff 维数H D 恒大于其拓扑维数

r D ,则称该集合为分形集,简称分形。

定义 2组成部分以某种方式与整体相似的形体叫分形。

对于定义 1 的理解需要一定的数学基础,不仅要知道什么是Hausdorff 维数,而且要知道什么是拓扑维数,看起来很抽象,也不容易推广。定义 2 比较笼统的说明了自然界中的物质只要局部和局部或者局部和整体之间存在自相似性,那么这个物质就是分形。正是这一比较“模糊”的概念被人们普遍接受,同时也促进了分形的发展。

根据自相似性的程度,分形可分为有规分形和无规分形。有规分形是指具有严格的自相似的分形,比如,三分康托集,Koch 曲线。无规分形是指具有统计意义上的自相似性的分形,比如,曲折的海岸线,漂浮的云等。本文主要研究有规分形。

2. 分形图的递归算法

2.1 三分康托集

1883 年,德国数学家康托(G.Cantor)提出了如今广为人知的三分康托集。三分康托集是很容易构造的,然而,它却显示出许多最典型的分形特征。它是从单位区间出发,再由这个区间不断地去掉部分子区间的过程构造出来的(如图2.1)。

其详细构造过程是:第一步,把闭区间[0,1]平均分为三段,去掉中间的 1/3 部分段,则只剩下两个闭区间[0,1/3]和[2/3,1]。第二步,再将剩下的两个闭区间各自平均分为三段,同样去掉中间的区间段,这时剩下四段闭区间:[0,1/9],[2/9,1/3],[2/3,7/9]和[8/9,1]。第三步,重复删除每个小区间中间的 1/3 段。如此不断的分割下去,最后剩下的各个小区间段就构成了三分康托集。三分康托集的 Hausdorff 维数是0.6309。

图2.2 三分康托集的构造过程

2.2 Koch 曲线

1904 年,瑞典数学家柯赫构造了“Koch 曲线”几何图形。Koch 曲线大于一维,具有无限的长度,但是又小于二维,并且生成的图形的面积为零。它和三分康托集一样,是一个典型的分形。根据分形的次数不同,生成的Koch 曲线也有很多种,比如三次 Koch 曲线,四次 Koch 曲线等。下面以三次 Koch 曲线为例,介绍 Koch 曲线的构造方法,其它的可依此类推。

三次Koch 曲线的构造过程主要分为三大步骤:第一步,给定一个初始图形一条线段;第二步,将这条线段中间的 1/3 处向外折起;第三步,按照第二步的方法不断的把各段线段中间的 1/3 处向外折起。这样无限的进行下去,最后即可构造出Koch 曲线。其图例构造过程如下图2.2所示(迭代了 6 次的图形)。

图 2.2 Koch曲线生成过程

2.3 Sierpinski 垫片的递归算法

在 Cantor 集与Koch 集的基础上继续讨论Sierpinski 垫片的生成算法,同样先建立模型如下图2.3,同时展示生成后的图形。

图2.3 Sierpinski 垫片模型

其中先设定正三角形中心点坐标为(x, y),边长为L,迭代深度为n,三角形顶点分别为( xi,yi ),i= 1,2,3。且下一层正三角形的中心坐标为(xi,yi),i=01,02,03。

2.4 分支结构分形递归算法

研究如下图(图 2.4)的分支结构图的递归算法。

图 2.4分支结构分形图

细分此分支结构,建立模型如下,其中取 A 为起点,且记 A 点坐标为(x,y),B 点坐标为(x1,x2),线段AB = L, 2 .3BC = BD = L 且设定 AB 与水平面的夹角为alpha, 递归深度为n。

3 基于MATLAB的各种递归算法实例

3.1 三分康托集的MATLAB实例

Cantor 三分集的递归算法设计为构造一个函数为Cantor(ax,ay,bx,by),

其中(ax,ay)和(bx,by)分别代表初始位置端点的坐标。取 err 为递归终止的极小量,取 h 为不同层次线段之间的距离,且设出(cx,cy)和(dx,dy)如图3.1

图 3.1 建立Cantor 三分集模型

(1),MATLAB程序

Cantor(ax,ay,bx,by)

{ plot([ax,bx],[ay,by]); %画出每个层次上的图形

if (bx-ax)>err%设定有限次递归

{ cx = ax + ( bx – ax ) / 3;

cy = ay – h;

dx = bx – ( bx – ax ) / 3;

dy = by – h;

ay = ay – h;

by = by – h;

Cantor(ax,ay,cx,cy); %内部调用Cantor函数Cantor(dx,dy,bx,by); %内部调用Cantor函数}

}

(2) ,生成结果图形

图 3.2 Cantor 三分集结果

3.2 Koch 曲线的MATLAB实例

在设计Koch曲线的递归算法时参考Cantor集的方法,先建立一个模型如下,

图 3.3 Koch曲线模型

(1),MATLAB程序

Koch(ax,ay,bx,by)

{ err=1; %递归终极小量

line([ax bx],[ay by]);hold on;%画出图形

if ((bx-ax)^2+(by-ay)^2)>err%递归终止条件

{ cx=ax+(bx-ax)/3;

cy=ay+(by-ay)/3;

ex=bx-(bx-ax)/3;

ey=by-(by-ay)/3;

L=sqrt((ex-cx)^2+(ey-cy)^2);%计算 L

alpha=atan((ey-cy)/(ex-cx)); %计算a

if((ex-cx)<0)

{

alpha=alpha+pi; %图形旋转

}

dy=cy+sin(alpha+pi/3)*L;

dx=cx+cos(alpha+pi/3)*L;

Koch(ax,ay,cx,cy); %递归调用

Koch(ex,ey,bx,by);

Koch(cx,cy,dx,dy);

Koch(dx,dy,ex,ey);

(2),生成结果图形

图 3.4 Koch曲线生成结果

3.3 Sierpinski 垫片的MATLAB实例

(1),MATLAB程序

Sierpinski(x, y, L, n)

{if (n==1)

x1=x-L/2;

y1=y-L/2*tan(pi/6);

x2=x+L/2;

y2=y-L/2*tan(pi/6);

x3=x;

y3=y+L/2*tan(pi/6);

line([x1 x2],[y1 y2],'Color','r','LineWidth',2); hold on;

line([x2 x3],[y2 y3],'Color','g','LineWidth',2); hold on;

line([x3 x1],[y3 y1],'Color','y','LineWidth',2); hold on;

else

x01=x-L/4;

y01=y-L/4*tan(pi/6);

x02=x+L/4;

y02=y-L/4*tan(pi/6);

x03=x;

y03=y+L/2*tan(pi/6);

Sierpinski(x01,y01,L/2,n-1); %递归调用Sierpinski(x02,y02,L/2,n-1);

Sierpinski(x03,y03,L/2,n-1);

end

}

(2),生成结果图形

图 3.5 n=6时Sierpinski垫片生成图

图3.6 n=10 时Sierpinski 垫片生成图

3.4 分支结构分形的MATLAB实例

(1),MATLAB程序

Ramus(x, y,alpha, L, n)

if n>0

x1=x+cos(alpha)*L;

y1=y+sin(alpha)*L;

line([x,x1],[y,y1],'Color','g','LineWidth',2);

alpha_L=alpha+pi/8;

alpha_R=alpha-pi/8;

L=2*L/3;

Ramus(x1,y1,alpha_L,L,n-1); %递归调用

Ramus(x1,y1,alpha_R,L,n-1);

End

(2),生成结果图形

图 3.7α=π/4时分支结构生成图

图 3.7α=π/3时分支结构生成图

二, MATLAB实验

1.图像的二值化

程序如下:

I=imread('C:\Users\Administrator.SD-20111228XIYE\Desktop\001.j pg');

I1=rgb2gray(I);

level=graythresh(I1);

I2=im2bw(I1,level);

I3=~I2;

I4=bwareaopen(I3,50);

I5=~I4;

figure,imshow(I5)

原图:

二值化后的图像:

2.三种插值算法

程序:

I=imread('C:\Users\Administrator.SD-20111228XIYE\Desktop\001.jp g ');

figure, imshow(I);

A=imresize(I,2,'nearest'); %最邻近插值

figure, imshow(A);

B=imresize(I,2,'bilinear');%双线性插值

figure, imshow(B);

C=imresize(I,2,'bicubic'); %三次插值

figure, imshow(C);

(1)最邻近插值

(2)双线性插值

(3)立方卷积插值

3.抠图实验

MATLAB程序:

Main

close all

clear all

clc

img_name = input('请输入图像名字(图像必须为RGB图像,输入0结束):','s'); % 当输入0时结束

while ~strcmp(img_name,'0')

%进行人脸识别

facedetection(img_name);

img_name = input('请输入图像名(图像必须为RGB图像,输入0结束):','s'); end

子程序1 RGB

function rgbPic = bw2rgb(bwPic)

bwPicSize = size(bwPic);

rgbPic = zeros(bwPicSize(1),bwPicSize(2),3); rgbPic(bwPic==255)=255;

rgbPic(:,:,2) = rgbPic(:,:,1); % nice job

rgbPic(:,:,3) = rgbPic(:,:,1);

rgbPic = im2uint8(rgbPic);

子程序2 人脸识别function facedetection(img_name)

I = imread(img_name);

I2 = imread('dog.png');

doge = imresize(I2,[size(I,1) size(I,2)]);

gray = rgb2gray(I);

YCbCr = rgb2ycbcr(I);

heigth = size(gray,1);

width = size(gray,2);

for i = 1:heigth

for j = 1:width

Y = YCbCr(i,j,1);

Cb = YCbCr(i,j,2);

Cr = YCbCr(i,j,3);

if(Y < 80)

gray(i,j) = 0;

else

if(skin(Y,Cb,Cr) == 1)

gray(i,j) = 255;

else

gray(i,j) = 0;

end

end

end

end

SE=strel('arbitrary',eye(5));

gray = imopen(gray,SE);

gray = imclose(gray,SE);

a1=(255-bw2rgb(gray))/255;

next1=immultiply(I,a1);

a2=bw2rgb(gray)/255;

next2=immultiply(doge,a2);

add=imadd(next1,next2);

[L,num] = bwlabel(gray,8);

STATS = regionprops(L,'BoundingBox');

n = 1;

result = zeros(n,4);

figure,

subplot(1,2,1),imshow(I),

subplot(1,2,2),imshow(doge);

figure,

subplot(1,2,1),imshow(next1),

subplot(1,2,2),imshow(next2);

figure,

imshow(add);

hold on;

for i = 1:num

box = STATS(i).BoundingBox;

x = box(1);

y = box(2);

w = box(3);

h = box(4);

ratio = h/w;

ux = uint8(x);

uy = uint8(y);

if ux > 1

ux = ux - 1;

end

if uy > 1

uy = uy - 1;

end

if w < 20 || h < 20 || w*h < 400

continue

elseif ratio < 2.0 && ratio > 0.6 && findeye(gray,ux,uy,w,h) == 1

result(n,:) = [ux uy w h];

n = n+1;

end

end

if size(result,1) == 1 && result(1,1) > 0

rectangle('Position',[result(1,1),result(1,2),result(1,3),result(1,4)],'EdgeColor','r');

for m = 1:size(result,1)

m1 = result(m,1);

m2 = result(m,2);

m3 = result(m,3);

m4 = result(m,4);

if m1 + m3 < width && m2 + m4 < heigth

rectangle('Position',[m1,m2,m3,m4],'EdgeColor','r');

end

end

end

子程序3 find eye

function eye = findeye(bImage,x,y,w,h)

part = zeros(h,w);

for i = y:(y+h)

for j = x:(x+w)

if bImage(i,j) == 0

part(i-y+1,j-x+1) = 255;

else

part(i-y+1,j-x+1) = 0;

end

end

end

[L,num] = bwlabel(part,8);

if num < 2

eye = 0;

else

eye = 1;

end

子程序4 skin

function result = skin(Y,Cb,Cr)

a = 25.39;

b = 14.03;

ecx = 1.60;

ecy = 2.41;

sita = 2.53;

cx = 109.38;

cy = 152.02;

xishu = [cos(sita) sin(sita);-sin(sita) cos(sita)];

matlab插值法实例

Several Typical Interpolation in Matlab Lagrange Interpolation Supposing: If x=175, while y=? Solution: Lagrange Interpolation in Matlab: function y=lagrange(x0,y0,x); n=length(x0);m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k p=p*(z-x0(j))/(x0(k)-x0(j)); end end s=p*y0(k)+s; end y(i)=s; end input: x0=[144 169 225] y0=[12 13 15] y=lagrange(x0,y0,175) obtain the answer: x0 = 144 169 225 y0 = 12 13 15 y = 13.2302

Spline Interpolation Solution : Input x=[ 1 4 9 6];y=[ 1 4 9 6];x=[ 1 4 9 6];pp=spline(x,y) pp = form: 'pp' breaks: [1 4 6 9] coefs: [3x4 double] pieces: 3 order: 4 dim: 1 output : pp.coefs ans = -0.0500 0.5333 -0.8167 1.0000 -0.0500 0.0833 1.0333 2.0000 -0.0500 -0.2167 0.7667 4.0000 It shows the coefficients of cubic spline polynomial , so: S (x )=, 169,3)9(1484.0)9(0063.0)9(0008.0,94,2)4(2714.0)4(0183.0)4(0008 .0, 41,1)1(4024.0)1(0254.0)1(0008.0232 3 23≥≤+-+---≥≤+-+---≥≤+-+---x x x x x x x x x x x x Newton’s Interpolation Resolve 65 Solution: Newton’s Interpolation in matlab : function yi=newint(x,y,xi); n=length(x); ny=length(y); if n~=ny error end Y=zeros(n);Y(:,1)=y';

鲍威尔法编程-powell法编程 c语言编程 c++6.0

#include #define N 2 float gs(float z[N]) { float f; //f=10*(z[0]+z[1]-5)*(z[0]+z[1]-5)+(z[0]-z[1])*(z[0]-z[1]); f=4+4.5*z[0]-4*z[1]+z[0]*z[0]+2*z[1]*z[1]-2*z[0]*z[1]+z[0]*z[0]*z[0]*z[0]-2*z[0]*z[0]*z [1]; //f=1.5*z[0]*z[0]+0.5*z[1]*z[1]-z[0]*z[1]-2*z[0]; return(f); } float ywyh(float x[N],float t,float s[N],float z[N]) { float q=0.618,e,A[N],f[2],a,b,c=0.1,d=0.1; int i,j=0; a=0;b=t; f[0]=gs(x); for(i=0;if[1]) a=b-t; else break;} while(f[0]>f[1]); } else { t=0-t; do {a=a+t;f[1]=f[0]; for(i=0;if[0]) {

matlab中插值拟合与查表

MATLAB中的插值、拟合与查表 插值法是实用的数值方法,是函数逼近的重要方法。在生产和科学实验中,自变量x与因变量y的函数y = f(x)的关系式有时不能直接写出表达式,而只能得到函数在若干个点的函数值或导数值。当要求知道观测点之外的函数值时,需要估计函数值在该点的值。 如何根据观测点的值,构造一个比较简单的函数y=φ(x),使函数在观测点的值等于已知的数值或导数值。用简单函数y=φ(x)在点x处的值来估计未知函数y=f(x)在x点的值。寻找这样的函数φ(x),办法是很多的。φ(x)可以是一个代数多项式,或是三角多项式,也可以是有理分式;φ(x)可以是任意光滑(任意阶导数连续)的函数或是分段函数。函数类的不同,自然地有不同的逼近效果。在许多应用中,通常要用一个解析函数(一、二元函数)来描述观测数据。 根据测量数据的类型: 1.测量值是准确的,没有误差。 2.测量值与真实值有误差。 这时对应地有两种处理观测数据方法: 1.插值或曲线拟合。 2.回归分析(假定数据测量是精确时,一般用插值法,否则用曲线拟合)。 MATLAB中提供了众多的数据处理命令。有插值命令,有拟合命令,有查表命令。 2.2.1 插值命令 命令1 interp1 功能一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。各个参量之间的关系示意图为图2-14。 格式 yi = interp1(x,Y,xi) %返回插值向量yi,每一元素对应于参量xi,同时由向量x 与Y的内插值决定。参量x指定数据Y的点。若Y为一矩阵,则按Y的每列计算。yi是阶数为length(xi)*size(Y,2)的输出矩阵。 yi = interp1(Y,xi) %假定x=1:N,其中N为向量Y的长度,或者为矩阵Y的行数。 yi = interp1(x,Y,xi,method) %用指定的算法计算插值: ’nearest’:最近邻点插值,直接完成计算;

Matlab中插值函数汇总和使用说明

MATLAB中的插值函数 命令1:interp1 功能:一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。 x:原始数据点 Y:原始数据点 xi:插值点 Yi:插值点 格式 (1) yi = interp1(x,Y,xi) 返回插值向量yi,每一元素对应于参量xi,同时由向量x 与Y 的内插值决定。参量x 指定数据Y 的点。若Y 为一矩阵,则按Y 的每列计算。yi 是阶数为length(xi)*size(Y,2)的输出矩阵。 (2) yi = interp1(Y,xi) 假定x=1:N,其中N 为向量Y 的长度,或者为矩阵Y 的行数。 (3) yi = interp1(x,Y,xi,method) 用指定的算法计算插值: ’nearest’:最近邻点插值,直接完成计算; ’linear’:线性插值(缺省方式),直接完成计算; ’spline’:三次样条函数插值。对于该方法,命令interp1 调用函数spline、ppval、mkpp、umkpp。这些命令生成一系列用于分段多项式操作的函数。命令spline 用它们执行三次样条函数插值; ’pchip’:分段三次Hermite 插值。对于该方法,命令interp1 调用函数pchip,用于对向量x 与y 执行分段三次内插值。该方法保留单调性与数据的外形; ’cubic’:与’pchip’操作相同; ’v5cubic’:在MATLAB 5.0 中的三次插值。 对于超出x 范围的xi 的分量,使用方法’nearest’、’linear’、’v5cubic’的插值算法,相应地将返回NaN。对其他的方法,interp1 将对超出的分量执行外插值算法。 (4)yi = interp1(x,Y,xi,method,'extrap') 对于超出x 范围的xi 中的分量将执行特殊的外插值法extrap。 (5)yi = interp1(x,Y,xi,method,extrapval) 确定超出x 范围的xi 中的分量的外插值extrapval,其值通常取NaN 或0。

用MATLAB实现共轭梯度法求解实例

用MATLAB 实现共轭梯度法求解实例 康福 1 一.无约束优化方法 1.1 无约束优化方法的必要性 一般机械优化设计问题,都是在一定的限制条件下追求某一指标为最小,它 们都属于约束优化问题。但是为什么要研究无约束优化问题? (1)有些实际问题,其数学模型本身就是一个无约束优化问题。 (2)通过熟悉它的解法可以为研究约束优化问题打下良好的基础。 (3)约束优化问题的求解可以通过一系列无约束优化方法来达到。所以无约束优 化问题的解法是优化设计方法的基本组成部分,也是优化方法的基础。 (4)对于多维无约束问题来说,古典极值理论中令一阶导数为零,但要求二阶可 微,且要判断海赛矩阵为正定才能求得极小点,这种方法有理论意义,但无 实用价值。和一维问题一样,若多元函数F(X)不可微,亦无法求解。但古典 极值理论是无约束优化方法发展的基础。 1.2共轭梯度法 目前已研究出很多种无约束优化方法,它们的主要不同点在于构造搜索方向 上的差别。 (1)间接法——要使用导数,如梯度法、(阻尼)牛顿法、变尺度法、共轭梯度 法等。 (2)直接法——不使用导数信息,如坐标轮换法、鲍威尔法单纯形法等。 用直接法寻找极小点时,不必求函数的导数,只要计算目标函数值。这类方 法较适用于解决变量个数较少的(n ≤20)问题,一般情况下比间接法效率低。间接法除要计算目标函数值外,还要计算目标函数的梯度,有的还要计算其海赛矩阵。 搜索方向的构成问题乃是无约束优化方法的关键。 共轭梯度法是沿着共轭方向进行搜索,属于共轭方向法中的一种,该方法中 每一个共轭向量都是依赖于迭代点处的负梯度而构造出来。共轭梯度法作为一种实用的迭代法,它主要有下面的优点: (1)算法中,系数矩阵A的作用仅仅是用来由已知向量P 产生向量W=AP ,这不仅 可充分利用A的稀疏性,而且对某些提供矩阵A较为困难而由已知向量P 产 生向量W=AP 又十分方便的应用问题是很有益的。 (2)不需要预先估计任何参数就可以计算,这一点不像SOR 等; (3)每次迭代所需的计算,主要是向量之间的运算,便于并行化。 共轭梯度法原理的知识较多,请详见《机械优化设计》第四章的第四、五节。 图1为共轭梯度法的程度框图 1(0,1,2,) k k k k s k α+=+=x x

高等数学MATLAB实验三 不定积分、定积分及其应用 实验指导书

实验三 不定积分、定积分及其应用 【实验类型】验证性 【实验学时】2学时 【实验目的】 1.掌握用MA TLAB 求函数不定积分、定积分的方法; 2.理解定积分的概念及几何意义; 3.掌握定积分的应用; 【实验内容】 1.熟悉利用MATLAB 计算不定积分的命令、方法; 2.通过几何与数值相结合的方法演示定积分的概念和定积分的几何意义; 【实验目的】 1.掌握利用MATLAB 计算不定积分的命令、方法; 2.通过几何与数值相结合的方法演示定积分的概念和定积分的几何意义; 3.掌握利用MATLAB 计算定积分、广义积分的命令、方法; 4.掌握利用MA TLAB 计算有关定积分应用的各种题型,包括平面图形的面积、旋转体的体积、平面曲线的弧长等; 【实验前的预备知识】 1.原函数与不定积分的概念; 2.不定积分的换元法和分部积分法; 3.定积分的概念; 4.微积分基本公式; 5.广义积分的敛散性及计算方法; 6.利用定积分计算平面图形的面积; 7.利用定积分计算旋转体的体积; 8.利用定积分计算平面曲线的弧长; 【实验方法或步骤】 一、实验使用的MATLAB 函数 1.int( f (x ) , x ); 求()f x 的不定积分; 2.int( f (x ), x , a , b );求()f x 在[,]a b 上的定积分;

3.int( f (x ) , x , -inf, inf );计算广义积分()d f x x ∞ -∞?; 4.solve('eqn1','eqn2',...,'eqnN','var1,var2,...,varN');求解n 元方程组; 二、实验指导 例1 计算不定积分cos 2x e xdx ? 。 输入命令: syms x; int(exp(x)*cos(2*x),x) 运行结果: ans = 1/5*exp(x)*cos(2*x)+2/5*exp(x)*sin(2*x) 例2 计算不定积分 。 输入命令: syms x; int(1/(x^4*sqrt(1+x^2))) 运行结果: ans = -1/3/x^3*(1+x^2)^(1/2)+2/3/x*(1+x^2)^(1/2) 例3 以几何图形方式演示、理解定积分()b a f x dx ?概念,并计算近似值。 先将区间[,]a b 任意分割成n 份,为保证分割加细时,各小区间的长度趋于0,在取分点时,让相邻两分点的距离小于2()/b a n -,分点取为()()/i i x a i u b a n =++-([0,1]i u ∈为随机数),在每一区间上任取一点1()i i i i i c x v x x +=+-([0,1]i v ∈为随机数)作积分和进行计算,程序如下: function juxs(fname,a,b,n) % 定积分概念演示,随机分割、 随机取近似,并求近似值 xi(1)=a; xi(n+1)=b; for i=1:n-1 xi(i+1)=a+(i+rand(1))*(b-a)/n; end

基于MATLAB的鲍威尔法求极值问题

基于MATLAB的鲍威尔法求极值问题 姓名:xxx 学号:xxx (北京理工大学机械与车辆学院车辆工程,北京 100081) 摘要:无约束优化方法主要有七种,按照求导与否把这些方法分为间接法和直接法。牛顿法的成败与初始点选择有极大关系,其可靠性最差;坐标轮换法、单纯形法和最速下降法对于高维优化问题计算效率很低,有效性差;由于编制变尺度法程序复杂,其简便性不足。综合考虑后,鲍威尔法、共轭梯度法具有较好的综合性能。本文首先对鲍威尔法的原理进行阐述,根据其迭代过程给出流程图,并编写MATLAB程序。最后用此MATLAB程序求解实际的极值问题,并对求解结果进行简要分析。 1.鲍威尔法的基本思想 1.1其他优化方法对鲍威尔法形成的影响 通过对鲍威尔法的学习,可以很明显看出来其迭代思想中汲取了其他几种优化方法的核心思想。为了更全面、更深入的学习鲍威尔法,很有必要对其他有影响的优化思想进行学习和梳理。 由最基本的数学基础知识可知,梯度方向是函数增加最快的方向,负梯度方向是函数下降最快的方向,于是,利用这个下降最快方向产生了最速下降法。每次迭代都沿着负梯度方向进行一维搜索,直到满足精度要求为止。其特点是相邻两个搜索方向互相正交,所以很明显的一个现象就是刚开始搜索步长比较大,愈靠近极值点其步长愈小,收敛速度愈慢,特别当二维二次目标函数的等值线是较扁的椭圆时,迭代速度更慢。这时,倘若目标函数是等值线长、短轴都平行于坐标轴的椭圆形,则通过坐标轮换法可以很高效的解决问题。通过两次分别沿坐标轴进行一维搜索,便可达到极值点。但对于目标函数的等值线椭圆的长、短轴倾斜于坐标轴时,坐标轮换法的搜索效率也显得极低。抛开这两种特殊情况,对于一般形态的目标函数,如果在某些明显可以直达最优点的情况下(一般为靠近极

matlab插值(详细 全面)

Matlab中插值函数汇总和使用说明 MATLAB中的插值函数为interp1,其调用格式 为: yi= interp1(x,y,xi,'method') 其中x,y为插值点,yi为在被插值点xi处的插值结果;x,y为向量, 'method'表示采用的插值方法,MATLAB提供的插值方法有几种: 'method'是最邻近插值, 'linear'线性插值; 'spline'三次样条插值; 'cubic'立方插值.缺省时表示线性插值 注意:所有的插值方法都要求x是单调的,并且xi不能够超过x的范围。 例如:在一天24小时内,从零点开始每间隔2小时测得的环境温度数据分别为 12,9,9,10,18 ,24,28,27,25,20,18,15,13, 推测中午12点(即13点)时的温度. x=0:2:24; y=[12 9 9 10 18 24 28 27 25 20 18 15 13]; a=13; y1=interp1(x,y,a,'spline') 结果为: 27.8725 若要得到一天24小时的温度曲线,则: xi=0:1/3600:24; yi=interp1(x,y,xi, 'spline'); plot(x,y,'o' ,xi,yi)

命令1 interp1 功能一维数据插值(表格查找)。该命令对数据点之间计算内插值。它找出一元函数f(x)在中间点的数值。其中函数f(x)由所给数据决定。 x:原始数据点 Y:原始数据点 xi:插值点 Yi:插值点 格式 (1)yi = interp1(x,Y,xi) 返回插值向量yi,每一元素对应于参量xi,同时由向量x 与Y 的内插值决定。参量x 指定数据Y 的点。 若Y 为一矩阵,则按Y 的每列计算。yi是阶数为length(xi)*size(Y,2)的输出矩阵。(2)yi = interp1(Y,xi) 假定x=1:N,其中N 为向量Y 的长度,或者为矩阵Y 的行数。 (3)yi = interp1(x,Y,xi,method) 用指定的算法计算插值: ’nearest’:最近邻点插值,直接完成计算; ’linear’:线性插值(缺省方式),直接完成计算; ’spline’:三次样条函数插值。对于该方法,命令interp1 调用函数spline、ppval、mkpp、umkpp。这些命令生成一系列用于分段多项式操作的函数。命令spline 用它们执行三次样条函数插值; ’pchip’:分段三次Hermite 插值。对于该方法,命令interp1 调用函数pchip,用于对

(完整版)Matlab学习系列13.数据插值与拟合

13. 数据插值与拟合 实际中,通常需要处理实验或测量得到的离散数据(点)。插值与拟合方法就是要通过离散数据去确定一个近似函数(曲线或曲面),使其与已知数据有较高的拟合精度。 1.如果要求近似函数经过所已知的所有数据点,此时称为插值问 题(不需要函数表达式)。 2.如果不要求近似函数经过所有数据点,而是要求它能较好地反 映数据变化规律,称为数据拟合(必须有函数表达式)。 插值与拟合都是根据实际中一组已知数据来构造一个能够反映数据变化规律的近似函数。区别是:【插值】不一定得到近似函数的表达形式,仅通过插值方法找到未知点对应的值。【拟合】要求得到一个具体的近似函数的表达式。 因此,当数据量不够,但已知已有数据可信,需要补充数据,此时用【插值】。当数据基本够用,需要寻找因果变量之间的数量关系(推断出表达式),进而对未知的情形作预测,此时用【拟合】。

一、数据插值 根据选用不同类型的插值函数,逼近的效果就不同,一般有:(1)拉格朗日插值(lagrange插值) (2)分段线性插值 (3)Hermite (4)三次样条插值 Matlab 插值函数实现: (1)interp1( ) 一维插值 (2)intep2( ) 二维插值 (3)interp3( ) 三维插值 (4)intern( ) n维插值 1.一维插值(自变量是1维数据) 语法:yi = interp1(x0, y0, xi, ‘method’) 其中,x0, y0为原离散数据(x0为自变量,y0为因变量);xi为需要插值的节点,method为插值方法。 注:(1)要求x0是单调的,xi不超过x0的范围; (2)插值方法有‘nearest’——最邻近插值;‘linear’——线性插值;‘spline’——三次样条插值;‘cubic’——三次插值;

MATLAB三次样条插值之三转角法

非常类似前面的三弯矩法,这里的sanzhj函数和intersanzhj作用相当于前面的sanwanj和intersanwj,追赶法程序通用,代码如下。 %%%%%%%%%%%%%%%%%%% function [newu,w,newv,d]=sanzhj(x,y,x0,y0,y1a,y1b) % 三转角样条插值 % 将插值点分两次输入,x0 y0 单独输入 % 边值条件a的一阶导数 y1a 和b的一阶导数 y1b n=length(x);m=length(y); if m~=n error('x or y 输入有误,再来'); end v=ones(n-1,1); u=ones(n-1,1); d=zeros(n-1,1); w=2*ones(n-1,1); h0=x(1)-x0; h=zeros(n-1,1); for k=1:n-1 h(k)=x(k+1)-x(k); end v(1)=h0/(h0+h(1)); u(1)=1-v(1); d(1)=3*(v(1)*(y(2)-y(1))/h(1)+u(1)*((y(1)-y0))/h0); % for k=2:n-1 v(k)=h(k-1)/(h(k-1)+h(k)); u(k)=1-v(k); d(k)=3*(v(k)*(y(k+1)-y(k))/h(k)+u(k)*(y(k)-y(k-1))/h(k-1)); end d(1)=d(1)-u(1)*y1a; d(n-1)=d(n-1)-v(n-1)*y1b; newv=v(1:n-2,:); newu=u(2:n-1,:); %%%%%%%%%%%% function intersanzhj(x,y,x0,y0,y1a,y1b) % 三转角样条插值

实验一B Matlab基本操作与微积分计算

实验一Matlab基本操作与微积分计算 实验目的 1.进一步理解导数概念及其几何意义. 2.学习matlab的求导命令与求导法. 3.通过本实验加深理解积分理论中分割、近似、求和、取极限的思想方法. 4.学习并掌握用matlab求不定积分、定积分、二重积分、曲线积分的方法. 5.学习matlab命令sum、symsum与int. 实验内容 一、变量 1、变量 MA TLAB中变量的命名规则是: (1)变量名必须是不含空格的单个词; (2)变量名区分大小写; (3)变量名最多不超过19个字符; (4)变量名必须以字母打头,之后可以是任意字母、数字或下划线,变量名中不允许使用标点符号. 1、创建简单的数组 x=[a b c d e f ]创建包含指定元素的行向量 x=first:step: last创建从first起,逐步加step计数,last结束的行向量, step缺省默认值为1 x=linspace(first,last,n)创建从first开始,到last结束,有n个元素的行向量 x=logspace(first,last,n)创建从first开始,到last结束,有n个元素的对数分隔行向量. 注:以空格或逗号分隔的元素指定的是不同列的元素,而以分号分隔的元素指定了不同行的元素. 2、数组元素的访问 (1)访问一个元素: x(i)表示访问数组x的第i个元素. (2)访问一块元素: x(a :b :c)表示访问数组x的从第a个元素开始,以步长为b到第c个元素(但

不超过c),b可以为负数,b缺损时为1. (3)直接使用元素编址序号: x ([a b c d]) 表示提取数组x的第a、b、c、d个元素构成一个新的数组[x (a) x (b) x(c) x(d)]. 3、数组的运算 (1)标量-数组运算 数组对标量的加、减、乘、除、乘方是数组的每个元素对该标量施加相应的加、减、乘、除、乘方运算. 设:a=[a1,a2,…,an], c=标量, 则: a+c=[a1+c,a2+c,…,an+c] a .*c=[a1*c,a2*c,…,an*c] a ./c= [a1/c,a2/c,…,an/c](右除) a .\c= [c/a1,c/a2,…,c/an] (左除) a .^c= [a1^c,a2^c,…,an^c] c .^a= [c^a1,c^a2,…,c^an] (2)数组-数组运算 当两个数组有相同维数时,加、减、乘、除、幂运算可按元素对元素方式进行的,不同大小或维数的数组是不能进行运算的. 设:a=[a1,a2,…,an], b=[b1,b2,…,bn], 则: a +b= [a1+b1,a2+b2,…,an+bn] a .*b= [a1*b1,a2*b2,…,an*bn] a ./b= [a1/b1,a2/b2,…,an/bn] a .\b=[b1/a1,b2/a2,…,bn/an] a .^b=[a1^b1,a2^b2,…,an^bn] 三、矩阵 1、矩阵的建立 矩阵直接输入:从“[ ” 开始,元素之间用逗号“,”(或空格),行之间用分号“;”(或回车),用“ ]”结束. 特殊矩阵的建立: a=[ ] 产生一个空矩阵,当对一项操作无结果时,返回空矩阵,空矩阵的大小为零. b=zeros (m,n) 产生一个m行、n列的零矩阵 c=ones (m,n) 产生一个m行、n列的元素全为1的矩阵 d=eye (m,n) 产生一个m行、n列的单位矩阵 eye (n) %生成n维的单位向量 eye (size (A)) %生成与A同维的单位阵 2、矩阵中元素的操作 (1)矩阵A的第r行A(r,:) (2)矩阵A的第r列A(:,r) (3)依次提取矩阵A的每一列,将A拉伸为一个列向量A(:) (4)取矩阵A的第i1~i2行、第j1~j2列构成新矩阵:A(i1:i2, j1:j2) (5)以逆序提取矩阵A的第i1~i2行,构成新矩阵:A(i2:-1:i1,:) (6)以逆序提取矩阵A的第j1~j2列,构成新矩阵:A(:, j2:-1:j1 ) (7)删除A的第i1~i2行,构成新矩阵:A(i1:i2,:)=[ ] (8)删除A的第j1~j2列,构成新矩阵:A(:, j1:j2)=[ ] (9)将矩阵A和B拼接成新矩阵:[A B];[A;B] 3、矩阵的运算 (1)标量-矩阵运算同标量-数组运算. (2)矩阵-矩阵运算 a. 元素对元素的运算,同数组-数组运算.(A/B %A右除B; B\A%A左除B) b. 矩阵运算: 矩阵加法:A+B 矩阵乘法:A*B 方阵的行列式:det(A) 方阵的逆:inv(A)

matlab 软件拟合与插值运算实验报告

实验6 数据拟合&插值 一.实验目的 学会MATLAB软件中软件拟合与插值运算的方法。 二.实验内容与要求 在生产和科学实验中,自变量x与因变量y=f(x)的关系式有时不能直接写出表达式,而只能得到函数在若干个点的函数值或导数值。当要求知道观测点之外的函数值时,需要估计函数值在该点的值。 要根据观测点的值,构造一个比较简单的函数y=t (x),使函数在观测点的值等于已知的数值或导数值,寻找这样的函数t(x),办法是很多的。 根据测量数据的类型有如下两种处理观测数据的方法。 (1)测量值是准确的,没有误差,一般用插值。 (2)测量值与真实值有误差,一般用曲线拟合。 MATLAB中提供了众多的数据处理命令,有插值命令,拟合命令。 1.曲线拟合 >> x=[0.5,1.0,1.5,2.0,2.5,3.0]; >> y=[1.75,2.45,3.81,4.80,7.00,8.60]; >> p=polyfit (x,y,2); >> x1=0.5:0.05:3.0; >> y1=polyval(p,x1 ); >> plot(x,y,'*r',x1,y1,'-b')

2.一维插值 >> year=[1900,1910,1920,1930,1940,1990,2000,2010]; >> product = [75.995,91.972,105.711,123.203,131.669,249.633,256.344,267.893 ]; >> p2005=interp1(year,product,2005) p2005 = 262.1185 >> y= interp1(year,product,x, 'cubic'); >> plot(year,product,'o',x,y)

南邮MATLAB数学实验答案(全)

第一次练习 教学要求:熟练掌握Matlab 软件的基本命令和操作,会作二维、三维几何图形,能够用Matlab 软件解决微积分、线性代数与解析几何中的计算问题。 补充命令 vpa(x,n) 显示x 的n 位有效数字,教材102页 fplot(‘f(x)’,[a,b]) 函数作图命令,画出f(x)在区间[a,b]上的图形 在下面的题目中m 为你的学号的后3位(1-9班)或4位(10班以上) 1.1 计算30sin lim x mx mx x →-与3 sin lim x mx mx x →∞- syms x limit((902*x-sin(902*x))/x^3) ans = 366935404/3 limit((902*x-sin(902*x))/x^3,inf) ans = 0 1.2 cos 1000 x mx y e =,求''y syms x diff(exp(x)*cos(902*x/1000),2) ans = (46599*cos((451*x)/500)*exp(x))/250000 - (451*sin((451*x)/500)*exp(x))/250 1.3 计算 22 11 00 x y e dxdy +?? dblquad(@(x,y) exp(x.^2+y.^2),0,1,0,1) ans = 2.1394 1.4 计算4 2 2 4x dx m x +? syms x int(x^4/(902^2+4*x^2)) ans = (91733851*atan(x/451))/4 - (203401*x)/4 + x^3/12 1.5 (10)cos ,x y e mx y =求 syms x diff(exp(x)*cos(902*x),10) ans = -356485076957717053044344387763*cos(902*x)*exp(x)-3952323024277642494822005884*sin(902*x)*exp(x) 1.6 0x =的泰勒展式(最高次幂为4).

基于MATLAB的鲍威尔法求极值问题

基于MATLAB的鲍威尔法求极值问题 :xxx 学号:xxx (理工大学机械与车辆学院车辆工程,100081) 摘要:无约束优化方法主要有七种,按照求导与否把这些方法分为间接法和直接法。牛顿法的成败与初始点选择有极大关系,其可靠性最差;坐标轮换法、单纯形法和最速下降法对于高维优化问题计算效率很低,有效性差;由于编制变尺度法程序复杂,其简便性不足。综合考虑后,鲍威尔法、共轭梯度法具有较好的综合性能。本文首先对鲍威尔法的原理进行阐述,根据其迭代过程给出流程图,并编写MATLAB程序。最后用此MATLAB程序求解实际的极值问题,并对求解结果进行简要分析。 1.鲍威尔法的基本思想 1.1其他优化方法对鲍威尔法形成的影响 通过对鲍威尔法的学习,可以很明显看出来其迭代思想中汲取了其他几种优化方法的核心思想。为了更全面、更深入的学习鲍威尔法,很有必要对其他有影响的优化思想进行学习和梳理。 由最基本的数学基础知识可知,梯度方向是函数增加最快的方向,负梯度方向是函数下降最快的方向,于是,利用这个下降最快方向产生了最速下降法。每次迭代都沿着负梯度方向进行一维搜索,直到满足精度要求为止。其特点是相邻两个搜索方向互相正交,所以很明显的一个现象就是刚开始搜索步长比较大,愈靠近极值点其步长愈小,收敛速度愈慢,特别当二维二次目标函数的等值线是较扁的椭圆时,迭代速度更慢。这时,倘若目标函数是等值线长、短轴都平行于坐标轴的椭圆形,则通过坐标轮换法可以很高效的解决问题。通过两次分别沿坐标轴进行一维搜索,便可达到极值点。但对于目标函数的等值线椭圆的长、短轴倾斜于坐标轴时,坐标轮换法的搜索效率也显得极低。抛开这两种特殊情况,对于一般形态的目标函数,如果在某些明显可以直达最优点的情况下(一般为靠近极

Matlab求解插值问题

Matlab求解插值问题 在应用领域中,由有限个已知数据点,构造一个解析表达式,由此计算数据点之间的函数值,称之为插值。 实例:海底探测问题 某公司用声纳对海底进行测试,在5×5海里的坐标点上测得海底深度的值,希望通过这些有限的数据了解更多处的海底情况。并绘出较细致的海底曲面图。 1、一元插值 一元插值是对一元数据点(x i,y i)进行插值。 线性插值:由已知数据点连成一条折线,认为相临两个数据点之间的函数值就在这两点之间的连线上。一般来说,数据点数越多,线性插值就越精确。 调用格式:yi=interp1(x,y,xi,’linear’) %线性插值 zi=interp1(x,y,xi,’spline’) %三次样条插值 wi=interp1(x,y,xi,’cubic’) %三次多项式插值说明:yi、zi、wi为对应xi的不同类型的插值。x、y为已知数据点。 例:已知数据: 求当x i=0.25时的y i的值。 程序: x=0:.1:1; y=[.3 .5 1 1.4 1.6 1 .6 .4 .8 1.5 2]; yi0=interp1(x,y,0.025,'linear') xi=0:.02:1; yi=interp1(x,y,xi,'linear'); zi=interp1(x,y,xi,'spline'); wi=interp1(x,y,xi,'cubic'); plot(x,y,'o',xi,yi,'r+',xi,zi,'g*',xi,wi,'k.-') legend('原始点','线性点','三次样条','三次多项式') 结果:yi0 = 0.3500

MATLAB_实验04 多元函数微积分

实验04 多元函数微积分 一实验目的 (2) 二实验内容 (2) 三实验准备 (2) 四实验方法与步骤 (3) 五练习与思考 (7)

一 实验目的 1 了解多元函数、多元函数积分的基本概念,多元函数的极值及其求法; 2 理解多元函数的偏导数、全微分等概念,掌握积分在计算空间立体体积或表面积等问题中的应用; 3 掌握MATLAB 软件有关求导数的命令; 4 掌握MATLAB 软件有关的命令. 二 实验内容 1 多元函数的偏导数,极值; 2 计算多元函数数值积分; 3计算曲线积分,计算曲面积分. 三 实验准备 1 建立符号变量命令为sym 和syms ,调用格式为: x=sym('x') 建立符号变量x ; syms x y z 建立多个符号变量x ,y ,z ; 2 matlab 求导命令diff 的调用格式: diff(函数(,)f x y ,变量名x) 求(,)f x y 对x 的偏导数 f x ??; diff(函数(,)f x y ,变量名x,n) 求(,)f x y 对x 的n 阶偏导数n n f x ??; 3 matlab 求雅可比矩阵命令jacobian 的调用格式: jacobian([f;g;h],[],,x y z )给出矩阵 f f f x y z g g g x y z h h h x y z ????? ???? ? ???? ???? ? ???? ?????? 4 MATLAB 中主要用int 进行符号积分,常用格式如下: ① int(s)表示求符号表达式s 的不定积分 ② int(s,x)表示求符号表达式s 关于变量x 的不定积分 ③ int(s,a,b)表示求符号表达式s 的定积分,a ,b 分别为积分的上、下限 ④ int(s,x,a,b)表示求符号表达式s 关于变量x 的定积分,a,b 分别为积分的上、下限 5 MATLAB 中主要用trapz,quad,quad8等进行数值积分,常用格式如下: ① trapz(x,y)采用梯形积分法,其中x 是积分区间的离散化向量,y 是与x 同维数的向量、用来表示被积函数. ② quad8('fun',a,b,tol)采用变步长数值积分,其中fun 为被积函数的M 函数名,a,b 分别为积分上、下限,tol 为精度,缺省值为1e-3. ③ dblquad('fun',a,b,c,d)表示求矩形区域的二重数值积分,其中fun 为被积函数的

鲍威尔算法matlab程序 f

function f=fun(x) f=10*(x(1)+x(2)-5)^2+(x(1)-x(2))^2; function f=fx(x0,alpha,s) x1=x0+alpha*s; f=fun(x1); function f=fsearch(x0,s) %利用进退法确定高低高区间 alpha1=0; h=0.1; alpha2=alpha1+h; f1=fx(x0,alpha1,s); f2=fx(x0,alpha2,s); if f1>f2 alpha3=alpha2+h; f3=fx(x0,alpha3,s); while f2>f3 alpha1=alpha2; alpha2=alpha3; alpha3=alpha3+h; f2=f3; f3=fx(x0,alpha3,s); end else h=-h; v=alpha1; alpha1=alpha2; alpha2=v; v=f1; f1=f2; f2=v; alpha3=alpha2+h; f3=fx(x0,alpha3,s); while f2>f3 alpha1=alpha2; alpha2=alpha3; alpha3=alpha3+h; f2=f3; f3=fx(x0,alpha3,s); end end a=min(alpha1,alpha3); b=max(alpha1,alpha3); %利用黄金分割点法求解 alpha1=a+0.382*(b-a);

alpha2=a+0.618*(b-a); f1=fx(x0,alpha1,s); f2=fx(x0,alpha2,s); while abs(a-b)>0.001 if f1>f2 a=alpha1; alpha1=alpha2; f1=f2; alpha2=a+0.618*(b-a); f2=fx(x0,alpha2,s); else b=alpha2; alpha2=alpha1; f2=f1; alpha1=a+0.382*(b-a); f1=fx(x0,alpha1,s); end end f=0.5*(a+b); clear %初始点 x0=[0;0]; %搜索方向 e1=[1;0]; e2=[0;1]; G0=fun(x0); F0=G0; %第一次迭代 %沿着e1 alpha1=fsearch(x0,e1); x1=x0+alpha1*e1; F1=fun(x1); delta1=F0-F1; % 沿着方向e2; alpha2=fsearch(x1,e2); x2=x1+alpha2*e2; F2=fun(x2); G2=F2; delta2=F1-F2; deltam=max(delta1,delta2); %映射点 x3=2*x2-x0; G3=fun(x3); if G3

函数的插值方法及matlab程序

6.1 插值问题及其误差 6.1.2 与插值有关的MATLAB 函数 (一) POLY2SYM函数 调用格式一:poly2sym (C) 调用格式二:f1=poly2sym(C,'V') 或f2=poly2sym(C, sym ('V') ), (二) POLYVAL函数 调用格式:Y = polyval(P,X) (三) POLY函数 调用格式:Y = poly (V) (四) CONV函数 调用格式:C =conv (A, B) 例 6.1.2求三个一次多项式、和的积.它们的零点分别依次为0.4,0.8,1.2. 解我们可以用两种MATLAB程序求之. 方法1如输入MATLAB程序 >> X1=[0.4,0.8,1.2]; l1=poly(X1), L1=poly2sym (l1) 运行后输出结果为 l1 = 1.0000 - 2.4000 1.7600 -0.3840 L1 = x^3-12/5*x^2+44/25*x-48/125 方法2如输入MATLAB程序 >> P1=poly(0.4);P2=poly(0.8);P3=poly(1.2); C =conv (conv (P1, P2), P3) , L1=poly2sym (C) 运行后输出的结果与方法1相同. (五) DECONV 函数 调用格式:[Q,R] =deconv (B,A) (六) roots(poly(1:n))命令 调用格式:roots(poly(1:n)) (七) det(a*eye(size (A)) - A)命令 调用格式:b=det(a*ey e(size (A)) - A) 6.2 拉格朗日(Lagrange)插值及其MATLAB程序 6.2.1 线性插值及其MATLAB程序 例 6.2.1 已知函数在上具有二阶连续导数,,且满足条件 .求线性插值多项式和函数值,并估计其误差. 解输入程序 >> X=[1,3];Y=[1,2]; l01= poly(X(2))/( X(1)- X(2)), l11= poly(X(1))/( X(2)- X(1)), l0=poly2sym (l01),l1=poly2sym (l11), P = l01* Y(1)+ l11* Y(2), L=poly2sym (P),x=1.5; Y = polyval(P,x) 运行后输出基函数l0和l1及其插值多项式的系数向量P(略)、插值多项式L和插值Y为l0 = l1 = L = Y = -1/2*x+3/2 1/2*x-1/2 1/2*x+1/2 1.2500 输入程序 >> M=5;R1=M*abs((x-X(1))* (x-X(2)))/2

matlab实验鲍威尔法

实验报告 实验名称:鲍威尔法 院(系):机电学院 专业班级:机械制造及其自动化 姓名: 学号: 2013年5 月13 日

实验一:鲍威尔法实验日期:2013年5 月 13 日 一、实验目的 了解MATLAB的基本运用 了解MATLB在优化中的使用 二、实验原理 鲍威尔法也是一种共轭法,利用函数值来构造共轭方向,同时引入坐标轮换的概念,利用搜索前后两个点之间的连线形成新的共轭方向,替换旧的共轭方向。 三、实验内容 鲍威尔法程序: x0=[12;10]; xk=x0; ie=10^(-7); ae=1; %初始化搜索方向 d=zeros(2,2);

d(:,1)=[1;0]; d(:,2)=[0;1]; Inc=zeros(2,1); k=0; MLN=100; %迭代求解 while (ae>ie&&k0 F0=eval(F0); end %沿d1方向进行一维搜索 syms a

syms x1; syms x2; xk1=xk+a*d(:,1); x1=xk1(1); x2=xk1(2); fun1=fun(x1,x2); fxa=diff(fun1,'a'); a=solve(fxa); xk1=inline(xk1); xk1=feval(xk1,a); xk1(1)=eval(xk1(1)); xk1(2)=eval(xk1(2)); syms x1; syms x2; fun1=fun(x1,x2); fun1=inline(fun1); f1=feval(fun1,xk1(1),xk1(2)); f1=eval(f1); Inc(1)=f0-f1;

相关文档
最新文档