matab出现何用未知错误急待解决~

来源:百度知道 编辑:UC知道 时间:2024/06/09 19:59:51
我想用matlab设计模式识别中的感知函数,但是在编译出现错
???Undefined function or method 'uminus' for input arguments of type 'cell'.
Error in ==> JP at 26
Y=[c1,-c2];
不知怎么解决,急求解答~请高手相助~~~

以下是我写的程序 ~

%c1,c2代表的是两类样本
function a=JP(c1,c2,varargin)
%第三个变量b是余量,引入余量使得解向量严格位于解区之中
%默认值为0
b=0;
%第四个参数是修正次数times
%这里设为1000
times=1000;

c1={[3 0]';[6 0]';[3 3]'};
c2={[-3 -3]';[-3 0]';[0 -3]'};
sample=[2,2]';
[d1,n1]=size(c1);
[d2,n2]=size(c2);
%两类样本必须维数一致
if d1~=d2
error('样本维数必须一致');
end
%增广样本向量
c1=[ones(1,n1);c1];
c2=[ones(1,n2);c2];
%将样本规范化
Y=[c1,-c2];
%权向量a为d^=d+1维向量
%设初始值a(0)=0
%固定增量修正
a=zeros(d1+1,1);
i=0;
while (i<=times)
%没有错分的样本,则程序循环结束
if 0==any(a'*Y<=b)
break
end
%如果有错分样本,则修改a的值
%sum(Y(a'*Y<=b,:),1).'取错分的样本,按行相加,结果是列向量,再

负号不能加到元胞数组外面,即c2是元胞数组,前面不能有-或用uminus函数

楼主为何一定要用 元胞啊

clc
clear all
%第三个变量b是余量,引入余量使得解向量严格位于解区之中
%默认值为0
b=0;
%第四个参数是修正次数times
%这里设为1000
times=1000;

c1=[[3 0];[6 0];[3 3]];
c2=[[-3 -3];[-3 0];[0 -3]];
sample=[2,2];
[d1,n1]=size(c1);
[d2,n2]=size(c2);
%两类样本必须维数一致
if d1~=d2
error('样本维数必须一致');
end
%增广样本向量
c1=[ones(1,n1);c1];
c2=[ones(1,n2);c2];
%将样本规范化
Y=[c1,-c2];
%权向量a为d^=d+1维向量
%设初始值a(0)=0
%固定增量修正
a=zeros(d1+1,1);
i=0;
while (i<=times)
%没有错分的样本,则程序循环结束
if 0==any(a'*Y<=b)
break
end
%如果有错分样本,则修改a的值
%sum(Y(a'*Y<=b,:),1).'取错分的样本,按行相加,结果是列向量,再转置成行向量
a=a+sum(Y(:,a'*Y<=b),1).';
i=i+1;
end
%将a转化为单位向量,即解向量a确定
a=a/sqrt(sum(a.^2))

%设置一个flag用来指示属于哪一类,若flag=0则属于第一类,否则属于第二类
if a*sample>0
flag=0
else a*sam