matlab如何求隐函数(无显式解)极值

比如求f(x1,x2)=g(x1,x2)+h(x1,x2,t)|t=1其中我们不知道h(x1,x2,t)的显式表达式。只知道:dh/dt=k(x1,x2,t)和初值h(x... 比如求f(x1,x2)=g(x1,x2)+h(x1,x2,t)|t=1
其中我们不知道h(x1,x2,t)的显式表达式。只知道:
dh/dt=k(x1,x2,t)和初值h(x1,x2,0)=0..
另外注意的是 h(.)没有显式解,只能用数值解ode求。

因为遇到的问题比较复杂,我只能具有举个简单例子说明。

我用fminsearch(fun,...)
function fun=fun()
%必须先解ode数值解
[t,y]=ode('odefun',[0,1],0)

function oddefun=()
f=k(x1,x2,t)

%%%%
我是想,对于每个x1,x2迭代值,都可以求出h(x1,x2,t) 的数值解,然后求极值,但是感觉很难行得通。请教高手怎么解决这个问题?感激不尽
我已经找到解决的方案,楼上给的答案没有用,我这不是解线形最优.
就是在odefun里再加入x1,x2.这样写:
function f=fun(para)
x1=para(1);x2=para(2);
[t,y]=ode('odefun',[0,1],0,x1,x2);
f=g(x1,x2)+y(end);

另写
function dy=odefun(t,y,flag,x1,x2)
dy=h(x1,x2,t);

求极值时就可以
[x,v]=fminsearch('fun',para0);
这样代入初值para0=[x10;x20];程序会解常微分方程,然后会迭代。

有兴趣可试下求极值
f(x1,x2)=4*x1+(x2)^2+h(x1,t)|t=1
其中dh()/dt=2*x1^2*t,h(0)=0;如果直接解(h(x1)|t=1)=(x1^2),则f=x1^2+4*x1+(x2)^2,极值会在(-2,0)取,我试了下,果然是,所以我想应该没错。
其实要解的问题比较复杂。能不能有最优值还未知晓。

虽然楼上答案不太对,但感谢你的热心,分给你了
展开
 我来答
uyrtb
2008-09-10 · TA获得超过1674个赞
知道小有建树答主
回答量:270
采纳率:100%
帮助的人:0
展开全部
用这个linprog试试
具体怎么用不写出来了,你matlab中输入help linprog看下格式

你用的是用来解非线形约束的极小值,如你碰到的情况用线性约束的函数好。
x=linprog(c,A1,b1,A2,b2,v1,v2,x0)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式