题目
答案
MATLAB解答
这是一个非线性规划问题。
设
a
=
(
x
1
,
y
1
)
,
b
=
(
x
2
,
y
2
)
a=(x_1,y_1),b=(x_2,y_2)
a=(x1,y1),b=(x2,y2),则:
目标函数:
f
u
n
=
(
x
1
+
x
2
)
2
+
(
y
1
+
y
2
)
2
+
(
x
1
−
x
2
)
2
+
(
y
1
−
y
2
)
2
fun = \sqrt{ (x_1+x_2)^2+(y_1+y_2)^2 } + \sqrt{ (x_1-x_2)^2+(y_1-y_2)^2 }
fun=(x1+x2)2+(y1+y2)2+(x1−x2)2+(y1−y2)2
约束条件:
s
.
t
.
{
x
1
2
+
y
1
2
−
1
=
0
x
2
2
+
y
2
2
−
2
=
0
s.t. \begin{cases} \sqrt{ x_1^2+y_1^2 } - 1 = 0\\ \\ \sqrt{ x_2^2+y_2^2 } - 2 = 0 \end{cases}
s.t.⎩⎪⎨⎪⎧x12+y12−1=0x22+y22−2=0
令 x = [x1, x2, y1, y2]
,则可编写以下代码:
% //约束条件
function [g, h] = nonlcon(x)
g = [];
h = [x(1)^2+x(3)^2-1, ...
x(2)^2+x(4)^2-4];
求解最小值:
% //目标函数
function f = fun(x)
f = sqrt( (x(1)+x(2))^2+(x(3)+x(4))^2 ) +...
sqrt( (x(1)-x(2))^2+(x(3)-x(4))^2 );
x0 = rand(4,1);
A = []; b=[];
Aeq = []; beq=[];
lb = []; ub=[];
[x,fval] = fmincon(@fun,x0,A,b,Aeq,beq,lb,ub,@nonlcon);
fprintf("当a=(%.2f,%.2f),ba=(%.2f,%.2f)时,取得最小值%.4f\n",x(1),x(3),x(2),x(4),fval)
运行结果为:当a=(0.92,0.40),ba=(1.83,0.80)时,取得最小值4.0000
求解最大值:
% //目标函数
function f = fun(x)
f = sqrt( (x(1)+x(2))^2+(x(3)+x(4))^2 ) +...
sqrt( (x(1)-x(2))^2+(x(3)-x(4))^2 );
f = -f;
x0 = rand(4,1);
A = []; b=[];
Aeq = []; beq=[];
lb = []; ub=[];
[x,fval] = fmincon(@fun,x0,A,b,Aeq,beq,lb,ub,@nonlcon);
fprintf("当a=(%.2f,%.2f),b=(%.2f,%.2f)时,取得最大值%.4f\n",x(1),x(3),x(2),x(4),-fval)
运行结果为:当a=(-0.49,0.87),b=(1.75,0.97)时,取得最大值4.4721