matlab 求二元函数最小值 70
求助函数2*(y^2-x^2)^0.5+(pi/2-2*acos(x/y))*y其中(y^2-x^2)^0.5≥4,x<y,在x[15,20],y[15,20]范围内的最...
求助函数 2*(y^2-x^2)^0.5+(pi/2-2*acos(x/y))*y 其中(y^2-x^2)^0.5≥4 ,x<y,在x [15,20] , y [15,20] 范围内的最小值以及对应坐标。 其实就是求图中ABCD最短 如果我的函数写错了就帮我改改。
%建立funt.m函数文件
function z=funt(x)
z=2*(x(2)^2-x(1)^2)^0.5+(pi/2-2*acos(x(1)/(2)))*x(2);
%建立 mycon.m文件
function [C,Ceq]=mycon(x)
C=[4-(x(2)^2-x(1)^2)^0.5];
Ceq=[];
%以下程序可以在 命令窗口输入(也可以重新建立一个新的。m文件)
x0=[0,0];
a=[1,-1];b=0;
lb=[15,15];ub =[20,20];
[x,fval]=fmincon('funt',x0,a,b,[],[],lb,ub,@mycon)
运行得到
Warning: Large-scale (trust region) method does not currently solve this type of problem,
switching to medium-scale (line search).
> In fmincon at 260
Maximum number of function evaluations exceeded;
increase OPTIONS.MaxFunEvals.
x =
14.9998 - 0.0002i 14.9998 - 0.0002i
fval =
23.5605 -81.1063i
长度能是复数? 谁帮我看看 我估计怎么也得x=15 y=15多一点 才对
楼下的没有加入非线性约束条件(y^2-x^2)^0.5≥4 展开
%建立funt.m函数文件
function z=funt(x)
z=2*(x(2)^2-x(1)^2)^0.5+(pi/2-2*acos(x(1)/(2)))*x(2);
%建立 mycon.m文件
function [C,Ceq]=mycon(x)
C=[4-(x(2)^2-x(1)^2)^0.5];
Ceq=[];
%以下程序可以在 命令窗口输入(也可以重新建立一个新的。m文件)
x0=[0,0];
a=[1,-1];b=0;
lb=[15,15];ub =[20,20];
[x,fval]=fmincon('funt',x0,a,b,[],[],lb,ub,@mycon)
运行得到
Warning: Large-scale (trust region) method does not currently solve this type of problem,
switching to medium-scale (line search).
> In fmincon at 260
Maximum number of function evaluations exceeded;
increase OPTIONS.MaxFunEvals.
x =
14.9998 - 0.0002i 14.9998 - 0.0002i
fval =
23.5605 -81.1063i
长度能是复数? 谁帮我看看 我估计怎么也得x=15 y=15多一点 才对
楼下的没有加入非线性约束条件(y^2-x^2)^0.5≥4 展开
2个回答
展开全部
我采用数值的完全数值的方法
原函数在x [15,20] , y [15,20] 范围内存在复数解 ,需要剔出
matlab代码:
[x y]=meshgrid(15:0.01:20);
a=2*(y.^2-x.^2).^0.5+(pi/2-2*acos(x./y)).*y;
min(min(real(a).*(0==imag(a)) + (0<imag(a))*100))
结果是
23.56194490192345
如果想求得具体x,y值, 代码写成:
[x y]=meshgrid(15:0.01:20);
a=2*(y.^2-x.^2).^0.5+(pi/2-2*acos(x./y)).*y;
[t i]=min(real(a).*(0==imag(a)) + (0<imag(a))*100);
[a j]=min(t);
[x(i(j),j) y(i(j),j) a]
结果为:
15.00000000000000 15.00000000000000 23.56194490192345
update:
I found that if make the result meet the condition"(y^2-x^2)^0.5≥4", there is no complex number left.
code is as follows:
[x y]=meshgrid(15:0.01:20);
a=2*(y.^2-x.^2).^0.5+(pi/2-2*acos(x./y)).*y;
b=((y.^2-x.^2).^0.5>=4);
[t i]=min(a.*b+ones(size(x)).*(~b)*100);
[a j]=min(t);
[x(i(j),j) y(i(j),j) a]
ans =
15.00000000000000 15.53000000000000 24.30167938601250
原函数在x [15,20] , y [15,20] 范围内存在复数解 ,需要剔出
matlab代码:
[x y]=meshgrid(15:0.01:20);
a=2*(y.^2-x.^2).^0.5+(pi/2-2*acos(x./y)).*y;
min(min(real(a).*(0==imag(a)) + (0<imag(a))*100))
结果是
23.56194490192345
如果想求得具体x,y值, 代码写成:
[x y]=meshgrid(15:0.01:20);
a=2*(y.^2-x.^2).^0.5+(pi/2-2*acos(x./y)).*y;
[t i]=min(real(a).*(0==imag(a)) + (0<imag(a))*100);
[a j]=min(t);
[x(i(j),j) y(i(j),j) a]
结果为:
15.00000000000000 15.00000000000000 23.56194490192345
update:
I found that if make the result meet the condition"(y^2-x^2)^0.5≥4", there is no complex number left.
code is as follows:
[x y]=meshgrid(15:0.01:20);
a=2*(y.^2-x.^2).^0.5+(pi/2-2*acos(x./y)).*y;
b=((y.^2-x.^2).^0.5>=4);
[t i]=min(a.*b+ones(size(x)).*(~b)*100);
[a j]=min(t);
[x(i(j),j) y(i(j),j) a]
ans =
15.00000000000000 15.53000000000000 24.30167938601250
展开全部
function
l=icesn(x)
%
保存为
icesn.m
文件
d=x(1);h=x(2);
p=d/(tan((pi/4)+2*atan(d/h)-(pi/2)));
l=(p/2)*(d*sqrt(p^2+d^2)+p^2*log(sqrt(p^2+d^2)+d));
-------------------------------------------------------------------------------------------
运行以下:
[x
fval
exitflag]=fminsearch('icesn',[2
8])
%
x
为最小值点
%fval为最小值
%
exitflag=1表示函数收敛于解;反之,=0
l=icesn(x)
%
保存为
icesn.m
文件
d=x(1);h=x(2);
p=d/(tan((pi/4)+2*atan(d/h)-(pi/2)));
l=(p/2)*(d*sqrt(p^2+d^2)+p^2*log(sqrt(p^2+d^2)+d));
-------------------------------------------------------------------------------------------
运行以下:
[x
fval
exitflag]=fminsearch('icesn',[2
8])
%
x
为最小值点
%fval为最小值
%
exitflag=1表示函数收敛于解;反之,=0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询