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
展开
tattackor
2010-05-25 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:863万
展开全部
我采用数值的完全数值的方法

原函数在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
思乡的渔夫
2019-09-11 · TA获得超过3610个赞
知道大有可为答主
回答量:2.2万
采纳率:34%
帮助的人:732万
展开全部
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式