搜档网
当前位置:搜档网 › 导航中直角坐标转换为地理坐标的matlab程序

导航中直角坐标转换为地理坐标的matlab程序

导航中直角坐标转换为地理坐标的matlab程序
导航中直角坐标转换为地理坐标的matlab程序

直角坐标转换为地理坐标

设计算法将地理坐标转换为直角坐标,通过迭代次数和欧氏误差评价算法性能。总体思路是:先将地理坐标(理论值)转换为直角坐标(理论值),由于该算法没有误差,两坐标是等价的。再用设计的算法将直角坐标系转换为地理坐标(计算值),在同样的纬度和高度情况下,取出经度误差(理论值与计算值之差的绝对值)最大的点,将该点的地理坐标转换为直角坐标,该坐标与直角坐标理论值即为评价算法的误差。

当高度在-6300000m到30000000m时,迭代次数和误差曲线如下图所示:

迭代次数:

误差:

18000个点中,发散点个数为:convergenum =0

当高度在-50000m到1000000m时,迭代次数和误差曲线如下图所示:迭代次数:

误差:

18000个点中,发散点个数为:convergenum =0

当高度在-6378000m到-6300000m时,迭代次数和误差曲线如下图所示:迭代次数:

误差:

18000个点中,发散点个数为:convergenum =0

主程序:

R=6378.173*1000;

r=6356.7523142*1000;

f=(R-r)/R;

w=linspace(-90,90,30); %纬度i

l=linspace(-180,180,30); %经度j

%h=linspace(-50000,1000000,20); %高度k

%h=linspace(-6300000,30000000,20); %高度k

h=linspace(-6378000,-6300000,20); %高度k

hhj=pi/180; %角度换算成弧度需乘的量

w=w*hhj; %纬度换算成弧度

l=l*hhj; %经度换算成弧度

ww=[]; %存放初始纬度数组

ll=[]; %存放初始经度数组

hh=[]; %存放初始高度数组

for i=1:30 %纬度i

for j=1:30 %经度j

for k=1:20 %高度k

ww(i,j,k)=w(i);

ll(i,j,k)=l(j);

hh(i,j,k)=h(k);

end

end

end

[xxe,yye,zze]=wlh_change_xyz(ww,ll,hh); %经纬高wlh转换为直角坐标系xyz

[NEWw,NEWl,NEWh,flag_converge,Nkk]=xyz_change_wlh(xxe,yye,zze);%直角坐标系xyz转换为经纬高wlh

[xxe1,yye1,zze1]=wlh_change_xyz(NEWw,NEWl,NEWh);%经纬高wlh转换为直角坐标系xyz convergenum=length(xxe(:,1,1))*length(xxe(1,:,1))*length(xxe(1,1,:))-sum(sum(sum(flag_conver ge)))

wuchax=xxe-xxe1;%x的误差

wuchay=yye-yye1;%y的误差

wuchaz=zze-zze1;%z的误差

wucha=sqrt(wuchax.^2+wuchay.^2+wuchaz.^2);%欧氏的误差

wuchamax=[];%存放相同经度时的最大误差

Nkkmax=[];%存放相同经度时的最大迭代次数

for i=1:30 %纬度i

for k=1:20 %高度k

wuchamax(i,k)=max(abs(wucha(i,:,k)));%求放相同经度时的最大误差

Nkkmax(i,k)=max(Nkk(i,:,k));%求放相同经度时的最大迭代次数

end

end

%画图

plotw=w';

ploth=h;

pplotw=ones(size(plotw))*ploth;

pploth=plotw*ones(size(ploth));

surf(pplotw,pploth,Nkkmax)%画迭代次数曲线

xlabel('Height(m)'),ylabel('Geodetic latitude(degree)'),zlabel('Iteration numbers')

grid on ;

surf(pplotw,pploth,wuchamax)%画误差曲线

xlabel('Height(m)'),ylabel('Geodetic latitude(degree)'),zlabel('Euclid distance errors(m)')

---------------------------------------------------------------------------------------------------------------

%经纬高wlh转换为直角坐标系xyz

function [xxe,yye,zze]=wlh_change_xyz(w,l,h)

R=6378.173*1000;

r=6356.7523142*1000;

f=(R-r)/R;

hhj=pi/180; %角度换算成弧度需乘的量

w=w*hhj; %纬度换算成弧度

l=l*hhj; %经度换算成弧度

o=acot(cot(w)/(1-f)); %通过纬度求角度o

xxe=[]; %存放直角坐标系x的数组

yye=[]; %存放直角坐标系y的数组

zze=[]; %存放直角坐标系z的数组

for i=1:length(w(:,1,1)) %纬度i

for j=1:length(w(1,:,1)) %经度j

for k=1:length(w(1,1,:)) %高度k

m=R*cos(o(i,j,k))+h(i,j,k)*cos(w(i,j,k));

xe=m*cos(l(i,j,k));

ye=m*sin(l(i,j,k));

ze=r*sin(o(i,j,k))+h(i,j,k)*sin(w(i,j,k)); %经纬高转换为直角坐标系

xxe(i,j,k)=xe;

yye(i,j,k)=ye;

zze(i,j,k)=ze;

end

end

end

