高手帮忙修改一下这个Matlab程序
y=207.1
289.9
303.15
305.3
350
351
375.3
386.6
387
402.5
405.5
408
410.6
426.5
446.3
448.8
449.4
453.25
456.82
458
465.78
469
471.6
473.56
486.4
488.2
490
490
491.6
494
494.4
498.6
499
499.5
506.1
506.8
511.3
526
527
531.6
532.6
551
558.4
579
581
582
592.5
596
654.6
668
669
685
739.3
764
800
807.8
;%给定已知的序列
A=sort(y);
n=length(A);
%求变差
D=zeros(n);
for i=1:n
for j=i:n
x(i,j)=sum(A(i:j))/(j-i+1);
D(i,j)= sum((A(i:j)-x(i,j)).^2);
end
end
H=zeros(n);
M=zeros(n);
H(1,:)=D(1,:);
%计一算所有的损失函数
for k=2:n
for m=k:n
R=zeros(1,m-k+1);
for i=k-1:m-1
R(i-k+2)=H(k-1,i)+D(i+1,m);
end
t=find(R==min(R));
H(k,m)=R(t);
M(k,m)=t+k-2;
end
end
%根据图象确定分类数k
x=1:54;
y=H(2:55,n)';
plot(x,y,'r.-')
xlabel('分类数')
ylabel('L[p(n,k)]')
%找出分类区间
T(k)=n;
jujian(k)=A(T(k-1)+1:n)
for t=k-1:1
T(t)=M(k,T(t+1));
jujian(t+1)=A(T(t)+1:T(t))
Point(t)=A(T(t));
end
jujian(1)=A(1:T(1))
答案:有几个问题:
(1)给y赋数组应用方括号。
(2)因R中有两个最小值,因而t=find(R==min(R))得出的是一个数组而不是一个数值。
(3)jujian(k)=A(T(k-1)+1:n)中左边是一个元素,而右边是一个数组,不匹配。
(4)jujian(1)=A(1:T(1))中T(1)=0,因此A(1:0)语法上错误。可能其中T的算法有误
y=[207.1
289.9
303.15
305.3
350
351
375.3
386.6
387
402.5
405.5
408
410.6
426.5
446.3
448.8
449.4
453.25
456.82
458
465.78
469
471.6
473.56
486.4
488.2
490
490
491.6
494
494.4
498.6
499
499.5
506.1
506.8
511.3
526
527
531.6
532.6
551
558.4
579
581
582
592.5
596
654.6
668
669
685
739.3
764
800
807.8];
;%给定已知的序列
A=sort(y);
n=length(A);
%求变差
D=zeros(n);
for i=1:n
for j=i:n
x(i,j)=sum(A(i:j))/(j-i+1);
D(i,j)= sum((A(i:j)-x(i,j)).^2);
end
end
H=zeros(n);
M=zeros(n);
H(1,:)=D(1,:);
%计一算所有的损失函数
for k=2:n
for m=k:n
R=zeros(1,m-k+1);
for i=k-1:m-1
R(i-k+2)=H(k-1,i)+D(i+1,m);
end
t=find(R==min(R));
H(k,m)=min(R);
M(k,m)=t(1)+k-2;
end
end
%根据图象确定分类数k
x=1:54;
y=H(2:55,n)';
plot(x,y,'r.-')
xlabel('分类数')
ylabel('L[p(n,k)]')
%找出分类区间
T(k)=n;
jujian(:,k)=A(T(k-1)+1:n);
for t=k-1:1
T(t)=M(k,T(t+1));
jujian(:,t+1)=A(T(t)+1:T(t));
Point(t)=A(T(t));
end
jujian(:,1)=A(1:T(1));
上一个:使用matlab绘制曲面z=1000*[ln(x)/ln(y)],求代码。。。。
下一个:一个matlab语句分析