单纯形法matlab程序

时间:2019-05-13 22:33:27下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《单纯形法matlab程序》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《单纯形法matlab程序》。

第一篇:单纯形法matlab程序

算法实现与分析

算法1.单纯形法 具体算例:

minz=−3x1+x2+2x3 3x1+2x2−3x3=6 x1−2x2+x3+x5=4

x1,x2,x3≥0标准化后:

min z=−3x1+x2+2x3+Mx4+Mx5

3x1+2x2−3x3+x4=6 x1−2x2+x3+x5=4

x1,x2,x3,x4,x5≥0用单纯形法求解,程序如下: 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))

end end y=x(y);end

y1=Xt(y);%»»³ö±äÁ¿ s k

aa=A(y,s(k))%s(k)Ϊ»»Èë±äÁ¿ A(y,:)=A(y,:)./aa;B(y,:)=B(y,:)./aa;z=[];

for i=1:length(Xt)z=[z,i];end

z z(y)=[];z Xt

for i=1:length(z);yz=-A(z(i),s(k))

A(z(i),:)=A(z(i),:)+A(y,:).*yz B(z(i))B(y)yz

B(z(i))=B(z(i))+B(y).*yz end

for i=1:length(Xt)

if Xt(i)==y1 Xt(i)=s(k);break

end end Xt

disp('ת»»ºó')A=A B=B AB=[A,B];

for i=1:length(C)D=0;

for j=1:length(Xt)D=D+AB(j,i)*C(Xt(j));

end

xi(i)=C(i)-D;

end xi s=[];

for i=1:length(xi)-1

if xi(i)<0 s=[s,i];

end

end s

vpa([A,B;C]);f=length(s);h=h+1;

if h==5

break

end end

-xi(length(xi))

第二篇:改进单纯形法matlab程序

clear clc

X=[1 2 3 4 5];A=[ 1 2 1 0 0;4 0 0 1 0;0 4 0 0 1];C=[2 3 0 0 0 ];b=[8;16;12];t=[3 4 5];B0=A(:,t);while 1

CB0=C(:,t);XN01=X;

for i=1:length(t);

for j=1:length(X);

if XN01(j)==t(i)

XN01(j)=0;

end

end

end j=1;

for i=1:length(X);

if XN01(i)~=0

XN0(j)=XN01(i);

j=j+1;

end

end

for j=1:length(XN0);

CN0(j)=C(XN0(j));

end N0=[];

for i=1:length(XN0);

N0=[N0,A(:,XN0(i))];

end

xiN0=CN0-CB0*B0*N0;j=1;z=[];

for i=1:length(xiN0)

if xiN0(i)>0

z(j)=i;

j=j+1;

end

end

if length(z)+1==1;

break;

end n=1;

for i=1:length(z)

if z(i)>z(n)

n=i;

end

end

k=XN0(z(n));%换入变量 B=B0*b;

P=B0*A(:,k);j=1;

for i=1:length(P)

if P(i)>0

x(j)=i;

j=j+1;

end

end y=1;

for i=1:length(x)

if B(x(y))/P(x(y))>B(x(i))/P(x(i))

y=i;

end

end

y1=x(y);

y=t(y1);%换出变量

for i=1:length(t)

if t(i)==y

m=i;

break;

end

end

t(m)=k;

P2=B0*A(:,k);q=P2(y1);P2(y1)=-1;P2=-P2./q;

E=[1 0 0;0 1 0;0 0 1];E(:,m)=P2;B0=E*B0;end

CB0*B0*b

第三篇:运筹学单纯形法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;

第四篇:线性规划单纯形法matlab解法

线性规划单纯形法matlab解法

%单纯形法matlab程序-ssimplex % 求解标准型线性规划:max c*x;s.t.A*x=b;x>=0 % 本函数中的A是单纯初始表,包括:最后一行是初始的检验数,最后一列是资源向量b % N是初始的基变量的下标

