Mission 2. Code.m function best = circpack(n,iter) f=@(x)-x(2*n+1); best = zeros
ID: 3583159 • Letter: M
Question
Mission 2.
Code.m
function best = circpack(n,iter)
f=@(x)-x(2*n+1);
best = zeros(2*n+1);
for i=1:iter
ip=rand(2*n+1,1)';
ip(2*n+1)=0;
lb=zeros(2*n+1,1)';
ub=ones(2*n+1,1)';
mo=fmincon(f,ip,[],[],[],[],lb,ub,@constraint);
if mo(2*n+1)>best(2*n+1)
best = mo;
end
end
t=0:0.01:2*pi;
x=best(2*n+1)*cos(t);
y=best(2*n+1)*sin(t);
hold on;
for i=1:n
plot(x+best(2*i-1),y+best(2*i));
end
best(2*n+1);
Constraint.m
function [c ceq] = constraint(x)
k=1;
n=10;
ceq=0;
for i = 1:n-1
for j=n-1:-1:i
c(k) = -(x(2*i-1)-x(2*j+1))^2-(x(2*i)-x(2*j+2))^2 + 4*x(2*n+1)^2;
k=k+1;
end
end
for i=1:2*n
c(i+n*(n-1)/2)=-x(i)+x(2*n+1);
end
for i=1:2*n
c(i+n*(n+3)/2)=-1+x(2*n+1)+x(i);
end
Explanation / Answer
Answer :
Code.m
function best = circpack(n,iter)
f=@(x)-x(2*n+1);
best = zeros(2*n+1);
for i=1:iter
ip=rand(2*n+1,1)';
ip(2*n+1)=0;
lb=zeros(2*n+1,1)';
ub=ones(2*n+1,1)';
mo=fmincon(f,ip,[],[],[],[],lb,ub,@constraint);
if mo(2*n+1)>best(2*n+1)
best = mo;
end
end
t=0:0.01:2*pi;
x=best(2*n+1)*cos(t);
y=best(2*n+1)*sin(t);
hold on;
for i=1:n
plot(x+best(2*i-1),y+best(2*i));
end
best(2*n+1);
Constraint.m
function [c ceq] = constraint(x)
k=1;
n=10;
ceq=0;
for i = 1:n-1
for j=n-1:-1:i
c(k) = -(x(2*i-1)-x(2*j+1))^2-(x(2*i)-x(2*j+2))^2 + 4*x(2*n+1)^2;
k=k+1;
end
end
for i=1:2*n
c(i+n*(n-1)/2)=-x(i)+x(2*n+1);
end
for i=1:2*n
c(i+n*(n+3)/2)=-1+x(2*n+1)+x(i);
end