问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于matlab的一个问题,怎样得到一个隐性函数的优化解?

发布网友 发布时间:2023-07-09 17:49

我来回答

2个回答

热心网友 时间:2024-08-18 17:59

1、你给的这个方程是没有实数解的,这可以很简单的从下图看出:

上图是把方程左端对应的曲面,使用下面的一条语句即可绘制:

ezmesh('1000*y/(x^2+y^2+600)^1.5+1000*y/(1.25*x^2+2.25*y^2+600)^1.5',[-100 100])

从图可见,方程左端的取值范围最大只比1稍多一点,不可能等于20,所以方程无解。

 

假如方程有解,比如说,这个例子中我们把方程右端的20换成0.5,那么可以用下面的程序求解(代码文件已作为附件上传):

function zd
c0 = 0.5;
xy0 = [0 100];
opt = optimset('Display', 'iter');

% 图1:在等高线图上标出最大值点
figure(1)
clf
hold on
h = ezcontour('1000*y/(x^2+y^2+600)^1.5+1000*y/(1.25*x^2+2.25*y^2+600)^1.5',[-50 50]);
set(h, 'linestyle', ':')
h = ezplot(['1000*y/(x^2+y^2+600)^1.5+1000*y/(1.25*x^2+2.25*y^2+600)^1.5-' num2str(c0)], [-50 50]);
set(h, 'linew', 2)
h = plot(xy0(1), xy0(2), 'ro', 'markerfacecolor', 'r');

% 优化
xy = fmincon(@obj,xy0,[],[],[],[],[],[],@nonlcon,opt,c0, h);

% 图2:在曲面上标出最大值点
figure(2)
clf
hold on
h = ezmesh('1000*y/(x^2+y^2+600)^1.5+1000*y/(1.25*x^2+2.25*y^2+600)^1.5',[-100 100]);
set(h, 'EdgeAlpha', 0.2, 'FaceAlpha', 0.2);
x = get(h, 'xData');
y = get(h, 'yData');
z = get(h, 'zData');max(z)
plot3(xy(1), xy(2), c0, 'ro', 'markerfacecolor', 'r');
v = [-c0 c0];
[C, h] = contour3(x, y, z, v);
clabel(C, h, v)
view(100,35)


function f = obj(x, c0, h)
% 目标函数尽管不需要使用附加参数c0、h,但必须能够接受此参数
f = -x(2);

function [c,ceq] = nonlcon(x, c0, h)
c = [];
y = x(2);
x = x(1);
ceq = 1000*y/(x^2+y^2+600)^1.5+1000*y/(1.25*x^2+2.25*y^2+600)^1.5 - c0;
% 更新绘图
set(h, 'x', x, 'y', y);
drawnow
pause(0.1)

其实程序中大多数代码与绘图有关,以便于比较形象的把结果表现出来,如下面两个图所示:

 

如果对绘图不感兴趣,只需要下面的几行代码:

function zd
c0 = 0.5;
xy0 = [0 100];
xy = fmincon(@obj,xy0,[],[],[],[],[],[],@nonlcon)
function f = obj(x)
f = -x(2);
function [c,ceq] = nonlcon(x)
c = [];
y = x(2);
x = x(1);
ceq = 1000*y/(x^2+y^2+600)^1.5+1000*y/(1.25*x^2+2.25*y^2+600)^1.5 - 0.5;

需要提醒注意的是,xy0作为优化的初始点比较重要,如果选择不当,可能得不到希望的结果。

 

希望对楼主有帮助,如有问题请追问。

热心网友 时间:2024-08-18 17:59

  你的意思是根据隐函数f(x,y)=0求y的最大值。我这有一个思路:

把y视作x的函数,然后将隐函数两边对x求导。令dy/dx=0,得到一个关于x的方程。

用matlab的solve函数求解这个方程,得到y的极大值点。

从中再穷举找出y的最大值点。因为是实际问题,所以不必担心最大值点在边界或者函数无界的情形。

  

追问有没有matlab程序语言啊
帮我编一下,我不会啊 就编1000y/(x^2+y^2+600)^1.5+1000y/(1.25x^2+2.25y^2+600)^1.5=20这个的

热心网友 时间:2024-08-18 17:59

1、你给的这个方程是没有实数解的,这可以很简单的从下图看出:

上图是把方程左端对应的曲面,使用下面的一条语句即可绘制:

ezmesh('1000*y/(x^2+y^2+600)^1.5+1000*y/(1.25*x^2+2.25*y^2+600)^1.5',[-100 100])

从图可见,方程左端的取值范围最大只比1稍多一点,不可能等于20,所以方程无解。

 

假如方程有解,比如说,这个例子中我们把方程右端的20换成0.5,那么可以用下面的程序求解(代码文件已作为附件上传):

function zd
c0 = 0.5;
xy0 = [0 100];
opt = optimset('Display', 'iter');

% 图1:在等高线图上标出最大值点
figure(1)
clf
hold on
h = ezcontour('1000*y/(x^2+y^2+600)^1.5+1000*y/(1.25*x^2+2.25*y^2+600)^1.5',[-50 50]);
set(h, 'linestyle', ':')
h = ezplot(['1000*y/(x^2+y^2+600)^1.5+1000*y/(1.25*x^2+2.25*y^2+600)^1.5-' num2str(c0)], [-50 50]);
set(h, 'linew', 2)
h = plot(xy0(1), xy0(2), 'ro', 'markerfacecolor', 'r');

