jsp613 发表于 2007-11-8 21:11

请问如何在已画出图中寻找最大值或最小值?

如题

花如月 发表于 2007-11-8 21:16

help find

jsp613 发表于 2007-11-8 21:33

find似乎都是矩阵操作阿,在上图中,如何找到c使得va最大,请版主说详细点,先谢谢了

TurtleRock 发表于 2007-11-8 22:20

Handle=findobj(gca,'Type','Line');
yData= get(Handle,'yData');
max(yData)

xjzuo 发表于 2007-11-9 15:16

搜索论坛,已经有过此类讨论贴.

jsp613 发表于 2007-11-10 21:24

回复 #4 TurtleRock 的帖子

非常感谢,可是楼上的意思是只能得到图上本身所有的点(我们就是依据这些点作出图像的)的最大值,我要的是这个曲线的最大值。也就说这个函数的最大值。如果这些点的最大值在Workspce中不就可以找到吗?:'(

donkeyxu 发表于 2007-11-10 22:33

如果你的数据够密集就max(Y),便是;
如果不太够密集就:先找max(Y)的点A,然后向两边再各取一个点,三点用ax^2+bx+c拟和,然后再算出最大点就是
如果还不够密集,那就算了,无意义。

gerry 发表于 2007-11-11 14:55

其实LZ的意思是, 既然已经根据已知点做出了曲线,如何能直接读出该曲线的数据呢
contour是可以返回曲线值的

如果LZ的曲线是plot生成的话,线形插值不会生成极值点,矩阵的最值应该就是函数的极值!

[ 本帖最后由 gerry 于 2007-11-11 16:50 编辑 ]

jsp613 发表于 2007-11-11 19:42

实际程序如下:
syms va c
n=400;r=0.006;P=0.010;ha=0.002;
theta=atan(P/(pi*(r+r-ha)));
beita=0.2;
gamma=ha/c;
h1=c+ha;
h2=c;
w=2*pi*n/60;
B1=(1-beita)*P*cos(theta);
B2=beita*P*cos(theta);
u1=w*(r-c*gamma)*cos(theta)-va*sin(theta);
w1=w*(r-c*gamma)*sin(theta)-va*cos(theta);
u2=w*r*cos(theta)-va*sin(theta);
w2=w*r*sin(theta)-va*cos(theta);
SB1=(r-c*gamma)*(1-beita);
SB2=r*beita;
S=((r/2*sqrt(r^2+P^2/(4*pi^2))+(P^2/(4*pi^2)/2)*log(r+sqrt(r^2+P^2/(4*pi^2))))-((r-c*gamma)/2*sqrt((r-c*gamma)^2+P^2/(4*pi^2))+(P^2/(4*pi^2)/2)*log((r-c*gamma)+sqrt((r-c*gamma)^2+P^2/(4*pi^2)))))/P;
dp1=(6*w1*w2/c^2)*(beita*gamma/((1-beita)*w1+(1+gamma)^3*w2));
dp2=-(6*w1*w2/c^2)*((1-beita)*gamma/((1-beita)*w1+(1+gamma)^3*w2));
Fx1=(-u1/h1)*SB1;
Fx2=(-u2/h2)*SB2;
Fz1=(-(h1/2)*dp1-w1/h1)*SB1;
Fz2=(-(h2/2)*dp2-w2/h2)*SB2;
Fzz=-dp1*B1*S;
Fa=(Fx1+Fx2)*sin(theta)-(Fz1+Fz2)*cos(theta)-Fzz*cos(theta);

F=Fa;
v=solve(F,'va');
c=linspace(0.0004,0.0006,21);
va=v(2);
va2=v(1);
va=subs(va);
va2=subs(va2);
h0=h1*h2*(B1*w1*h2.^2+B2*w2*h1.^2)./(B1*w1*h2.^3+B2*w2*h1.^3);
h0=subs(h0);
h1=subs(h1);
h2=subs(h2);
if (h2<h0)&(h0<h1)
   va=va;
else va=va2;
end
plot(c,va)
title('va-c')
xlabel('c')
ylabel('va')
由于va是隐函数,所以很求得va的最大值。
其实我要求的是va关于c的函数的最大值。不知道各位有什么好办法

花如月 发表于 2007-11-11 19:55

曲线是根据数据点画出来了,数据点的最大值就可以认为是曲线的最值了。

如果有解析方法求最值当然最好,如果没有解析方法,用数据的最值代替最大值

误差也是可以接受的。应该不会再有什么更精确的方法了

donkeyxu 发表于 2007-11-11 19:59

回复 #9 jsp613 的帖子

max(va);足够了吧。

[ 本帖最后由 donkeyxu 于 2007-11-11 20:32 编辑 ]

花如月 发表于 2007-11-11 21:23

原帖由 donkeyxu 于 2007-11-11 19:59 发表 http://www.chinavib.com/forum/images/common/back.gif
max(va);足够了吧。
我正是这个意思

donkeyxu 发表于 2007-11-11 21:44

回复 #12 花如月 的帖子

是啊,我知道你的意思,楼主不知道需要多精确,我看图上很精确了。

jsp613 发表于 2007-11-12 10:01

回复 #11 donkeyxu 的帖子

第一个图c的范围是0.0001—0.004,从一个图可看出va的最大值大概在c为0.0004—0.0006之间,因而第二个图c的范围给为0.0004—0.0006。
要想得到解析解,请问各位上述程序如何修改?

donkeyxu 发表于 2007-11-12 17:28

回复 #14 jsp613 的帖子

解析解就是拟合出来的,如果只要最大值完全没有必要得到解析式,而且解析给出来的还没有直接对数据操作得来的最大值好。
页: [1] 2
查看完整版本: 请问如何在已画出图中寻找最大值或最小值?