changfeng1937 发表于 2012-2-27 12:25

下载了《精通MATLAB最优化计算》书上的优化程序,用它来做杆机构的优化,我的目标函..

想用里边的惩罚函数程序来算,我的目标函数是用for循环写的。不会导入。
惩罚函数调用格式如下:
function = minMixFun(f,g,h,x0,r0,c,var,eps)
%目标函数:f
%不等式约束:g
%等式约束:h
%初始点:x0
%罚因子:r0
%缩小系数:c
%自变量向量:var
%精度:eps
%目标函数取最小值时的自变量的值:x
%目标函数的最小值:minf


目标函数:
function f=link_objfun1(x)
global L1 L5
f=0;
snti0=0;
for i=0:5
snti=snti0+pi/6*i/5;
fai=acos((L1-x(1)*sin(snti+x(5)))/(L1^2+x(1)^2-2*L1*x(1)*sin(snti+x(5)))^1/2);
psai=acos(2*(L1^2+x(1)^2+x(3)^2-x(2)^2-2*L1*x(1)*sin(snti+x(5)))/(x(3)*(L1^2+x(1)^2-2*L1*x(1)*sin(snti+x(5)))^1/2));
if snti<=pi/2-x(5)
   bati=fai+psai+acos(x(4)/x(3));
elseif snti>pi/2-x(5)
   bati=-fai+psai+acos(x(4)/x(3));
end
f=f+(L1*cos(snti)+L5*cos(snti-bati)-L1)^2;
end


请诸位帮帮忙,我的体力不多。

厚积薄发 发表于 2012-2-27 14:20

没看出来您的问题是什么?

changfeng1937 发表于 2012-2-27 14:51

我懂的不多,生搬硬套。书上的例题
运行如下:
syms t;
a=4;b=3;
f=a*t;
g=;
=minNF(f,,g,10,0.5,)
我将目标函数写成:
function f=link_objfun(s,t,a,m,n)
global L1 L5
f=0;
snti0=0;
for i=0:5
snti=snti0+pi/6*i/5;
fai=acos((L1-s*sin(snti+n))/(L1^2+s^2-2*L1*s*sin(snti+n))^1/2);
psai=acos(2*(L1^2+s^2+a^2-t^2-2*L1*s*sin(snti+n))/(a*(L1^2+s^2-2*L1*s*sin(snti+n))^1/2));
if snti<=pi/2-n
   bati=fai+psai+acos(m/a);
elseif snti>pi/2-n
   bati=-fai+psai+acos(m/a);
end
f=f+(L1*cos(snti)+L5*cos(snti-bati)-L1)^2;
end
运行如下:
clear all;
global L1 L5
L1=3000;
L5=800;
syms s t a m n;
f=link_objfun;
g=;
=minNF(f,,g,15,0.6,)
??? Input argument "s" is undefined.

Error in ==> link_objfun at 7
fai=acos((L1-s*sin(snti+n))/(L1^2+s^2-2*L1*s*sin(snti+n))^1/2);
页: [1]
查看完整版本: 下载了《精通MATLAB最优化计算》书上的优化程序,用它来做杆机构的优化,我的目标函..