----------------------------------------------------------------------------------------------------------------- %直角坐标系xyz转换为经纬高wlh

function [NEWw,NEWl,NEWh,flag_converge,Nkk]=xyz_change_wlh(xxe,yye,zze,kkmax,eps) if(nargin==3)

eps=1.0e-9; % %缺省误差参数时默认为eps=1.0e-9

kkmax=20; %最大迭代次数

end

R=6378.173*1000;

r=6356.7523142*1000;

f=(R-r)/R;

NEWw=[]; %存放纬度的数组

NEWl=[]; %存放经度的数组

NEWh=[]; %存放高度的数组

flag_converge=[];%存放发散标志的数组

Nkk=[];

for i=1:length(xxe(:,1,1)) %纬度i

for j=1:length(xxe(1,:,1)) %经度j

for k=1:length(xxe(1,1,:)) %高度k

x0=sqrt(xxe(i,j,k)^2+yye(i,j,k)^2);%根据直角坐标系求x0.z0

z0=zze(i,j,k); %step2

A=r*z0; %系数A,在求牛顿迭代算法时使用

B=2*R*x0;

C=2*(R^2-r^2);

if z0==0 %step3 z0=0的情况,

neww=0; %求纬度

newh=x0-R; %求高度

newl=atan2(yye(i,j,k),xxe(i,j,k)); %step10 ,求经度

else

kk=0; %迭代次数初值

t=-(1-f)*(x0/z0)+sign(z0)*sqrt(1+((1-f)*(x0/z0))^2); %step4 ,t0初值

flag=1; %标志位,判断是否收敛

while flag==1

kk=kk+1; %step5 迭代次数加1

ff=A*t^4+(B+C)*t^3+(B-C)*t-A;

df=4*A*t^3+3*(B+C)*t^2+(B-C);

tnew=t-ff/df; %step6 t值的更新

oldt=t; %存储旧的t

t=tnew; %将新的tnew值赋给t

if abs(t-oldt)<=eps %step7,若小于直接到step9

neww=acot((1-f)*(1-t^2)/(2*t)); %step9

newl=atan2(yye(i,j,k),xxe(i,j,k)); %step10

newh=sign(neww)*(z0-r*(2*t)/(1+t^2))*sqrt(1+((1-f)*(1-t^2)/(2*t))^2);%step11

break;

else %否则到step8

if kk>=kkmax %step8,若小于,则到step5(通过标志位不改变来实现)

flag=0; %若大于,则跳出循环

end

end

end

end

NEWw(i,j,k)=neww;

NEWl(i,j,k)=newl;

NEWh(i,j,k)=newh;

flag_converge(i,j,k)=flag;

Nkk(i,j,k)=kk;

end

end

end

NEWw=NEWw*(180/pi); %纬度弧度转换为角度

NEWl=NEWl*(180/pi);%经度弧度转换为角度

最优化实验报告(单纯形法的matlab程序,lingo程序)

实验一:线性规划单纯形算法 一、实验目的 通过实验熟悉单纯形法的原理,掌握Matlab 循环语句的应用,提高编程的能力和技巧。 二、实验用仪器设备、器材或软件环境 Windows Xp 操作系统 ,Matlab6.5,计算机 三、算法 对于一般的标准形式线性规划问题(求极小问题),首先给定一个初始 基本可行解。设初始基为B,然后执行如下步骤: (1).解B Bx b =,求得1 B x B b -=,0,N B B x f c x ==令计算目标函数值 1(1,2,...,)i m B b i -=i 以b 记的第个分量 (2).计算单纯形乘子w , B wB C =,得到1 B w C B -=,对于非基变量,计算判别数 1i i i B i i z c c B p c σ-=-=-,令 max{}k i i i R z c σ∈=-,R 为非基变量集合 若判别数0k σ≤ ,则得到一个最优基本可行解,运算结束;否则,转到下一步 (3).解k k By p =,得到 1 k k y B p -=;若0k y ≤,即k y 的每个分量均非正数,则停止计算,问题不存在有限最优解,否则,进行步骤(4). (4).确定下标r,使 { } :0 min ,0 t r rk tk tk b b tk y y t y y >=>且r B x 为离基变量。 k x 为进基变量,用k p 替换r B p ,得到新的基矩阵B ,返回步骤(1)。 对于极大化问题,可以给出完全类似的步骤,只是确定进基变量的准则不同。对于极大化问题,应令 min{}k k j j z c z c -=-

四、计算框图 是 否 是 否 开始 初始可行解B 令1,0,B N B B x B b b x f c x -==== 计算单纯形乘子1 B w c B -=,计算判别数,i j j wp c j R σ=-∈(非基变量) 令max{,}k j j R σσ=∈ 0?k σ≤ 得到最优解 解方程k k By p =,得到1k k y B p -=。 0?k y ≤ 不存在有限最优解 确定下标r ,是 { }:0 min ,0 t r rk tk tk b b tk y y t y y >=>且 k x 为进基变量,用 k p 替换r B p ,得到新的基矩阵B

基于MATLAB的七参数坐标系统转换问题分析(精)

