gty3344 发表于 2008-12-23 22:39

请问 : 如何通过程序在一条曲线中找出最大点

您好,
      我想咨询一个问题,我现在需要对一条时刻变化的曲线进行跟踪,通过编写一个函数找出最大点,也就是最大功率跟踪中要用的,我的问题是 找到最大点以后如何结束程序呢,
      再者,如果条件变化,又如何自己启动程序,找到最大点,多谢,困扰我一周了,我一直没解决。

wwbeyondww 发表于 2008-12-23 23:36

用max不行么?哈哈哈

ch_j1985 发表于 2008-12-23 23:58

回复 沙发 wwbeyondww 的帖子

max只能找到上一时刻的最大值

ChaChing 发表于 2008-12-24 09:32

回复 楼主 gty3344 的帖子

为何不直接列出楼主大略的程序!? 如此易於知道楼主的实际问题

sogooda 发表于 2008-12-24 14:31

回复 楼主 gty3344 的帖子

你的这个问题可以分为两部分,首先是找到最大之后如何停止。找到最大对于已有数据用max就可以,停止程序可以在函数里采用return。
而改变条件之后重新启动程序,我想应该是有循环来随时监听是不是有条件改变,如果条件改变了,就再次调用第一部分的程序就可以了。

gty3344 发表于 2008-12-24 22:53

非常感谢大伙的帮助,我之前可能说的不太清楚,因为我对s函数不太很熟,我不知道怎么写,我把我的程序贴出来麻烦大家再帮我看看,看我的问题在哪。

我要寻找的是u(3)的最大值,当u(8)或u(9)发生变化时,我要重新启动程序寻找最大值。
怎样才能算找到最大值呢,有什么标志么,重新启动的话是不是要在后面加一个多路选择是否重新执行这个s函数,还是可以直接在这个函数里面写,谢谢!

function = mppt(t,x,u,flag)
switch flag,
%%%%%%%%%%%%%%%%%%
% Initialization %
%%%%%%%%%%%%%%%%%%
case 0,
   =mdlInitializeSizes;

%%%%%%%%%%
% Update %
%%%%%%%%%%
case 2,                                             
    sys = mdlUpdate(t,x,u);
   
%%%%%%%%%%
% Output %
%%%%%%%%%%
case 3,                                             
    sys = mdlOutputs(t,x,u);   
case 4,
    sys=mdlGetTimeOfNextVarHit(t,x,u);
%%%%%%%%%%%%%
% Terminate %
%%%%%%%%%%%%%
case 9,                                             
    sys = [];
otherwise
    error(['unhandled flag = ',num2str(flag)]);
end
%end sfundsc1
%
%=============================================================================
% mdlInitializeSizes
% Return the sizes, initial conditions, and sample times for the S-function.
%=============================================================================
%
function =mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates= 0;
sizes.NumDiscStates= 3;
sizes.NumOutputs   = 3;
sizes.NumInputs      = 9;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0= ;
str = [];
ts= [-2 0]; % Inherited sample time
% end mdlInitializeSizes

function sys = mdlUpdate(t,x,u)
   x(1) = max(u(3)) ;如何结束呢?
   我以前是: 判断这个值如果比它前面的大,同时比他后面的大
%if x(3) > (u(3)+10)*(u(7)*(1-u(5)*(exp((u(3)+10-u(1))/(u(4)*u(6)))-1))+u(2)) && x(3) > (u(3)-10)*(u(7)*(1-u(5)*(exp((u(3)-10-u(1))/(u(4)*u(6)))-1))+u(2))
    % x(1) = u(3) ;但是我不知道如何保持输出值一直为最大值?
   x(2)= u(7)*(1-u(5)*(exp((x(1)-u(1))/(u(4)*u(6)))-1))+u(2) ;      %j计算公式
   x(3)= u(3)*(u(7)*(1-u(5)*(exp((u(3)-u(1))/(u(4)*u(6)))-1))+u(2)) ;%j计算公式
sys=x;
%
%=======================================================================
% mdlUpdate
% Handle discrete state updates, sample time hits, and major time step
% requirements.
%=======================================================================
%
%end mdlUpdate
%
%=======================================================================
% mdlOutputs
% Return the output vector for the S-function
%=====================================================================

function sys = mdlOutputs(t,x,u)
    sys(1)= x(1);
    sys(2) = x(2) ;
    sys(3) = x(1)*x(2) ;
   
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampletime=0.0001;
sys=t+sampletime;

[ 本帖最后由 gty3344 于 2008-12-24 22:55 编辑 ]

yufeng 发表于 2008-12-25 14:10

看看max怎么用 你没有理解他的用法
页: [1]
查看完整版本: 请问 : 如何通过程序在一条曲线中找出最大点