你透露的信息太少了,起码应该告知一下这个程序是用来干什么的,大概用的是什么算法啊。
看来只能猜了,从最后画出的图来看,感觉这个程序的目的用逼近的方法得到一条分界线的样子,具体是什么算法,看不出来。你看看我的注解,自己研究一下吧。
在网页里可能显得比较乱,你复制粘贴到matlab的编辑器了再看吧。
w1=[01 68 -35 20 41 31 -08 09 50 39; 11 71 -41 27 28 50 -13 12 64 40]; %输入第一组十个点的平面坐标w1,对应图中的红点
w2=[71 -14 45 63 42 14 24 25 84 41;42 -43 00 16 19 -32 -40 -61 37 -22];%输入第二组十个点的平面坐标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) %绘制直线
60个同学抽60个题目且题号各不相同,用matlab实现,需要使用matlab的randperm函数,代码如下:
代码和运行截图1
截图效果2
tihao=randperm(60);xuehao=1:60;for i=xuehao;disp(sprintf('学号为%d的同学,恭喜你,抽中第%d题\n',i,tihao(i)));end;
好难选择啊,不是一下子灭绝,就是一下子饱和。大家试试吧。
clc;clear
%dP/dt=RP(1-P/K)—BP^2/(A^2+B^2)
K=40000000;R=1063;A=0000001;B=000000000000001;
P=dsolve('DP=RP(1-P/K)-BP^2/(A^2+B^2)','P(0)=5000')
P=simple(P)
P=subs(P)
t=0:10
P=subs(P,'t',t)
plot(t,P)
直方图阈值法
用 MATLAB实现直方图阈值法:
I=imread(' c4jpg ');
I1=rgb2gray(I);
figure;
subplot(2,2,1);
imshow(I1);
title(' 灰度图像')
axis([50,250,50,200]);
grid on; %显示网格线
axis on; %显示坐标系
[m,n]=size(I1); %测量图像尺寸参数
GP=zeros(1,256); %预创建存放灰度出现概率的向量
for k=0:255
GP(k+1)=length(find(I1==k))/(mn); %计算每级灰度出现的概率,将其存入GP中相应位置
end
subplot(2,2,2),bar(0:255,GP,'g') %绘制直方图
title('灰度直方图')
xlabel('灰度值')
ylabel(' 出现概率')
I2=im2bw(I,150/255);
subplot(2,2,3),imshow(I2);
title('阈值150的分割图像')
axis([50,250,50,200]);
grid on; %显示网格线
axis on; %显示坐标系
I3=im2bw(I,200/255); %
subplot(2,2,4),imshow(I3);
title('阈值200的分割图像')
axis([50,250,50,200]);
grid on; %显示网格线
axis on; %显示坐标系
自动阈值法:Otsu法
用MATLAB实现Otsu算法:
clc
clear all
I=imread(' c4jpg ');
subplot(1,2,1),imshow(I);
title('原始图像')
axis([50,250,50,200]);
grid on; %显示网格线
axis on; %显示坐标系
level=graythresh(I); %确定灰度阈值
BW=im2bw(I,level);
subplot(1,2,2),imshow(BW);
title('Otsu 法阈值分割图像')
axis([50,250,50,200]);
grid on; %显示网格线
axis on; %显示坐标系
以上就是关于请matlab高手帮忙分析一下这个程序。详细解释每一步什么意思!答案满意加分!全部的内容,包括:请matlab高手帮忙分析一下这个程序。详细解释每一步什么意思!答案满意加分!、Matlab编程、matlab 数值分析编程 (小程序,请高手赐教)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)