请matlab高手帮忙分析一下这个程序。详细解释每一步什么意思!答案满意加分!

w1=[0.16.8-3.52.04.13.1-0.80.95.03.9;1.17.1-4.12.72.85.0-1.31.26.44.0];w2=[7.1-1.44.5... w1=[0.1 6.8 -3.5 2.0 4.1 3.1 -0.8 0.9 5.0 3.9; 1.1 7.1 -4.1 2.7 2.8 5.0 -1.3 1.2 6.4 4.0];
w2=[7.1 -1.4 4.5 6.3 4.2 1.4 2.4 2.5 8.4 4.1;4.2 -4.3 0.0 1.6 1.9 -3.2 -4.0 -6.1 3.7 -2.2];
ww1=[ones(1,size(w1,2)); w1];
ww2=[ones(1,size(w2,2)); w2];
X=[ww1 -ww2];
k=1;
W=ones(size(X,1),1);
ok=0;
while(ok==0)
for i=1:size(X,2)
if (W'*X(:,i)<0) k=k+1;
W=W+X(:,i);
break;
else
if (i==size(X,2)) ok=1;
end
end
end
end
figure(1)
plot(w1(1,:),w1(2,:),'r.')
hold on
plot(w2(1,:),w2(2,:),'*')
xmin=min(min(w1(1,:)),min(w2(1,:)));
xmax=max(max(w1(1,:)),max(w2(1,:)));
ymin=min(min(w1(2,:)),min(w2(2,:)));
ymax=max(max(w1(2,:)),max(w2(2,:)));
xindex=xmin-1:(xmax-xmin)/100:xmax+1;
yindex=-W(2)*xindex/W(3)-W(1)/W(3);
plot(xindex,yindex)
展开
 我来答
燕园飞翔
2011-10-23 · TA获得超过409个赞
知道答主
回答量:40
采纳率:0%
帮助的人:81.3万
展开全部
你透露的信息太少了,起码应该告知一下这个程序是用来干什么的,大概用的是什么算法啊。
看来只能猜了,从最后画出的图来看,感觉这个程序的目的用逼近的方法得到一条分界线的样子,具体是什么算法,看不出来。你看看我的注解,自己研究一下吧。
在网页里可能显得比较乱,你复制粘贴到matlab的编辑器了再看吧。

w1=[0.1 6.8 -3.5 2.0 4.1 3.1 -0.8 0.9 5.0 3.9; 1.1 7.1 -4.1 2.7 2.8 5.0 -1.3 1.2 6.4 4.0]; %输入第一组十个点的平面坐标w1,对应图中的红点
w2=[7.1 -1.4 4.5 6.3 4.2 1.4 2.4 2.5 8.4 4.1;4.2 -4.3 0.0 1.6 1.9 -3.2 -4.0 -6.1 3.7 -2.2];%输入第二组十个点的平面坐标w2,对应图中的蓝星
ww1=[ones(1,size(w1,2)); w1]; %将2行10列的w1前面增加一个全为1的行,将其扩展为3行10列的ww1
ww2=[ones(1,size(w2,2)); w2]; %将2行10列的w2前面增加一个全为1的行,将其扩展为3行10列的ww2
X=[ww1 -ww2]; %将3行10列的ww1和ww2,合并成3行20列的X
k=1; % k在这里应该是定义了一个逼近次数的计数器
W=ones(size(X,1),1); % 感觉W应该是初始化了一个3行1列的向量,里面存得三个数用于得到最后的那条直线
ok=0; %给ok赋初值0, ok在这里应该是定义了一个循环结束的标志,
while(ok==0) %ok初始值为0,当ok的值变为1的时候,下面的循环语句就跳出了
for i=1:size(X,2) %i从1增加到20,相当于一个数组指针,依次对X中的各个列进行操作
if (W'*X(:,i)<0) %这是if语句整个程序的关键,真正的算法就在这里实现,
k=k+1;
W=W+X(:,i); %如果W与X的第i列的点积小于零,则将W与X的第i列进行加和,并赋值给W
break; %跳出for循环体
else
if (i==size(X,2)) %如果W与X的第i列的点积不小于零,则需要看一下是否已经对X中的20组数都进行了判断,
ok=1; %如果已经对X中的20组数都进行了判断,则结束while循环,结束逼近过程
end
end
end
end
figure(1) %新建一个图像窗口
plot(w1(1,:),w1(2,:),'r.') %绘制第一组的十个点,用红点表示
hold on %保持刚才绘制的十个点不被清除,继续绘图
plot(w2(1,:),w2(2,:),'*') %绘制第二组的十个点,用蓝星表示
xmin=min(min(w1(1,:)),min(w2(1,:))); %得到20个点的最小x值
xmax=max(max(w1(1,:)),max(w2(1,:))); %得到20个点的最大x值
ymin=min(min(w1(2,:)),min(w2(2,:))); %得到20个点的最小y值
ymax=max(max(w1(2,:)),max(w2(2,:))); %得到20个点的最大y值
xindex=xmin-1:(xmax-xmin)/100:xmax+1; %生成一个x序列,用于绘制直线
yindex=-W(2)*xindex/W(3)-W(1)/W(3); %计算直线与上面的x序列相对应的y坐标
plot(xindex,yindex) %绘制直线
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机汇编程序是用汇编语言编写的程序,用于控制单片机的操作。汇编语言是一种比较接近计算机硬件语言的低级语言,相对于高级语言来说更容易理解和实现。下面是单片机汇编程序的基本步骤:1. 将代码和数据汇编到规定的段中。2. 在存储器中用未初始化的... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式