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)取,我试了下,果然是,所以我想应该没错。
其实要解的问题比较复杂。能不能有最优值还未知晓。
虽然楼上答案不太对,但感谢你的热心,分给你了 展开
其中我们不知道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)取,我试了下,果然是,所以我想应该没错。
其实要解的问题比较复杂。能不能有最优值还未知晓。
虽然楼上答案不太对,但感谢你的热心,分给你了 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询