% 优化
xy = fmincon(@obj,xy0,[],[],[],[],[],[],@nonlcon,opt,c0, h);

% 图2:在曲面上标出最大值点
figure(2)
clf
hold on
h = ezmesh('1000*y/(x^2+y^2+600)^1.5+1000*y/(1.25*x^2+2.25*y^2+600)^1.5',[-100 100]);
set(h, 'EdgeAlpha', 0.2, 'FaceAlpha', 0.2);
x = get(h, 'xData');
y = get(h, 'yData');
z = get(h, 'zData');max(z)
plot3(xy(1), xy(2), c0, 'ro', 'markerfacecolor', 'r');
v = [-c0 c0];
[C, h] = contour3(x, y, z, v);
clabel(C, h, v)
view(100,35)


function f = obj(x, c0, h)
% 目标函数尽管不需要使用附加参数c0、h,但必须能够接受此参数
f = -x(2);

function [c,ceq] = nonlcon(x, c0, h)
c = [];
y = x(2);
x = x(1);
ceq = 1000*y/(x^2+y^2+600)^1.5+1000*y/(1.25*x^2+2.25*y^2+600)^1.5 - c0;
% 更新绘图
set(h, 'x', x, 'y', y);
drawnow
pause(0.1)

其实程序中大多数代码与绘图有关,以便于比较形象的把结果表现出来,如下面两个图所示:

 

如果对绘图不感兴趣,只需要下面的几行代码:

function zd
c0 = 0.5;
xy0 = [0 100];
xy = fmincon(@obj,xy0,[],[],[],[],[],[],@nonlcon)
function f = obj(x)
f = -x(2);
function [c,ceq] = nonlcon(x)
c = [];
y = x(2);
x = x(1);
ceq = 1000*y/(x^2+y^2+600)^1.5+1000*y/(1.25*x^2+2.25*y^2+600)^1.5 - 0.5;

需要提醒注意的是,xy0作为优化的初始点比较重要,如果选择不当,可能得不到希望的结果。

 

希望对楼主有帮助,如有问题请追问。

热心网友 时间:2024-08-18 17:59

  你的意思是根据隐函数f(x,y)=0求y的最大值。我这有一个思路:

把y视作x的函数,然后将隐函数两边对x求导。令dy/dx=0,得到一个关于x的方程。

用matlab的solve函数求解这个方程,得到y的极大值点。

从中再穷举找出y的最大值点。因为是实际问题,所以不必担心最大值点在边界或者函数无界的情形。

  

追问有没有matlab程序语言啊
帮我编一下,我不会啊 就编1000y/(x^2+y^2+600)^1.5+1000y/(1.25x^2+2.25y^2+600)^1.5=20这个的

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎样打开oppor8315的移动磁盘,我想下点小说都不行 op手机r8315质量好不 酷狗音乐会员怎么开通划算?不同渠道价格对比 酷狗透视卡是什么意思 装甲输送车性能 M59履带式装甲人员输送车性能数据 车厘子和草莓是寒性水果吗-车厘子和草莓是凉性的吗 我想了解国寿鑫福临门年金保险 安卓手机如何把数据迁移到iPhone13上?最详细操作方法,小白都会 BIOS里的CSM是什么啊? 真我gt neo5有耳机孔吗? 隐函数x^y+y^x=3求导 学校铺设的塑胶跑道和假草坪味道很重 有毒吗 大象的外貌描写作文200字 “今日之我优于昨日之我,明日之我优于今日之我”说明了这是 [ ] A... 人总会死,那最有意义的活着应该是怎么样的呢? 一级建造师机电谁讲的最好? 华为手机怎样能下载海尔家立方? 家立方如何添加好友 core币未来前景 世界币前景怎么样 睾丸囊肿,没什么病兆,需要治疗吗? 日本在哪里买扑克牌 cause和lead的区别(初中英语) 爱因斯坦传学生感悟 立普妥20毫克的药可以掰开按10毫克的吃吗?谢谢 急!!!阅读题!!! 规格20mg的盐酸伐地那非药片怎么吃10mg啊? 仿照课文《手指》的写法,为五官写一篇习作 阿托法他汀钙片买成了20mg的,能掰开一半吃吗? 顺产后小腹痛怎么回事、一般要几天才恢复 今天温州潮平时间是什么时候 Matlab,反求导 水泥楼梯铺砖还是铺地毯还是刷地坪漆好 顺产两天过后肚子痛是什么原因 水泥楼梯踏步用毛毡可以吗? 电脑手写输入板多少钱 水泥楼梯踏步板的选购 关于电脑手写输入板的问题 农历六月二十一的潮平时间是什么时候 水泥楼梯踏步板选购技巧 ...画画的那个东西,叫什么来着?数据板?大概要多少钱? 穿衣服能不能有四种颜色? 女人穿衣从头到脚四种颜色好看吗 娇韵诗弹簧水和塑颜水哪个好用 一身衣服加帽子四个颜色好看吗 娇韵诗弹簧精华怎么样 身上衣服加上鞋子有四种颜色了 都很淡 可不是说全身衣服颜色不能超过三... 身上的衣服颜色四种会不会太多 雅诗兰黛胶原水和娇韵诗弹簧水那个好