机械优化设计MATLAB程序.docx
《机械优化设计MATLAB程序.docx》由会员分享,可在线阅读,更多相关《机械优化设计MATLAB程序.docx(7页珍藏版)》请在冰豆网上搜索。
机械优化设计MATLAB程序
机械优化设计MATLAB程序
机械优化设计作业
1.用二次插值法求函数tt1t22极小值,精度e=。
在MATLAB的M文件xx器中编写的M文件,如下:
f=inline('(t+1)*(t-2)^2','t')a=0;b=3;epsilon=;t1=a;f1=f(t1);t3=b;f3=f(t3);
t2=*(t1+t3);f2=f(t2);c1=(f3-f1)/(t3-t1);
c2=((f2-f1)/(t2-t1)-c1)/(t2-t3);t4=*(t1+t3-c1/c2);f4=f(t4);k=0;
while(abs(t4-t2)>=epsilon) ift2f4
f1=f2;t1=t2; t2=t4;f2=f4; else
f3=f4;t3=t4; end else
iff2>f4
f3=f2;t3=t2; t2=t4;f2=f4; else
f1=f4;t2=t4; end end
c1=(f3-f1)/(t3-t1);
c2=((f2-f1)/(t2-t1)-c1)/(t2-t3); t4=*(t1+t3-c1/c2);f4=f(t4); k=k+1;end
%输出最优解iff2>f4
t=t4;f=f(t4);else
t=t2;f=f(t2);end
fprintf(1,'迭代计算k=%\\n',k)fprintf(1,'极小点坐标t=%\\n',t)fprintf(1,'函数值f=%\\n',f)
运行结果如下:
迭代计算k=7极小点坐标t=2函数值f=
2.用黄金分割法求函数t3t23t21的极小值,精度e=。
在MATLAB的M文件xx器中编写的M文件,如下:
f=inline('t^(2/3)-(t^2+1)^(1/3)','t');a=0;b=3;epsilon=;t1=*(b-a);f1=f(t1);t2=a+*(b-a);f2=f(t2);k=1;
whileabs(b-a)>=epsilon iff1epson) p=-G1\\g1; x0=x0+p;
g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)}); G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)}); k=k+1;endx=x0;
fx=subs(f,{x1,x2},{x(1,1),x(2,1)});运行结果如下:
>>[x,fx,k]=niudunfa([1;1])
x=
fx=k=23
(2)用阻尼牛顿法在MATLAB的M文件xx器中编写的M文件,如下:
function[x,fx,k]=zuniniudunfa(x0)%阻尼牛顿法symsx1x2
f=(x1-2)^4+(x1-2*x2)^2;fx=0;
v=[x1,x2];
df=jacobian(f,v);df=df.';
G=jacobian(df,v);
epson=1e-12;%停机原则
g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});
G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)});k=0;%迭代次数p=-G1\\g1;
a0=-p'*g1/(p'*G1*p);x0=x0+a0*p;
while(norm(a0*p)>epson) p=-G1\\g1;
a0=-p'*g1/(p'*G1*p); x0=x0+a0*p;
g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)}); G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)}); k=k+1;endx=x0;
fx=subs(f,{x1,x2},{x0(1,1),x0(2,1)});
运行结果如下:
>>[x,fx,k]=zuniniudunfa([1;1])
x=
fx=k=23
(3)用变尺度法在MATLAB的M文件xx器中编写的M文件,如下:
32124.用共轭梯度法求函数fx1,x2x1x2x1x22x1的极小点
22用共轭梯度法在MATLAB的M文件xx器中编写的M文件,如下:
function[y,x,k]=CG(A,b,c,x0)
%共轭梯度法解minf=*X'*A*X+b'x+ceps=1e-6;%迭代停机原则
%fx=*x0'.*A.*x0+b'.*x0+c;r0=A*x0+b;ifnorm(r0)eps
beta=(r1'*r1)/(r0'*r0); p1=-r1+beta*p0;
alpha=-(r1'*p1)/(p1'*A*p1); x1=x1+alpha*p1; r2=A*x1+b; p0=p1; r0=r1; r1=r2; k=k+1;endx=x1;
y=*x'*A*x+b'*x+c;
运行结果如下:
[y,x,k]=CG([3-1;-11],[-2;0],0,[2;1])y=-1
x= k=1
(2)用变尺度法在MATLAB的M文件xx器中编写的M文件,如下:
function[x,fx,k]=bianchidufa(A,b,c,x0)%用变尺度法求fx=*x'*A*x+b'*x+c;epson=1e-12;g0=A*x0+b;G0=A;H0=eye
(2);k=0;d0=-H0*g0;
a0=-d0'*g0/(d0'*G0*d0);s0=a0*d0;%x(k+1)-x(k);y0=A*a0*d0;%g(k+1)-g(k);x1=x0+a0*d0;
while(norm(s0)>=epson)switchk case{10} x0=x1; g0=A*x0+b; H0=eye
(2); k=0; d0=-H0*g0;
a0=-d0'*g0/(d0'*G0*d0); s0=a0*d0; x1=x0+a0*d0; break otherwise
g1=A*x1+b; y0=A*a0*d0; s0=a0*d0;
%H1=H0+s0*s0'/(s0'*y0)-H0*y0*y0'*H0/(y0'*H0*y0);
H1=H0+((1+y0'*H0*y0/(s0'*y0))*s0*s0'-H0*y0*s0'-s0*y0'*H0)/(s0'*y0); k=k+1; d1=-H1*g1;
a1=-d1'*g1/(d1'*G0*d1); a0=a1; d0=d1; H0=H1; s0=a0*d0; x1=x1+a0*d0; breakendendx=x1;
fx=*x1'*A*x1+b'*x1+c;
运行结果如下:
》[x,fx,k]=bianchidufa([3-1;-11],[-2;0],0,[2;1])H1=
fx= -1x=
fx= -1k= 1
故函数极小点是点
25.用鲍威尔法求函数fx1,x2x122x24x12x1x2的极小点。
用鲍威尔法在MATLAB的M文件xx器中编写的M文件,如下:
function[x,fx,k]=bowell(A,b,c,x0)%鲍威尔法d01=[1;0];d02=[0;1];x02=[0;0];esp=1e-12;%停机原则k=0;%迭代次数
whilenorm(x0-x02)>=esp k=k+1; g01=A*x0+b;
a01=-d01'*g01/(d01'*A*d01);
x01=x0+a01*d01; g02=A*x01+b;
a02=-d02'*g02/(d02'*A*d02); x02=x01+a02*d02; d10=x02-x0; g10=A*x02+b;
a10=-d10'*g10/(d10'*A*d10); x10=x0+a01*d01; d01=d02; d02=d10; x0=x10;endx=x0;
fx=*x'*A*x+b'*x+c;
运行结果如下:
[x,fx,k]=bowell([2-2;-24],[-4;0],0,[2;1])fx= -8x= 4 2fx= -8k= 3
6.用单纯形法求线性规划问题
minf(x)x1x2x34x12x23x45x0(j1,2,3,4)j%单纯形法matlab程序-danchunxingfa
%求解标准型线性规划:
maxc*x;A*x=b;x>=0
%本函数中的A是单纯初始表,包括:
最后一行是初始的检验数,最后一列是资源向量b%N是初始的基变量的下标
%输出变量sol是最优解,其中松弛变量可能不为0%输出变量val是最优目标值,kk是迭代次数
function[sol,val,kk]=danchunxingfa(A,N)[mA,nA]=size(A);kk=0;%迭代次数flag=1;whileflag
用单纯形法在MATLAB的M文件xx器中编写的M文件,如下:
kk=kk+1;
ifA(mA,:
)0&A(1:
mA-1,i)temp temp=A(mA,i); inb=i;%进基变量的下标 end end
sita=zeros(1,mA-1); fori=1:
mA-1 ifA(i,inb)>0
sita(i)=A(i,nA)/A(i,inb); end end
temp=inf; fori=1:
mA-1
ifsita(i)>0&sita(i)>A=[11104; 12 35;
- 0];N=[3;4];[sol,val,kk]=danchunxingfa(A,N)sol=
0 0 val=
kk= 2所以。
经两次转轴运算,得到的最优解为x1x20,x3,x4,minf(x)
7.求解线性规划问题
minz7x112x29x14x2x33604x5xx200 3x110x2x5300xj0(j1,2,3,4,5)用单纯形法在MATLAB的M文件xx器中编写的M文件,如下:
%单纯形法matlab程序-danchunxingfa
%求解标准型线性规划:
maxc*x;A*x=b;x>=0
%本函数中的A是单纯初始表,包括:
最后一行是初始的检验数,最后一列是资源向量b%N是初始的基变量的下标
%输出变量sol是最优解,其中松弛变量可能不为0%输出变量val是最优目标值,kk是迭代次数
function[sol,val,kk]=danchunxingfa(A,N)[mA,nA]=size(A);
kk=0;%迭代次数flag=1;whileflag kk=kk+1;
ifA(mA,:
)0&A(1:
mA-1,i)temp temp=A(mA,i); inb=i;%进基变量的下标 end end
sita=zeros(1,mA-1); fori=1:
mA-1 ifA(i,inb)>0
sita(i)=A(i,nA)/A(i,inb); end end
temp=inf; fori=1:
mA-1
ifsita(i)>0&sita(i)>A=[94100360; 45010200; 310001300;
7120000]; N=[3;4;5]; [sol,val,kk]=danchunxingfa(A,N)sol=
20 24 84 0 0val= 420kk= 3
所以,经3次转轴运算,得到的最优解为
x120,x224,x384,x4x50,minz420.
end end
%以下进行转轴运算
A(outb,:
)=A(outb,:
)/A(outb,inb); fori=1:
mA
ifi~=outb
A(i,:
)=A(i,:
)-A(outb,:
)*A(i,inb); end end end endend;
运行结果如下:
令Y7x112x2,则求minz7x112x2可转变为求maxY,即minz-maxY.
>>A=[94100360; 45010200; 310001300;
7120000]; N=[3;4;5]; [sol,val,kk]=danchunxingfa(A,N)sol=
20 24 84 0 0val= 420kk= 3
所以,经3次转轴运算,得到的最优解为
x120,x224,x384,x4x50,minz420.
机械优化设计作业
1.用二次插值法求函数tt1t22极小值,精度e=。
在MATLAB的M文件xx器中编写的M文件,如下:
f=inline('(t+1)*(t-2)^2','t')a=0;b=3;epsilon=;t1=a;f1=f(t1);t3=b;f3=f(t3);
t2=*(t1+t3);f2=f(t2);c1=(f3-f1)/(t3-t1);
c2=((f2-f1)/(t2-t1)-c1)/(t2-t3);t4=*(t1+t3-c1/c2);f4=f(t4);k=0;
while(abs(t4-t2)>=epsilon) ift2f4
f1=f2;t1=t2; t2=t4;f2=f4; else
f3=f4;t3=t4; end else
iff2>f4
f3=f2;t3=t2; t2=t4;f2=f4; else
f1=f4;t2=t4; end end
c1=(f3-f1)/(t3-t1);
c2=((f2-f1)/(t2-t1)-c1)/(t2-t3); t4=*(t1+t3-c1/c2);f4=f(t4); k=k+1;end
%输出最优解iff2>f4
t=t4;f=f(t4);else
t=t2;f=f(t2);end
fprintf(1,'迭代计算k=%\\n',k)fprintf(1,'极小点坐标t=%\\n',t)fprintf(1,'函数值f=%\\n',f)
运行结果如下:
迭代计算k=7极小点坐标t=2函数值f=
2.用黄金分割法求函数t3t23t21的极小值,精度e=。
在MATLAB的M文件xx器中编写的M文件,如下:
f=inline('t^(2/3)-(t^2+1)^(1/3)','t');a=0;b=3;epsilon=;t1=*(b-a);f1=f(t1);t2=a+*(b-a);f2=f(t2);k=1;
whileabs(b-a)>=epsilon iff1epson) p=-G1\\g1; x0=x0+p;
g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)}); G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)}); k=k+1;endx=x0;
fx=subs(f,{x1,x2},{x(1,1),x(2,1)});运行结果如下:
>>[x,fx,k]=niudunfa([1;1])
x=
fx=k=23
(2)用阻尼牛顿法在MATLAB的M文件xx器中编写的M文件,如下:
function[x,fx,k]=zuniniudunfa(x0)%阻尼牛顿法symsx1x2
f=(x1-2)^4+(x1-2*x2)^2;fx=0;
v=[x1,x2];
df=jacobian(f,v);df=df.';
G=jacobian(df,v);
epson=1e-12;%停机原则
g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)});
G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)});k=0;%迭代次数p=-G1\\g1;
a0=-p'*g1/(p'*G1*p);x0=x0+a0*p;
while(norm(a0*p)>epson) p=-G1\\g1;
a0=-p'*g1/(p'*G1*p); x0=x0+a0*p;
g1=subs(df,{x1,x2},{x0(1,1),x0(2,1)}); G1=subs(G,{x1,x2},{x0(1,1),x0(2,1)}); k=k+1;endx=x0;
fx=subs(f,{x1,x2},{x0(1,1),x0(2,1)});
运行结果如下:
>>[x,fx,k]=zuniniudunfa([1;1])
x=
fx=k=23
(3)用变尺度法在MATLAB的M文件xx器中编写的M文件,如下:
32124.用共轭梯度法求函数fx1,x2x1x2x1x22x1的极小点
22用共轭梯度法在MATLAB的M文件xx器中编写的M文件,如下:
function[y,x,k]=CG(A,b,c,x0)
%共轭梯度法解minf=*X'*A*X+b'x+ceps=1e-6;%迭代停机原则
%fx=*x0'.*A.*x0+b'.*x0+c;r0=A*x0+b;ifnorm(r0)eps
beta=(r1'*r1)/(r0'*r0); p1=-r1+beta*p0;
alpha=-(r1'*p1)/(p1'*A*p1); x1=x1+alpha*p1; r2=A*x1+b; p0=p1; r0=r1; r1=r2; k=k+1;endx=x1;
y=*x'*A*x+b'*x+c;
运行结果如下:
[y,x,k]=CG([3-1;-11],[-2;0],0,[2;1])y=-1
x= k=1
(2)用变尺度法在MATLAB的M文件xx器中编写的M文件,如下:
function[x,fx,k]=bianchidufa(A,b,c,x0)%用变尺度法求fx=*x'*A*x+b'*x+c;epson=1e-12;g0=A*x0+b;G0=A;H0=eye
(2);k=0;d0=-H0*g0;
a0=-d0'*g0/(d0'*G0*d0);s0=a0*d0;%x(k+1)-x(k);y0=A*a0*d0;%g(k+1)-g(k);x1=x0+a0*d0;
while(norm(s0)>=epson)switchk case{10} x0=x1; g0=A*x0+b; H0=eye
(2); k=0; d0=-H0*g0;
a0=-d0'*g0/(d0'*G0*d0); s0=a0*d0; x1=x0+a0*d0; break otherwise