下载了《精通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
请诸位帮帮忙,我的体力不多。 没看出来您的问题是什么? 我懂的不多,生搬硬套。书上的例题
运行如下:
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]