急求运筹学单纯型法的matlab程序代码!!

急求运筹学单纯型法的matlab程序代码!!,第1张

来自搜索

function [opt_X,opt_S]=Simplexe2(fhandle,X_0,n,lambda,mu,h,epsiro,K)

%:单纯形加速法(教学版)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 参考文献:

% 林明芳,张宝生等.汽车优化设计.吉林科学技术出版社,1991.P61-67

% Write By coldstar@126com 20059

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Input:

% -fhandle 函数句柄

% -X_0 n维初始列向量

% -n 维数

% -lambda 步长压缩系数!=05 (0 1)

% -mu 步长加大系数>1

% -h 单纯形边长

% -epsiro 精度

% -K 最大寻优次数

% Output:

% -opt_X 最优值点

% -opt_S 最优值

% Example:

% >>f3=inline('60-10x(1)-4x(2)+x(1)^2+x(2)^2-x(1)x(2)');

% >>Simplexe2(f3,[0;0],2,0618,2,2,0001,20)

% >>fminsearch(f3,[0;0])

SearchTime=1;

%:初始单纯形

X=repmat(X_0,1,n)+heye(n);

X=[X_0,X];

%:初始化S,单纯形各点处函数值

S=inf(1,n);

for i=1:n+1

S(i)=Getfval(fhandle,X(:,i));

end

%:初始化SH,SG,SL,(最差点,次差点,最好点)

[SH,SG,SL,iXH,iXG,iXL]=GetShgl(S);

%:单纯性搜索寻优

while abs(SH-SL)>=epsiroabs(SL) %按精度收敛

%:寻找反射线上最优点XS,SS

XR=GetXR(X,X(:,iXH));

SR=Getfval(fhandle,XR);

if SR>=SG%:步长压缩

XS=(1-lambda)X(:,iXH)+lambdaXR;

SS=Getfval(fhandle,XS);

if SS>=SG %:单纯形收缩

for i=1:n+1

X(:,i)=(X(:,iXL)+X(:,i))/2;

end

end

elseif ((1-mu)SH+muSR)<SL %:步长加大

XE=(1-mu)X(:,iXH)+muXR;

SE=Getfval(fhandle,XE);

if SE<SR

XS=XE; SS=SE;

else

XS=XR; SS=SR;

end

else

XS=XR; SS=SR;

end

%:以寻优点XS替代最坏点XH,构成新单纯形

X(:,iXH)=XS; S(iXH)=SS;

%:重置XH,XG,XL,

[SH,SG,SL,iXH,iXG,iXL]=GetShgl(S);

%:迭代计数

SearchTime=SearchTime+1;

if SearchTime>K break; end %超过最大次数

end

%:返回并显示寻优结果

opt_X=X(:,iXL);opt_S=SL;

fprintf(1,'单纯形法 经%d次搜索:\n',SearchTime);

disp('最优点为'); disp(opt_X);

disp('最优点处目标函数值为'); disp(opt_S);

%-------------------------------

function fval=Getfval(fhandle,X)

%:求多维函数值

fval=feval(fhandle,X');

%-------------------------------

function [SH,SG,SL,iXH,iXG,iXL]=GetShgl(S)

%:求目标函数最大值SH,次大值SG,最小值SL,及其X对应列的位置

[SH,iXH]=max(S);

[SL,iXL]=min(S);

S(:,iXH)=[];

[SG,iXG]=max(S);

if iXH<=iXG

iXG=iXG+1;

end

%-------------------------------

function XR=GetXR(X,XH)

%:计算反射点

n=length(XH);

XR=zeros(n,1);

for i=1:n+1

XR=XR+X(:,i);

end

XR=2(XR-XH)/n-XH;

迭代法 matlab实现代码如下

function [x,n] = jacobi(A,b,x0,eps,varargin)

if nargin ==3

eps = 10e-6;

M = 200;

elseif nargin<3

disp('输入参数数目不足3个');

return

elseif nargin ==5

M = varargin{1};

end

D = diag(diag(A));          %%求A的对角矩阵

L = -tril(A,-1);                 %%求A的下三角矩阵

U = -triu(A,1);                %%求A的上三角矩阵

B = D\(L+U);

f = D\b;

x = Bx0+f;

n = 1;%迭代次数

while norm(x-x0)>=eps

x0 = x;

x = Bx0+f

n = n+1;

if(n>=M)

disp('Warning:迭代次数太多,可能不收敛!')

return;

end

end

运行效果如下:

扩展资料:

迭代法的收敛性判别

收敛性判别条件

SOR迭代法收敛的充分必要条件是ρ(λω)<1,ρ(λω)与松弛因子ω有关。ρ(λω)与ω的关系以及SOR方法收敛的条件有如下定理。

定理1:(Kahan)对任意的A

,设其对角元皆非零,则对所有实数ω,有:ρ(λω)≥ ω-1。

推论:如果解Ax=b的SOR方法收敛,则有ω-1<1,即0<ω<2。

定理2:(Ostrowski-Reich)设A

,A对称正定,且0<ω<2,则解Ax=b的SOR方法收敛。

参考资料来源:百度百科-逐次超松驰迭代法

求解线性规划问题,matlab里统一使用linprog函数,其用法是

x = linprog(f,A,b,Aeq,beq,lb,ub)

并且是用来求解最小值的,所以目标函数改为最小值。

这里参数

f=[-40;-30;-10]

A=[9 7 10;06 15 1;06 15 -1]

b = [10; 32; 5]

lb = zeros(3,1)

[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb);

=======================

运行结果

x =

11111

00000

00000

1、下图是需要求解的线性方程组。

2、打开MATLAB,利用左除法(\)求解上述线性方程组。输入如下代码:close all; clear all; clc% MATLAB左除法(\)求解线性方程组,A = [1 2 3;-1 3 7;9 0 3];b = [1 4 7]';x = A\b。

3、保存和运行上述代码,利用左除法(\)得到线性方程组的解。

4、用求逆法(inv)求解线性方程组,输入如下代码:close all; clear all; clc,% MATLAB求逆法(inv)求解线性方程组,% A是线性方程组等号左边系数构成的矩阵。

5、保存和运行上述代码,利用求逆法(inv)得到线性方程组的解如下。

6、最后,可以看到左除法(\)和求逆法(inv)求得的线性方程组解是一样的。

function newton(x0,e,N)

%输入xo为估计的迭代初值,e为规定的误差,N为最大迭代次数

%输出x,y为最后迭代的两个近似根,k为迭代次数

clc

format long;

disp('迭代次数 近似根')

k=0;

x1=0;

x2=x0;

while (abs(x2-x1))>e

x1=x2;

x2=x1-f(x1)/df(x1);

k=k+1;

if k>N

return;

end

%%%%%%记录并输出%%%%%%%%%

o1=sprintf('%3d',k);

o2=sprintf('%38f',x2);

OL=[o1,' ' o2];

disp(OL);

y(k)=x2;

end

%%%%画图%%%%%%%

i=1:k;

figure(2)

plot(i,y,'rD-')

grid on

xlabel('迭代次数')

ylabel('近似根')

title(['牛顿法求出的该方程的近似根 x^=', num2str(x2,9)])

function y=f(x)

y=x^2/2-sin(x)-1;

function y=df(x)

y=x-cos(x);

以上就是关于急求运筹学单纯型法的matlab程序代码!!全部的内容,包括:急求运筹学单纯型法的matlab程序代码!!、SOR迭代法 求MATLAB程序、matlab单纯形法求解线性规划 用MATLAB 编个程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10115259.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存