作业帮 > 综合 > 作业

Matlab 怎样使每个函数的结果都输出呢

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/22 15:38:00
Matlab 怎样使每个函数的结果都输出呢
function [breakpoint] = TopDown( T,left,right,max_error)
small_T=T(left:right);
best_so_far=inf;
n=length(small_T);
for i=2:n-1
error_split=split(small_T,i);
if error_splitmax_error)
breakpoint=TopDown(T,left,breakpoint,max_error);
end
if (errorsplit(T(breakpoint+1:right))>max_error)
breakpoint=TopDown(T,breakpoint,right,max_error);
end
end
我想把所有的 breakpoint 都输出 但是很显然这样的话 就会只输出最后一个 前面的都覆盖了 能不能 输出一个向量呢
function [error,NewT] = split( T,i )
n=length(T);
NewT=zeros(n,1);
NewT(1:i)=linspace(T(1),T(i),i);
NewT(i:n)=linspace(T(i),T(n),n-i+1);
error=norm(T-NewT,2);
end
function [error] = errorsplit(T)
n=length(T);
NewT=linspace(T(1),T(n),n);
error=norm(T-NewT',inf);
end
附上小函数的代码
不知道楼主要所有满足什么条件的breakpoint;但方法是这样的,topdown可以设置两个输出参数,其中一个是allbp存放楼主想要的breakpoint,先赋值为空矩阵,然后找到满足楼主条件的breakpoint就allbp=[allbp breakpoint];就ok了,如下面的程序,注释加好的表示我加的语句
function [allbp breakpoint] = TopDown( T,left,right,max_error)
allbp=[]; %+++++++++++++++
small_T=T(left:right);
best_so_far=inf;
n=length(small_T);
for i=2:n-1
error_split=split(small_T,i);
if error_splitmax_error)
breakpoint=TopDown(T,left,breakpoint,max_error);
allbp=[allbp breakpoint]; %+++++++++++++++++
end
if (errorsplit(T(breakpoint+1:right))>max_error)
breakpoint=TopDown(T,breakpoint,right,max_error);
allbp=[allbp breakpoint]; %++++++++++++++++
end
end
再问: 这个改法的问题在于 每次递归都会 执行 allbp=[]; 这样的话以前的信息都删除了
再答: 你是说要在主程序里存放所有的断点啊。那就把allbp=[]; allbp=[allbp breakpoint]; 放在主程序里,子函数里的不要了