基于 MATLAB 的七参数法坐标系统转换问题分析 1 张鲜妮 21, ,王磊 21, 1、中国矿业大学环境与测绘学院,江苏徐州 (221008 2、江苏省资源环境信息工程重点实验室,江苏徐州 (221008 E-mail: 摘要:GPS 测量的坐标是基于 WGS-84坐标系下的,而我国实用的测量成果大多都是基于北京 54坐标系下的。随着 GPS 测量技术的广泛使用,由 WGS-84坐标向北京 54坐标系下坐标的转换问题一直是一个可探讨的问题, 坐标系统转换的现有模型很多, 但常用的还是经典的七参数转换模型。随着不断的实践研究, 发现七参数在进行坐标系统转换时有一定的局限性。本文采用 MATLAB 语言编写了七参数法坐标系统转换程序,并对七参数坐标系统转换的若干问题进行了分析讨论。分析结果表明, 小区域范围内用正常高代替大地高对坐标转换精度影响很小; 公共点分布情况对坐标转换精度影响显著; 合适的公共点密度有利于提高坐标转换精度。 关键词:七参数法;坐标系统; MATLAB ;转换问题 1. 引言 随着 GPS 空间定位技术的发展, GPS 技术以其快速、精确、全天候在测量中的应用变的越来越广泛, GPS 成为建立基础控制网的首选手段 ]1[,由于 GPS 系统采用的是 WGS-84坐标系, 是一种地心坐标系, 而我国目前常用的两个坐标系 1954年北京坐标系 (以下称 BJ54 和 1980年国家大地坐标系,是一种参心坐标系,采用克拉所夫斯基椭球为参考椭球,并采用高斯克吕格投影方式进行投影, 我国的国土测量成果和在进行工程施工时大都是基于这两个坐标系下的。所以在利用 GPS 技术进行测量过程中必然存在由 WGS-84坐标向北京 54坐标系下的转换问题。现有的转换模型已经成熟,归纳起来主要有布尔莎 -沃尔夫模型(七参数法、莫洛登斯基 -巴代卡

优化设计方法的发展与应用情况

优化设计方法的发展与应用情况 贾瑞芬张翔 (福建农林大学 机电工程学院, 福建 福州 350002) 摘 要:本文概要地介绍了优化设计方法在国内近年的应用和发展情况,包括传统优化方法、现代优化方法,以及优化软件的应用和发展情况。  关键词:优化 遗传算法 神经网络 MATLAB 优化方法是20世纪60年代随着计算机的应用而迅速发展起来的,较早应用于机械工程等领域的设计。80年代以来,随着国内有关介绍优化设计方法的专著(如《机械优化设计》[1])的出版和计算机应用的普及,优化设计方法在国内的工程界得到了迅速的推广。本文按传统优化方法、现代优化方法、优化软件应用等三个方面,概要地介绍优化设计方法近年来在国内工程界的应用和发展情况。 1. 传统优化方法的应用与改进情况  1.1传统优化方法的应用  从近10年发表的工程优化设计的论文可以看出,罚函数法、复合形法、约束变尺度法、随机方向法、简约梯度法、可行方向法等,都有较为广泛的应用。对重庆维普信息数据库中的工程技术类刊物做检索,1993年至2003年,这6种约束优化方法应用的文献检出率的比例,依次约为12:10:3:1.5:1.5。 以机械设计为例,传统优化方法主要应用于机构和机械零部件的优化设计,主要对零件或机构的性能、形状和结构进行优化。在结构方面,如对升降天线杆的结构优化设计[2],采用内点罚函数法优化,在保证天线杆具有足够的刚度和压弯组合强度的前提下所设计出的结构尺寸比按一般的常规设计方法所计算的尺寸要小,自重更轻。在形状方面,赵新海等[3]对一典型的轴对称H型锻件的毛坯形状进行了优化设计,取得了明显的效果。在性能方面,《凸轮一连杆组合机构的优化设计》[4]一文以最大压力角为最小做为优化目标、并采用坐标轮换法和黄金分割法等优化方法对书本打包机中的推书机构(凸纶—连杆组合机构)进行优化设计,从而使得机构确保运动的平衡性的前提下具有良好的传力性能,使设计结果更加合理。《弹性连杆机构结构和噪声控制一体化设计》[37]一文,利用改进的约束变尺度法,求解基于噪声控制的弹性连杆机构结构控制同步优化问题,同步优化后机构的声辐射性能指标具有明显改善。由以上的例子可以看出,因此,传统优化方法仍然具有不可忽视的作用。  将优化技术与可靠性理论相结合,形成了可靠性优化设计法。按照可靠性优化设计法设计的产品,既能定量地回答产品在运行中的可靠性,又能使产品的功能参数获得优化解,两种方法相辅相成,是一种非常具有工程实用价值的设计方法。如采用惩罚函数内点法求解齿轮传动的可靠性优化设计的数学模型[5],以及运用二阶矩法和约束随机方向法对钢板弹簧进行可靠性优化设计[6]。 1.2传统优化方法的一些改进  目前,随着工程问题的日益扩大,优化要面对的问题的规模和复杂程度在逐渐增大,传统的优化方法解决这些问题时,就显露出了其局限性与缺陷。于是就出现了在分析现有算法的基础上,针对方法的不足或应用问题而作出的改进。  1.2.1对传统优化方法应用于离散变量优化的改进 工程设计问题中,经常遇到设计变量必须符合本行业的设计规范和标谁,只能取为限定的离散值或整数值的情况。若应用连续变量优化方法.得到最优解后再作简单的圆整处理,可能造成设计上的不可行解,或得到一个非最优解。为此适用于变量取离散值的优化方法发展起来。朱浩鹏等[7]提出了改进的动态圆整法、拉格朗日松弛法。 惩罚函数优化方法是一种常用的求解约束非线性问题的方法,但它仅限于求解连续变量的优化问题。

单纯形法matlab

数 学 软 件 与 实 验 数学与信息科学学院 信息与计算科学

单纯形法的Matlab程序如下:function [xx,fm]=myprgmh(m,n,A,b,c) B0=A(:,1:m); cb=c(:,1:m); xx=1:n; sgm=c-cb*B0^-1*A; h=-1; sta=ones(m,1); for i=m+1:n if sgm(i)>0 h=1; end end while h>0 [msg,mk]=max(sgm); for i=1:m sta(i)=b(i)/A(i,mk); end [mst,mr]=min(sta); zy=A(mr,mk); for i=1:m

if i==mr for j=1:n A(i,j)=A(i,j)/zy; end b(i)=b(i)/zy; end end for i=1:m if i~=mr for j=1:n A(i,j)=A(i,j)-A(i,mk)*A(mr,j); end b(i)=b(i)-A(i,mk)*b(mr); end end B1=A(:,1:m); cb(mr)=c(mk); xx(mr)=mk; sgm=c-cb*B1*A; for i=m+1:n if sgm(i)>0 h=1;

end end end fm=c*xx; 例题: 编写下列求解如下线性规划问题的单纯形法函数min f'x s.t ax<=b(其中b>=0) 函数形式function [x,fval,it,op]=singl(f,a,b) 输出中x为最优解 fval为最优值 it为迭代次数 无最优解op=0 有最优解op=1 编写程序如下: function [x,fval,it,op]=singl(f,a,b) [m,n]=size(a); c=[a eye(m) b;f' zeros(1,m+1)]; fval=0; x=zeros(m+n,1); op=1; it=0; e=zeros(1,m); lie=find(f<0); l=length(lie); while(l>0) for j=1:l d=find(c(:,lie(j)));

用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单纯形法

%求解标准型线性规划:max c*x;s.t. A*x=b;x>=0 %本函数中的A是单纯初始表,包括:最后一行是初始的检验数,最后一列是资源向量b %N是初始的基变量的下标 %输出变量sol是最优解 %输出变量val是最优值,kk是迭代次数 function [sol,val,kk]=ssimplex(A,N) [mA,nA]=size(A); kk=0; %迭代次数 flag=1; while flag kk=kk+1; if A(mA,:)<=0 %已找到最优解 flag=0; sol=zeros(1,nA-1);%给每个变量赋初值0 for i=1:mA-1 sol(N(i))=A(i,nA);%给基变量赋新值(替换0) end %给出最优解 val=-A(mA,nA); else for i=1:nA-1 if A(mA,i)>0&A(1:mA-1,i)<=0 %问题有无界解 disp('have infinite solution!'); flag=0; break; end end if flag %还不是最优表,进行转轴运算 temp=0; for i=1:nA-1 if A(mA,i)>temp temp=A(mA,i); inb=i; % 进基变量的下标 end end %选择最大检验数纵向对应的变量为进基变量 sita=zeros(1,mA-1); for i=1:mA-1 if A(i,inb)>0 sita(i)=A(i,nA)/A(i,inb); end end temp=inf; for i=1:mA-1 if sita(i)>0&sita(i)

MATLAB中的abc dq相坐标变换

坐标变换总结 姓名: 日期:2011.11.4

坐标变换的总结 一.由三项坐标系变换到两相旋转坐标系 1.三相到两相静止坐标系的变换首先,确定三相电压的相序: cos() 2cos()34cos()3A m B m c m u U wt u U wt u U wt ππ==- =- 在坐标图上表示三相到两相静止坐标系上的变换,如图所示: 图13-2s 变换 由上图,我们可以将A u 、B u 、c u 转化到两相静止坐标系上,具体等式如下: 211()3222()322A B C B C u u u u u αβ?=--????=-?? 插入系数2、 3是为了保证两相坐标系中合成矢量的模与各相电压的模相同。后面会推导为什么可以保证模不变。 整理成状态方程的形式,如下: 1112223022A B C u u u u u αβ????-- ???????=?????????-??????2.两相静止坐标系到两相旋转坐标系的变换 我们知道,在两相静止坐标系中,合成矢量是旋转的,我们令旋转坐标系的d 轴与旋转矢量重合,则可将其转换到旋转坐标系中。坐标变换如图所示:

图22s-2r 变换 此时,我们可以得到,两相静止坐标系到两相旋转坐标系的公式,其中θ一般取为A 相的相角。 cos sin sin cos d q u u u u αβθθθθ??????=??????-???? ??二.反向变换 1.若需要将旋转坐标系转化到静止坐标系上,只需相应的将d-q 向αβ-投影即 可,根据图二,我们可以得到: cos sin sin cos d q u u u u αβθθθθ????-??=???????????? 2.同理,根据图1,我们可以将αβ-分别投影到A 、B 、C 上,获得其逆变换: 102133221322A B C u u u u u αβ??????????????=-???????????????--???? 三.关于乘以2/3保持模不变的问题首先,我们已经能够确定了电压相序 cos() 2cos()34cos()3A m B m c m u U wt u U wt u U wt ππ==- =-经过变换后: 211()322 A B c u u u u α=--

matlab编程实现二分法,牛顿法,黄金分割法,最速下降matlab程序代码

用二 4224min ()f t t t t =--[,.]t ∈内的极小值点,要求准 1. function [t d]=erfenfa(a,b) k=1; %记录循环次数 while abs(a-b)>0.0005 c=(a+b)/2; C(k)=c; %存储每次循环中点c 的值 if ff(c)<0 a=c; end if ff(c)==0 t1=c; break ; end if ff(c)>0 b=c; end k=k+1; end t=(a+b)/2; %最终符合要求的值 d=f(t); %最优解 C k function y=f(t) y=t^4-2*t^2-4*t; function y=ff(t) y=4*t^3-4*t-4; 运行结果 >> [t d]=erfenfa(1,1.5) C = Columns 1 through 9 1.2500 1.3750 1.3125 1.3438 1.3281 1.3203 1.3242 1.3262 1.3252 Column 10 1.3247 k = 11

t = 1.3250 d = -5.7290 2.黄金分割法 f (x)=x3-2x+1 初始区间[0, 3],收敛精度0.5 function [t,f]=huangjinfenge(a,b) m=1-(sqrt(5)-1)/2; t2=a+m*(b-a) f2=g(t2); t1=a+b-t2 f1=g(t1); while abs(t1-t2)>0.5 if f1 [t,f]=huangjinfenge(0,3) t2 = 1.1459 t1 = 1.8541

单纯形法matlab程序

算法实现与分析 算法1.单纯形法 具体算例: 标准化后: 用单纯形法求解,程序如下: clear clc M=1000000; A=[3,2,-3,1,0;1,-2,1,0,1];%系数矩阵 C=[-3,1,2,M,M,0];%价值矩阵 B=[6;4]; Xt=[4 5]; for i=1:length(C)-1 D=0; for j=1:length(Xt) D=D+A(j,i)*C(Xt(j)); end xi(i)=C(i)-D; end s=[]; for i=1:length(xi) if xi(i)<0 s=[s,i]; end end f=length(s); h=1; while(f) for k=1:length(s) j=1; A x=[]; for i=1:length(Xt) if A(i,s(k))>0 x(j)=i;

j=j+1; end end x if(length(x)+1==1) break; end y=1 x for i=1:length(x) if B(x(i))/A(x(i),s(k))

0.618法的matlab实现

实验报告 实验题目: 0.618法的MATLAB实现学生姓名: 学号: 实验时间: 2013-5-13

一.实验名称: 0.618法求解单峰函数极小点 二.实验目的及要求: 1. 了解并熟悉0.618法的方法原理, 以及它的MATLAB 实现. 2. 运用0.618法解单峰函数的极小点. 三.实验内容: 1. 0.618法方法原理: 定理: 设f 是区间],[b a 上的单峰函数, ] ,[ ,)2()1(b a x x ∈, 且)2()1(x x <. 如果)()()2()1(x f x f >, 则对每一个],[)1(x a x ∈, 有)()()2(x f x f >; 如果)()()2()1(x f x f ≤, 则对每一个] ,[) 2(b x x ∈, 有)()()1(x f x f ≥. 根据上述定理, 只需选择两个试探点, 就可将包含极小点的区间缩短. 事实上, 必有 如果)()()2()1(x f x f >, 则],[)1(b x x ∈; 如果)()() 2()1(x f x f ≤, 则][)2(x a x ,∈. 0.618 法的基本思想是, 根据上述定理, 通过取试探点使包含极小点的区间(不确定区间)不断缩短, 当区间长度小到一定程度时, 区间上各点的函数值均接近极小值, 因此任意一点都可作为极小点的近似. 0.618 法计算试探点的公式: ). (618.0),(382.0k k k k k k k k a b a a b a -+=-+=μλ 2. 0.618法的算法步骤: ①置初始区间],[11b a 及精度要求0>L , 计算试探点1λ和1μ, 计算函数值)(1λf 和)(1μf . 计算公式是 ).(618.0 ),(382.011111111a b a a b a -+=-+=μλ 令1=k . ②若L a b k k <-, 则停止计算. 否则, 当)()(k k f f μλ>时, 转步骤③; 当)()(k k f f μλ≤时, 转步骤④. ③置k k a λ=+1, k k b b =+1, k k μλ=+1,)(618.01111++++-+=k k k k a b a μ, 计算函数值)(1+k f μ, 转步骤⑤.

运用Matlab进行线性规划求解(实例)

线性规划 线性规划是处理线性目标函数和线性约束的一种较为成熟的方法,目前已经广泛应用于军事、经济、工业、农业、教育、商业和社会科学等许多方面。 8.2.1 基本数学原理 线性规划问题的标准形式是: ????? ??????≥=+++=+++=++++++=0,,,min 21221122222121112 121112211n m n mn m m n n n n n n x x x b x a x a x a b x a x a x a b x a x a x a x c x c x c z 或 ???? ?????=≥===∑∑==n j x m i b x a x c z j n j i j ij n j j j ,,2,1,0,,2,1,min 1 1 写成矩阵形式为: ?? ???≥==O X b AX CX z min 线性规划的标准形式要求使目标函数最小化,约束条件取等式,变量b 非负。不符合这几个条件的线性模型可以转化成标准形式。 MATLAB 采用投影法求解线性规划问题,该方法是单纯形法的变种。 8.2.2 有关函数介绍 在MATLAB 工具箱中,可用linprog 函数求解线性规划问题。 linprog 函数的调用格式如下: ●x=linprog(f,A,b):求解问题minf'*x ,约束条件为A*x<=b 。 ●x=linprog(f,A,b,Aeq,beq):求解上面的问题,但增加等式约束,即Aeq*x=beq 。若没有不等式约束,则令A=[ ],b=[ ]。 ●x=linprog(f,A,b,Aeq,beq,lb,ub):定义设计x 的下界lb 和上界ub ,使得x 始终在该范围内。若没有等式约束,令Aeq=[ ],beq=[ ]。 ●x=linprog(f,A,b,Aeq,beq,lb,ub,x0):设置初值为x0。该选项只适用于中型问题,默认时大型算法将忽略初值。 ●x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options):用options 指定的优化参数进行最小化。 ●[x,fval]=linprog(…):返回解x 处的目标函数值fval 。 ●[x,lambda,exitflag]=linprog(…):返回exitflag 值,描述函数计算的退出条件。 ●[x,lambda,exitflag,output]=linprog(…):返回包含优化信息的输出参数output 。 ●[x,fval,exitflag,output,lambda]=linprog(…):将解x 处的拉格朗日乘子返回到lambda 参数中。

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

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

单纯形法MATLAB程序

单纯形法(Matlab 程序) %%单纯形法( Matlab 程序) a=input('input the major matrix A '); b=input('input the matrix b '); n=input('input the judgement '); %%为计数器(确定循环次数) g=0; while g<40 %%确定非负 alength=max(size(n)); blength=max(size(b)); m=0; for i=1:alength if n(i)>=0 m=m+1; end end; if m==alength x=b; break end; %%找 K s=min(n); for i=1:alength if n(i)==s k=i; break end; end; %%a[i,k] 的非负性 m=0; for i=1:blength if a(i,k)<0 m=m+1; end; end; if m==blength

disp('x does not exit'); judge=1; break end; %%找 L 确定主元 cc=100000; for i=1:blength if a(i,k)>0 if (b(i)/a(i,k))< cc cc=b(i)/a(i,k); end end end; for i=1:blength if a(i,k)~=0 if (b(i)/a(i,k))==cc l=i; break end end end; %%计算 ,a 标准化 zu=a(l,k); aa=a; for i=1:l-1 for j=1:alength aa(i,j)=a(i,j)- a(l,j)*a(i,k)/a(l,k); end end; for i=l+1:blength for j=1:alength aa(i,j)=a(i,j)- a(l,j)*a(i,k)/a(l,k); end end; for j=1:alength aa(l,j)=a(l,j)/zu; end; %%b勺判别 bb=b; bb(l)=b(l)/zu; for i=1:l-1 bb(i)=b(i)- b(l)*a(i,k)/a(l,k); end; for i=l+1:blength bb(i)=b(i)- b(l)*a(i,k)/a(l,k); end; b=bb; %%确定判别数

多目标线性规划的若干解法及MATLAB实现

多目标线性规划的若干解法及MATLAB 实现 一.多目标线性规划模型 多目标线性规划有着两个和两个以上的目标函数,且目标函数和约束条件全是线性函 数,其数学模型表示为: 11111221221122221122max n n n n r r r rn n z c x c x c x z c x c x c x z c x c x c x =+++??=+++?? ??=+++? (1) 约束条件为: 1111221121122222112212,,,0 n n n n m m mn n m n a x a x a x b a x a x a x b a x a x a x b x x x +++≤??+++≤?? ??+++≤?≥?? (2) 若(1)式中只有一个1122i i i in n z c x c x c x =+++ ,则该问题为典型的单目标线性规划。我们记:()ij m n A a ?=,()ij r n C c ?=,12(,,,)T m b b b b = ,12(,,,)T n x x x x = , 12(,,,)T r Z Z Z Z = . 则上述多目标线性规划可用矩阵形式表示为: max Z Cx = 约束条件:0 Ax b x ≤?? ≥? (3) 二.MATLAB 优化工具箱常用函数[3] 在MA TLAB 软件中,有几个专门求解最优化问题的函数,如求线性规划问题的linprog 、求有约束非线性函数的fmincon 、求最大最小化问题的fminimax 、求多目标达到问题的fgoalattain 等,它们的调用形式分别为: ①.[x,fval]=linprog(f,A,b,Aeq,beq,lb,ub) f 为目标函数系数,A,b 为不等式约束的系数, Aeq,beq 为等式约束系数, lb,ub 为x 的下 限和上限, fval 求解的x 所对应的值。 算法原理:单纯形法的改进方法投影法 ②.[x,fval ]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub ) fun 为目标函数的M 函数, x0为初值,A,b 为不等式约束的系数, Aeq,beq 为等式约束

基于matlab的坐标正反算

测量程序设计实验报告 实验名称:坐标正反算

实验三坐标正反算 一、实验目的 编写坐标正反算程序,并对格式化文件数据进行计算,验证程序。 二、实验内容 1、编写坐标正算程序 1)建立以xy_direct命名的函数,函数输入输出格式为 [x2,y2] = xy_direct(x1,y1,distance, azimuth) 度转度分秒: >> function dms= degree2dms(jiaodu) >>degree = fix(jiaodu); >>mimute = fix((jiaodu-degree)*60); >>second = ((jiaodu-degree)*60-mimute)*60; >>dms = degree+mimute/100+second/10000; 度分秒转度: >> function degree = dms2degree(jiaodu) >>degree = fix(jiaodu); >> mimute = fix((jiaodu-degree)*100); >>second = (jiaodu-degree-mimute/100)*10000; >>degree = degree+mimute/60+second/3600; 弧度转度: >> function dms=rad2dms(rad) >> rad=abs(rad); >>jiaodu=rad*180.0/pi; >> % l=fix(a) >> % b=(a-l)*60.0 >> % m=fix(b) >> % a=l+m/100.0+(b-m)*0.006

坐标轮换法matlab程序

现代设计方法及其应用matlab程序作业() 源程序: %坐标轮换法 clear e=input('输入精度要求e:'); X=input('输入初始点:'); syms t s a=10*X(1,1)^2+106*X(2,1)^2+10*X(1,1)*X(2,1)+96*X(1,1)+100*X(2,1); k=1; e1=[1;0]; e2=[0;1]; A=X; %A矩阵用于存储每一轮变换所得解 C=X+t*e1; %沿e1方向搜索 x1=C(1,1); x2=C(2,1); df=diff(10*x1^2+106*x2^2+10*x1*x2+96*x1+100*x2); t=solve(df); X=X+t*e1; C=X+s*e2; %沿e2方向搜索 x1=C(1,1); x2=C(2,1); df=diff(10*x1^2+106*x2^2+10*x1*x2+96*x1+100*x2); s=solve(df); X=X+s*e2; A=[A X]; b=10*X(1,1)^2+106*X(2,1)^2+10*X(1,1)*X(2,1)+96*X(1,1)+100*X(2,1); a=[a b]; B=A(:,k+1)-A(:,k); while double(sqrt(B(1,1)^2+B(2,1)^2))>e syms t s C=X+t*e1; %沿e1方向搜索 x1=C(1,1); x2=C(2,1); df=diff(10*x1^2+106*x2^2+10*x1*x2+96*x1+100*x2); t=solve(df); X=X+t*e1; C=X+s*e2; %沿e2方向搜索 x1=C(1,1); x2=C(2,1); df=diff(10*x1^2+106*x2^2+10*x1*x2+96*x1+100*x2); s=solve(df); X=X+s*e2; A=[A X]; b=10*X(1,1)^2+106*X(2,1)^2+10*X(1,1)*X(2,1)+96*X(1,1)+100*X(2,1); a=[a b];

实验二:MATLAB编程单纯形法求解

北京联合大学 实验报告 项目名称:运筹学专题实验报告 学院:自动化专业:物流工程 班级: 1201B 学号:2012100358081 姓名:管水城成绩: 2015 年 5 月 6 日

实验二:MATLAB 编程单纯形法求解 一、实验目的: (1)使学生在程序设计方面得到进一步的训练;,掌握Matlab (C 或VB)语言进行程序设计中一些常用方法。 (2)使学生对线性规划的单纯形法有更深的理解. 二、实验用仪器设备、器材或软件环境 计算机, Matlab R2006 三、算法步骤、计算框图、计算程序等 本实验主要编写如下线性规划问题的计算程序: ?? ?≥≥≤0 ,0..min b x b Ax t s cx 其中初始可行基为松弛变量对应的列组成. 对于一般标准线性规划问题: ?? ?≥≥=0 ,0..min b x b Ax t s cx 1.求解上述一般标准线性规划的单纯形算法(修正)步骤如下: 对于一般的标准形式线性规划问题(求极小问题),首先给定一个初始基本可行解。设初始基为B,然后执行如下步骤: (1).解B Bx b =,求得 1 B x B b -=,0,N B B x f c x ==令计算目标函数值 1(1,2,...,)i m B b i -=i 以b 记的第个分量 (2).计算单纯形乘子w, B wB C =,得到1 B w C B -=,对于非基变量,计算判别 数1i i i B i i z c c B p c σ-=-=-,可直接计算 σ =1 B A c c B --令 max{}k i R σσ∈=,R 为非基变量集合 若判别数0k σ≤ ,则得到一个最优基本可行解,运算结束;否则,转到下一 步 (3).解k k By p =,得到 1 k k y B p -=;若0k y ≤,即k y 的每个分量均非正数, 则停止计算,问题不存在有限最优解,否则,进行步骤(4).确定下标r,使 { }:0 min ,0 t r rk tk tk b b tk y y t y y >=>且r B x 为离基变量, ,r k B x p k 为进基变量,用p 替换得到新的基矩阵B,还回步骤(1) ;

Matlab_Simulink中Clark变换和Park变换的深度总结

Matlab_Simulink 中Clark 变换和Park 变换的深度总结 最近搞三相并网逆变系统,对这个坐标变换产生了很多疑惑。调模型,排错,最后发现坐标变换这个地方出来的波形总是和我设想的不一样。以前认为坐标变换都是死的,带公式即可,经过这几天的研究,发现这里面真的有些方法。基于MATLAB/Simulink 中的模块,我也发现了Simulink 中和一些书上不一样的地方。而且现在这个坐标变换每本书上的表示方法都不一样,甚至字母都有好多种。下面我想基于MATLAB/Simulink 深刻的总结一下三相交流控制系统常用的两个变换Clark (3-2)变换和Park (2-2)变换。 首先来搞清楚为什么要用这两个变换,在三相交流系统中,常用的控制器还是经典的PI 调节器。PI 调节器可以对直流量进行无净差的调节,而交流量就不行,所以需要将三相交流分量转化为两项直流分量加以控制。 接下来看看Clark 变换(3-2)原理。由于三相分量幅值相等,相位相差120,角速度相等,因此三相分量存在信息冗余,这时,可以去掉一项将其化为两相,这就是Clark 变换的作用。由于两项分量所在的坐标轴是静止的,所以我们把此坐标轴称为两相静止坐标系。也就是说平面上的原来基于三相静止坐标系的矢量,可以切换到两相静止坐标系表示。变换的原则是投影原则+等幅值等效原则(DPC 时用功率等效原则)。 令A 与alfa 轴重合,按照变换原则,计算投影ABC 分量在alfa 、beta 上的投影,按照 等复制变换原则导出变换矩阵方程如下。 11122230A B C αβ????-- ????? =???? ???? ??? Simulink 中的3/2变换也是基于此变换进行的。但是,在电气工程中为大家熟知的三相正序的相序是,A 为0,B 为-120,C 为120(也可以是-240).如果按照图中所标注的方向进行坐标变换,那一定要将相序变为负序,也就是说A 为0,B 为120,C 为-120. 如果坚持用传统正序,那么再按上式变换之后的坐标进行变换的话,beta 轴就反向了。也就是说,采用A 为0,B 为-120,C 为120的相序,利用上面的变换方程进行变换的结果是,beta 滞后alfa 90°.

用MATLAB实现共轭梯度法求解实例(精编文档).doc

【最新整理,下载后即可编辑】 用MATLAB 实现共轭梯度法求解实例 康福 201103710031 一.无约束优化方法 1.1 无约束优化方法的必要性 一般机械优化设计问题,都是在一定的限制条件下追求某一指标为最小,它们都属于约束优化问题。但是为什么要研究无约束优化问题? (1)有些实际问题,其数学模型本身就是一个无约束优化问题。 (2)通过熟悉它的解法可以为研究约束优化问题打下良好的基础。 (3)约束优化问题的求解可以通过一系列无约束优化方法来达 到。所以无约束优化问题的解法是优化设计方法的基本组成部分,也是优化方法的基础。 (4)对于多维无约束问题来说,古典极值理论中令一阶导数为零, 但要求二阶可微,且要判断海赛矩阵为正定才能求得极小点,这种方法有理论意义,但无实用价值。和一维问题一样,若多元函数F(X)不可微,亦无法求解。但古典极值理论是无约束优化方法发展的基础。 1.2共轭梯度法 目前已研究出很多种无约束优化方法,它们的主要不同点在于构造搜索方向上的差别。 (1)间接法——要使用导数,如梯度法、(阻尼)牛顿法、变尺 度法、共轭梯度法等。 (2)直接法——不使用导数信息,如坐标轮换法、鲍威尔法单纯形法等。 用直接法寻找极小点时,不必求函数的导数,只要计算目标函数值。这类方法较适用于解决变量个数较少的(n ≤20)问题,一般情况下比间接法效率低。间接法除要计算目标函数值外,还要计算目标函数的梯度,有的还要计算其海赛矩阵。 1(0,1,2,)k k k k s k α+=+=x x

搜索方向的构成问题乃是无约束优化方法的关键。 共轭梯度法是沿着共轭方向进行搜索,属于共轭方向法中的一种,该方法中每一个共轭向量都是依赖于迭代点处的负梯度而构造出来。共轭梯度法作为一种实用的迭代法,它主要有下面的优点: (1)算法中,系数矩阵A的作用仅仅是用来由已知向量P产生向量W=AP,这不仅可充分利用A的稀疏性,而且对某些提供 矩阵A较为困难而由已知向量P产生向量W=AP又十分方便 的应用问题是很有益的。 (2)不需要预先估计任何参数就可以计算,这一点不像SOR等;(3)每次迭代所需的计算,主要是向量之间的运算,便于并行化。 共轭梯度法原理的知识较多,请详见《机械优化设计》第四章的第四、五节。 图1为共轭梯度法的程度框图

相关主题