% 输出变量sol是最优解, 其中松弛变量(或剩余变量)可能不为0 % 输出变量val是最优目标值,kk是迭代次数 % 例:max 2*x1+3*x2 % s.t.x1+2*x2<=8 % 4*x1<=16 % 4*x2<=12 % x1,x2>=0 % 加入松驰变量,化为标准型,得到 % A=[1 2 1 0 0 8;% 4 0 0 1 0 16;% 0 4 0 0 1 12;% 2 3 0 0 0 0];% N=[3 4 5];% [sol,val,kk]=ssimplex(A,N)% 然后执行 [sol,val,kk]=ssimplex(A,N)就可以了。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);for i=1:mA-1 sol(N(i))=A(i,nA);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)

A(outb,:)=A(outb,:)/A(outb,inb);for i=1:mA if i~=outb A(i,:)=A(i,:)-A(outb,:)*A(i,inb);End End End End end

第五篇:MATLAB程序总结

%******************************读取数据************************************* MATLAB读取数据

Xlsread(‘lujing’,’mingcheng’)%******************************输出数据************************************* MATLAB输出Excel数据

Xlswrite(‘eular.xla’,[A],’sheet 1’)%******************************三维曲面************************************* 三维曲面

x1=[0.05 0.05 0.05 0.1 0.05 0.1 0.2 0 0 0 0 0 0 0 0];x2=[0.1 0.25 0.12 0.12 0 0 0 0 0.05 0.08 0.1 0.12 0.15 0.2 0.25];y1=[153 130 146 133 160 154 140 133 165 169 171 186 175 156 152];y2=[7.22 5.57 6.66 6 6.6 8.21 5.1 4.66 7.58 8.26 8.99 8.73 7.71 7 6.49];y3=[112 100 131 88 80 72 72 80 116 83 80 80 64 68 74];scatter3(x1,x2,y2)figure [X,Y,Z]=griddata(x1,x2,y2,linspace(min(x1),max(x1))',linspace(min(x2),max(x2)),'v4');%插值 pcolor(X,Y,Z);shading interp%伪彩色图 figure,contourf(X,Y,Z)%等高线图 figure,surf(X,Y,Z);%三维曲面

%******************************各种距离************************************* pdist(X)— 样本X中各n维向量的欧氏距离 pdist(X, 'cityblock')— 各n维向量的绝对距离 pdist(X, ‘minkowski',r)— 闵可夫斯基距离 pdist(X, 'mahal')— 各n维向量的马氏距离 mean(A)— A中各列向量的均值

Var(A)— A中各列向量的方差

Std(A)— A中各列向量的标准差

Cov(A)— A中各列向量的协方差矩阵 Corrcoef(A)— A中各列向量的相关矩阵 命令:[x,fval] = fminbnd(F,a,b)%******************************泰勒公式************************************* 计算F在a,b之间取极小值时的x与y(即fval).格式:taylor(F,a)功能:F在x=a处的泰勒级数前5项 格式:taylor(F,v)功能:F对变量v的泰勒展式前5项

格式:taylor(F,v,n)功能:求F的n 阶泰勒展式,且

(n缺省时默认为 5)

%******************************一维插值************************************* x=[-2*pi:0.5*pi:2*pi];y=cos(x);xi=-2*pi:0.3*pi:2*pi;y_nearest=interp1(x,y, xi,‘nearest’)%最近邻插值 y_linear= interp1(x,y,xi)%双线性差值

y_spline= interp1(x,y,xi, ‘spline’)%三次样条插值 y_cubic= interp1(x,y,xi, ‘cubic’)%双三次插值

plot(x,y,'o',xi,y_nearest,'-',xi,y_linear, 'r* ', xi,y_spline,'k:',xi,y_cubic,'k-');legend('original data','nearest','linear','spline','cubic')%******************************曲线拟合************************************* x1=[2:16];y1=[6.42,8.2,9.58,9.5,9.7,10,9.93,9.99,10.49,10.59,10.6,10.8,10.6,10.9,10.76];b01=[0.1435,0.084];

%初始参数值

fun1=inline('x./(b(1)+b(2)*x)','b','x');% 定义函数 [b1,r1,j1]=nlinfit(x1,y1,fun1,b01);y=x1./(0.1152+0.0845*x1);%根据b1写出具体函数

plot(x1,y1,'*',x1,y,'-or');R2=1-sum((y-y1).^2)/sum((y1-mean(y1)).^2)%*****************************残差与置信区间******************************** X=[ones(30,1), x1‘,x2’,x3‘];

%输入自变量(注意1与自变量组成的矩阵)[b,bint,r,rint,s]=regress(y',X);%多元线性回归 b,bint,s rcoplot(r,rint)%残差及其置信区间作图

a=[1,3:9,11:30];X1=X(a,:);y1=y(a);%剔除异常点

[b1,bint1,r1,rint1,s1]=regress(y1',X1);b1,bint1,s1 %再次线性回归 rcoplot(r1,rint1)

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

Copula理论及其在matlab中的实现程序应用实例 %------------

%******************************读取数据************************************* % 从文件hushi.xls中读取数据 hushi = xlsread('hushi.xls');% 提取矩阵hushi的第5列数据,即沪市的日收益率数据 X = hushi(:,5);% 从文件shenshi.xls中读取数据 shenshi = xlsread('shenshi.xls');% 提取矩阵shenshi的第5列数据,即深市的日收益率数据 Y = shenshi(:,5);

%****************************绘制频率直方图*********************************

% 调用ecdf函数和ecdfhist函数绘制沪、深两市日收益率的频率直方图 [fx, xc] = ecdf(X);figure;ecdfhist(fx, xc, 30);xlabel('沪市日收益率');% 为X轴加标签 ylabel('f(x)');% 为Y轴加标签 [fy, yc] = ecdf(Y);figure;ecdfhist(fy, yc, 30);xlabel('深市日收益率');% 为X轴加标签 ylabel('f(y)');% 为Y轴加标签

%****************************计算偏度和峰度********************************* % 计算X和Y的偏度 xs = skewness(X)ys = skewness(Y)

% 计算X和Y的峰度 kx = kurtosis(X)ky = kurtosis(Y)

%******************************正态性检验*********************************** % 分别调用jbtest、kstest和lillietest函数对X进行正态性检验 [h,p] = jbtest(X)% Jarque-Bera检验

[h,p] = kstest(X,[X,normcdf(X,mean(X),std(X))])% Kolmogorov-Smirnov检验 [h, p] = lillietest(X)% Lilliefors检验

% 分别调用jbtest、kstest和lillietest函数对Y进行正态性检验 [h,p] = jbtest(Y)% Jarque-Bera检验

[h,p] = kstest(Y,[Y,normcdf(Y,mean(Y),std(Y))])% Kolmogorov-Smirnov检验 [h, p] = lillietest(Y)% Lilliefors检验

%****************************求经验分布函数值******************************* % 调用ecdf函数求X和Y的经验分布函数 [fx, Xsort] = ecdf(X);[fy, Ysort] = ecdf(Y);% 调用spline函数,利用样条插值法求原始样本点处的经验分布函数值 U1 = spline(Xsort(2:end),fx(2:end),X);V1 = spline(Ysort(2:end),fy(2:end),Y);

% 调用ecdf函数求X和Y的经验分布函数 [fx, Xsort] = ecdf(X);[fy, Ysort] = ecdf(Y);% 提取fx和fy的第2个至最后一个元素,即排序后样本点处的经验分布函数值 fx = fx(2:end);fy = fy(2:end);

% 通过排序和反排序恢复原始样本点处的经验分布函数值U1和V1 [Xsort,id] = sort(X);[idsort,id] = sort(id);U1 = fx(id);[Ysort,id] = sort(Y);[idsort,id] = sort(id);V1 = fy(id);

%*******************************核分布估计********************************** % 调用ksdensity函数分别计算原始样本X和Y处的核分布估计值 U2 = ksdensity(X,X,'function','cdf');V2 = ksdensity(Y,Y,'function','cdf');

% **********************绘制经验分布函数图和核分布估计图********************** [Xsort,id] = sort(X);% 为了作图的需要,对X进行排序 figure;% 新建一个图形窗口

plot(Xsort,U1(id),'c','LineWidth',5);% 绘制沪市日收益率的经验分布函数图 hold on plot(Xsort,U2(id),'k-.','LineWidth',2);% 绘制沪市日收益率的核分布估计图 legend('经验分布函数','核分布估计', 'Location','NorthWest');% 加标注框 xlabel('沪市日收益率');% 为X轴加标签 ylabel('F(x)');% 为Y轴加标签

[Ysort,id] = sort(Y);% 为了作图的需要,对Y进行排序 figure;% 新建一个图形窗口

plot(Ysort,V1(id),'c','LineWidth',5);% 绘制深市日收益率的经验分布函数图 hold on plot(Ysort,V2(id),'k-.','LineWidth',2);% 绘制深市日收益率的核分布估计图 legend('经验分布函数','核分布估计', 'Location','NorthWest');% 加标注框 xlabel('深市日收益率');% 为X轴加标签 ylabel('F(x)');% 为Y轴加标签

%****************************绘制二元频数直方图***************************** % 调用ksdensity函数分别计算原始样本X和Y处的核分布估计值 U = ksdensity(X,X,'function','cdf');V = ksdensity(Y,Y,'function','cdf');figure;% 新建一个图形窗口

% 绘制边缘分布的二元频数直方图,hist3([U(:)V(:)],[30,30])xlabel('U(沪市)');% 为X轴加标签 ylabel('V(深市)');% 为Y轴加标签 zlabel('频数');% 为z轴加标签

%****************************绘制二元频率直方图***************************** figure;% 新建一个图形窗口

% 绘制边缘分布的二元频数直方图,hist3([U(:)V(:)],[30,30])h = get(gca, 'Children');% 获取频数直方图的句柄值 cuv = get(h, 'ZData');% 获取频数直方图的Z轴坐标

set(h,'ZData',cuv*30*30/length(X));% 对频数直方图的Z轴坐标作变换 xlabel('U(沪市)');% 为X轴加标签 ylabel('V(深市)');% 为Y轴加标签 zlabel('c(u,v)');% 为z轴加标签

%***********************求Copula中参数的估计值****************************** % 调用copulafit函数估计二元正态Copula中的线性相关参数 rho_norm = copulafit('Gaussian',[U(:), V(:)])% 调用copulafit函数估计二元t-Copula中的线性相关参数和自由度 [rho_t,nuhat,nuci] = copulafit('t',[U(:), V(:)])

%********************绘制Copula的密度函数和分布函数图************************ [Udata,Vdata] = meshgrid(linspace(0,1,31));% 为绘图需要,产生新的网格数据 % 调用copulapdf函数计算网格点上的二元正态Copula密度函数值 Cpdf_norm = copulapdf('Gaussian',[Udata(:), Vdata(:)],rho_norm);% 调用copulacdf函数计算网格点上的二元正态Copula分布函数值 Ccdf_norm = copulacdf('Gaussian',[Udata(:), Vdata(:)],rho_norm);% 调用copulapdf函数计算网格点上的二元t-Copula密度函数值 Cpdf_t = copulapdf('t',[Udata(:), Vdata(:)],rho_t,nuhat);% 调用copulacdf函数计算网格点上的二元t-Copula分布函数值 Ccdf_t = copulacdf('t',[Udata(:), Vdata(:)],rho_t,nuhat);% 绘制二元正态Copula的密度函数和分布函数图 figure;% 新建图形窗口

surf(Udata,Vdata,reshape(Cpdf_norm,size(Udata)));% 绘制二元正态Copula密度函数图 xlabel('U');% 为X轴加标签 ylabel('V');% 为Y轴加标签 zlabel('c(u,v)');% 为z轴加标签 figure;% 新建图形窗口

surf(Udata,Vdata,reshape(Ccdf_norm,size(Udata)));% 绘制二元正态Copula分布函数图 xlabel('U');% 为X轴加标签 ylabel('V');% 为Y轴加标签 zlabel('C(u,v)');% 为z轴加标签

% 绘制二元t-Copula的密度函数和分布函数图 figure;% 新建图形窗口

surf(Udata,Vdata,reshape(Cpdf_t,size(Udata)));% 绘制二元t-Copula密度函数图 xlabel('U');% 为X轴加标签 ylabel('V');% 为Y轴加标签 zlabel('c(u,v)');% 为z轴加标签 figure;% 新建图形窗口

surf(Udata,Vdata,reshape(Ccdf_t,size(Udata)));% 绘制二元t-Copula分布函数图 xlabel('U');% 为X轴加标签 ylabel('V');% 为Y轴加标签 zlabel('C(u,v)');% 为z轴加标签

%**************求Kendall秩相关系数和Spearman秩相关系数*********************** % 调用copulastat函数求二元正态Copula对应的Kendall秩相关系数 Kendall_norm = copulastat('Gaussian',rho_norm)% 调用copulastat函数求二元正态Copula对应的Spearman秩相关系数 Spearman_norm = copulastat('Gaussian',rho_norm,'type','Spearman')% 调用copulastat函数求二元t-Copula对应的Kendall秩相关系数 Kendall_t = copulastat('t',rho_t)% 调用copulastat函数求二元t-Copula对应的Spearman秩相关系数 Spearman_t = copulastat('t',rho_t,'type','Spearman')

% 直接根据沪、深两市日收益率的原始观测数据,调用corr函数求Kendall秩相关系数 Kendall = corr([X,Y],'type','Kendall')% 直接根据沪、深两市日收益率的原始观测数据,调用corr函数求Spearman秩相关系数 Spearman = corr([X,Y],'type','Spearman')

%******************************模型评价************************************* % 调用ecdf函数求X和Y的经验分布函数 [fx, Xsort] = ecdf(X);[fy, Ysort] = ecdf(Y);% 调用spline函数,利用样条插值法求原始样本点处的经验分布函数值 U = spline(Xsort(2:end),fx(2:end),X);V = spline(Ysort(2:end),fy(2:end),Y);% 定义经验Copula函数C(u,v)C = @(u,v)mean((U <= u).*(V <= v));% 为作图的需要,产生新的网格数据 [Udata,Vdata] = meshgrid(linspace(0,1,31));% 通过循环计算经验Copula函数在新产生的网格点处的函数值 for i=1:numel(Udata)

CopulaEmpirical(i)= C(Udata(i),Vdata(i));end

figure;% 新建图形窗口

% 绘制经验Copula分布函数图像

surf(Udata,Vdata,reshape(CopulaEmpirical,size(Udata)))xlabel('U');% 为X轴加标签 ylabel('V');% 为Y轴加标签

zlabel('Empirical Copula C(u,v)');% 为z轴加标签

% 通过循环计算经验Copula函数在原始样本点处的函数值 CUV = zeros(size(U(:)));for i=1:numel(U)

CUV(i)= C(U(i),V(i));end

% 计算线性相关参数为0.9264的二元正态Copula函数在原始样本点处的函数值 rho_norm = 0.9264;Cgau = copulacdf('Gaussian',[U(:), V(:)],rho_norm);% 计算线性相关参数为0.9325,自由度为4的二元t-Copula函数在原始样本点处的函数值 rho_t = 0.9325;k = 4.0089;Ct = copulacdf('t',[U(:), V(:)],rho_t,k);% 计算平方欧氏距离

dgau2 =(CUV-Cgau)'*(CUV-Cgau)dt2 =(CUV-Ct)'*(CUV-Ct)

%******************************灰色预测*************************************

A=[ 96 144 194 276 383 466 554 652 747 832 972

169 235 400 459 565 695 805 881 1011 1139

151 238 335 425 541 641 739 866 975 1087 1238

164 263 376 531 600 711 913 1038 1173 1296 1497

182 318 445 576 708 856 1000 1145 1292 1435 1667

216 361 504 642 818 979 1142 1305 1479 1644 1920] m=size(A,2);x0=mean(A,2);x1=cumsum(x0);alpha=0.4;n=length(x0);z1=alpha*x1(2:n)+(1-alpha)*x1(1:n-1);Y=x0(2:n);B=[-z1,ones(n-1,1)];ab=BY

x_A=(x0(1)-ab(2)/ab(1))*(exp(-ab(1)*n)-exp(-ab(1)*(n-1)))

图标参数************************************* y 黄-实线.点< 小于号 m 紫: 点线o 圆s 正方形 c 青-.点划线x 叉号d 菱形 r 红--虚线+ 加号h 六角星 g 绿* 星号p 五角星 b 蓝v 向下三角形 w 白^ 向上三角形 k 黑> 大于号

%******************************图形修饰*************************************

函数 含义

grid on(/off)给当前图形标记添加(取消)网络 xlable(‘string’)标记横坐标 ylabel(‘string’)标记纵坐标 title(‘string’)给图形添加标题

text(x,y,’string’)在图形的任意位置增加说明性文本信息 gtext(‘string’)利用鼠标添加说明性文本信息

axis([xmin xmax ymin ymax])设置坐标轴的最小最大值

例5.1.2 给例5.1.1 的图形中加入网络和标记。(见图5.1.3 和5.1.4)>> x=0:pi/10:2*pi;>> y1=sin(x);>> y2=cos(x);>> plot(x,y1,x,y2)>> grid on >> xlabel('independent variable X')>> ylabel('Dependent Variable Y1 & Y2')>> title('Sine and Cosine Curve')>> text(1.5,0.3,'cos(x)')>> gtext('sin(x)')>> axis([0 2*pi-0.9 0.9])

图5.1.3 使用了图形修饰的plot 函数绘制的正弦曲线

例5.2.1 绘制方程x=t y=sin(t)z=cos(t)

在t=[0,2*pi]上的空间方程。(见图5.2.1)

>> clf >> x=0:pi/10:2*pi;>> y1=sin(x);>> y2=cos(x);>> plot3(y1,y2,x,'m:p')>> grid on >> xlabel('Dependent Variable Y1')>> ylabel('Dependent Variable Y2')>> zlabel('Independent Variable X')>> title('Sine and Cosine Curve')

图5.2.1 函数plot 绘制的三维曲线图

%******************************三维图形*************************************

例5.2.3 绘制方程

sin((x^2+y^2)^(1/2))z =---------------------(x^2+y^2)^(1/2)

在x∈[-7.5,7.5];y∈[-7.5,7.5] 的图形。

>> x=-7.5:0.5:7.5;y=x;>> [X,Y]=meshgrid(x,y);>> R=sqrt(X.^2+Y.^2)+eps;>> Z=sin(R)./R;>> surf(X,Y,Z)>> xlabel('X 轴方向')>> ylabel('Y 轴方向')>> zlabel('Z 轴方向')(见图5.2.4)

图5.2.4

例5.2.4 绘制由方程形成的立体图。(见图5.2.5)z=x*exp(-(x^2+y^2))

>> clear >> x=-2:0.1:2;y=x;>> [X,Y]=meshgrid(x,y);>> Z=X.*exp(-X.^2-Y.^2);>> surf(X,Y,Z)

图5.2.5

%******************************三维多角度观察*********************************

MTALAB 允许用户设置观察点,其指令是: view(azimuth,elevation)其中方位角azimuth 是观察点和坐标原点连线在x-y平面的投影和y 轴负方向的夹角,仰

角elevation 是观察点与坐标原点的连线和x-y平面的夹角。对于这两个角度,三维图形的

默认值分别是-37.5 和30,二维图形的默认值是0 和90。

例5.2.5 从不同的角度观察高斯矩阵的曲面。

>> z=peaks(40);>> subplot(2,2,1);>> mesh(z);>> subplot(2,2,2);>> mesh(z);>> view(-37.5,-30);>> subplot(2,2,3);>> mesh(z);>> view(180,0);>> subplot(2,2,4);>> mesh(z);>> view(0,90);

图5.2.6 对应不同观察点的三维曲面图

%******************************其他图形*************************************

除了plot 绘图函数以外,在有些场合对绘制的曲线会有一些特殊要求,这就要其他函

数来实现,常用的几种函数如下(见表5.3.1)

表5.3.1 其他图形函数表 函数 含义

loglog

使用对数坐标系绘图

semilogx

横坐标为对数坐标轴,纵坐标为线性坐标轴 semilogy

横坐标为线性坐标轴,纵坐标为对数坐标轴 polar

绘制极坐标图 fill

绘制实心图 bar

绘制直方图 pie

绘制饼图 area

绘制面积图 quiver 绘制向量场图 stairs 绘制阶梯图 sterm 绘制火柴杆图

例5.3.1 >> x=0:pi/10:2*pi;>> y1=sin(x);>> subplot(2,2,1);>> plot(x,y1);>> subplot(2,2,2);>> bar(x,y1);>> subplot(2,2,3);>> fill(x,y1,'g');>> subplot(2,2,4);>> stairs(x,y1,'k');

%******************************直方图*************************************

函数bar(x)可以绘制直方图,这对统计或者数据采集非常直观实用。它共有四种形式: bar,bar3,barh 和bar3h,其中bar 和bar3 分别用来绘制二维和三维竖直方图,barh 和b ar3h 分别用来绘制二维和三维水平直方图,调用格式是:

bar(x,y)其中x 必须单调递增或递减,y 为n m× 矩阵,可视化结果为m 组,每

组n 个垂直柱,也就是把y 的行画在一起,同一列的数据用相同的颜色表示; bar(x,y,width)(或bar(y,width))指定每个直方条的宽度,如width>1,则直方条会重

叠,默认值为width=0.8;

bar(…,’grouped’)使同一组直方条紧紧靠在一起; bar(…,’stack’)把同一组数据描述在一个直方条上。

例5.3.2

>> y=[5 3 2 9;4 7 2 7;1 5 7 3];>> subplot(2,2,1),bar(y)>> x=[5 9 11];>> subplot(2,2,2),bar3(x,y)>> subplot(2,2,3),bar(x,y,'grouped')>> subplot(2,2,4),bar(rand(2,3),.75,'stack')

%******************************面积图*************************************

5.3.2 面积图

函数area 用来绘制面积图,面积图在plot 的基础上填充x 轴和曲线之间的面积,该图

用于查看某个数在该列所有数的总和中所占的比例。

例5.3.3

>> x=-3:3;>> y=[3 2 5;6 1 8;7 4 9;6 3 7;8 2 9;4 2 9;3 1 7];>> area(x,y)

%******************************饼图*************************************

5.3.3 饼图

函数pie 用来绘制饼图,它可以形象地表示出向量中各元素所占比例。其调用格式是:

pie(x)x 中的元素通过x/sum(x)进行归一化,以确定饼图中的份额; pie(x,explode)向量explode 和x 元素数相同,用来指出需要分开的饼片,explode 中

不为零的部分会被分开。

例5.3.4 设某班的某课程的考试成绩如下:90 分以上有32 人,81 至90 有58 人,71 至80 分有27 人,60 至70 分为21 人,60 分以下有16 人,画出饼图。(见图5.3.4)

>> x=[32 58 27 21 16];>> explode0=[1 0 0 0 0];>> subplot(1,2,1)>> pie(x,explode0)>> explode1=[0 0 0 0 1];>> subplot(1,2,2)>> pie(x,explode1)

5.3.4 不同坐标系中的绘图

Semilogx,semilogy,loglo,polar(theta,rho)的使用方法和plot 完全类似,不同的只是绘

制到不同的图形坐标上。函数semilogx 绘制x 轴为对数标度的图形,在半对数坐标系中绘图; 函数semilogy 绘制y 轴为对数标度的图形;函数loglog 绘制两个轴都为对数间隔的图形;

函数polar(theta,rho)绘制极坐标图形,其中theta 为相角,rho 为其对应的半径。

例5.3.5 绘制ρ=acos(3θ),a=2 的图形。(见图5.3.5)

>> theta=-pi:pi/80:pi;>> polar(theta,2*cos(3*theta))

图5.3.5 极坐标图

5.4 符号表达式绘图

MATLAB 软件提供了将表达式进行图形显示的功能。完成此功能需调用fplot 函数和

ezplot 函数。

函数fplot 用来绘制数学函数,其调用格式为: fplot(fun,lims)其中fun 就是所要绘制的函数,可以是定义函数的M 文件名,也可以是以x 为变量的可计

算字符串。例如’diric(x,10)’或’[sin(x),cos(x)]’,对于向量x 的每个元素,函数 fun(x)必须返回一个行向量。如果fun 返回[f1(x),f2(x),f3(x)],输入[x1;x2],就会返回矩阵

f1(x1)f2(x1)f3(x1)f1(x2)f2(x2)f3(x2)lims=[XMIN XMAX YMIN YMAX]限定了x,y 轴上的绘图空间。

例5.4.1 >> subplot(2,2,1),fplot('humps',[0 1])>> subplot(2,2,2),fplot('abs(exp(-j*x*(0:9))*ones(10,1))',[0 2*pi])>> subplot(2,2,3),fplot('[tan(x),sin(x),cos(x)]',2*pi*[-1 1-1 1])>> subplot(2,2,4),fplot('sin(1./x)',[0.01 0.1],1e-3)

图5.4.1 fplot 函数绘制表达式图形

ezplot 函数是简捷绘图指令之一,它无需数据准备,直接画出函数图形,基本调用格式

为ezplot(f)其中f 是字符串或代表数学函数的符号表达式,只有一个符号变量,可以是x,缺省情况下

x 轴的绘图区域为[-π, π ],但我们可以用ezplot(f,xmin,xmax)或ezplot(f,[xmin,xmax])来指定x 的范围。

例5.4.2

>> y='x^2';>> subplot(1,2,1)>> ezplot(y)>> subplot(1,2,2)>> y='sin(x)';>> ezplot(y,[-pi,pi])

图5.4.2 ezplot 函数绘制表达式图形

5.5 plot 函数

MATLAB 对数据是按列存储和计算的,运用plot(x)时,当x 为一个向量时,以其元

素为纵坐标,其序号为横坐标值绘制曲线。当x 为实矩阵时,则以其序号为横坐标,按列

绘制每列元素相对于序号的曲线,当x 为n m× 矩阵时,就有n 条曲线。

如果x,y 是同维向量,plot(x,y)指令以x 元素为横坐标值,y 元素为纵坐标值绘制曲线。

如x 是向量,y 是有一维与x 元素数量相等的矩阵,则以x 为共同横坐标,按列绘制y 每

列元素值,曲线数为y 的另一维的元素数。如果x,y 是同维矩阵,则以x,y 对应列元素为、纵坐标分别绘制曲线,数目等于矩阵的列数。

例5.5.1

>> x=[3 5 10 8];>> subplot(2,2,1)>> plot(x)>> x=[3 5 10 8;7 2 9 4;2 7 2 7]';>> subplot(2,2,2)>> plot(x)>> x=[3 5 6 8];>> y=[1 5 10 4];>> subplot(2,2,3)>> plot(x,y)>> x=[1 3 5 7;2 4 6 8]';>> y=[6 2 5 10;3 5 2 6]';>> subplot(2,2,4)>> plot(x,y,'k:*')

下载单纯形法matlab程序word格式文档
下载单纯形法matlab程序.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    单纯形法理论

    单纯形法 单纯形法不用计算函数的导数,只需要计算目标函数的函数值,因此计算比较简单,几何概念也比较清晰,属于直接法的无约束最优化方法。所谓n维欧氏空间E中的单纯形,是指在n维......

    单纯形法综述

    单纯形法综述 zy1415104-曹文亮 单纯形法是1947年由George Bernard Dantzing(1914-2005)创建的,单纯形法的创建标志着线性规划问题的诞生。线性规划问题是研究在线性约束条件......

    牛头刨床课程设计matlab程序

    lo2o3=0.65;l2=0.09250;l4=1.1245;l5=0.281125;lo3d=1.11878;w2=8*pi/3;m4=16;m5=4;m6=68; g=9.8;j4=1.6;j5=0.03;k2=-38.18; for i=1:13; k2=k2+30; if k2>90&k2(0.03+0.......

    单纯形法课程论文

    最优化方法课程论文 题目:单纯形法的发展及其应用系别:理学院专业:信息与计算科学姓名:班级:信息101班 单纯形法的发展及其应用 一. 单纯形法简介: 单纯形法,求解线性规划问题的通......

    汽车理论课后习题Matlab程序

    汽车理论课后习题Matlab程序1.3确定一轻型货车的动力性能(货车可装用4挡或5挡变速器,任选其中的一种进行整车性能计算):1)绘制汽车驱动力与行驶阻力平衡图。2)求汽车最高车速,最大......

    单纯形法C语言程序代码

    长 春 工 业 大 学 课程设计程序代码 课程设计名称 运筹学课程设计 专 业 信息管理与信息系统 班 级 130506班 学 生 姓 名 于松南、张鑫蕊、 赵改玲、赵海潮 指 导 教 师王......

    牛头刨床matlab程序 机械原理课程设计

    clear all;clc; %初始条件 theta1=linspace(-18,342,100);%单位度 theta1=theta1*pi/180;%转换为弧度制 W1=80*pi/30;%角速度 单位rad/s H=0.5;%行程 单位m L1=0.1329;%O2A......

    单纯形法和拟牛顿法五篇范文

    拟牛顿法(Quasi-Newton Methods)是求解非线性优化问题最有效的方法之一,于20世纪50年代由美国Argonne国家实验室的物理学家W. C. Davidon所提出来。Davidon设计的这种算法在......