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

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

你透露的信息太少了,起码应该告知一下这个程序是用来干什么的,大概用的是什么算法啊。

看来只能猜了,从最后画出的图来看,感觉这个程序的目的用逼近的方法得到一条分界线的样子,具体是什么算法,看不出来。你看看我的注解,自己研究一下吧。

在网页里可能显得比较乱,你复制粘贴到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)

我给你提供2种方法,一种是直方图阈值法一种是最大类间方差

直方图阈值法

用 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 数值分析编程 (小程序,请高手赐教)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10120862.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存