声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 988|回复: 2

我写了个最短距离的小程序.可是一直调不成功.哪位大虾帮忙看看?

[复制链接]
发表于 2006-4-29 21:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
%std1.m,用极差标准化法标准化矩阵 <BR>function std=std1(vector) <BR>max=max(vector'); %对列求最大值 <BR>min=min(vector); <BR>[a,b]=size(vector); %矩阵大小,a为行数,b为列数<BR>for i=1:a <BR>    for j=1:b <BR>        std(i,j)= (vector(i,j)-min(j))/(max(j)-min(j)); <BR>    end <BR>end <BR>%min1.m,求矩阵中最小值,并返回行列数及其值 <BR>    function [v1,v2,v3]=min1(vector);%v1为行数,v2为列数,v3为其值 <BR>    [v,v2]=min(min(vector')); <BR>    [v,v1]=min(min(vector)); <BR>    v3=min(min(vector)); <BR>    %min2.m,比较两数大小,返回较小的值 <BR>    function v1=min(v2,v3);<BR>    if v2&gt;v3<BR>v1=v3; <BR>else <BR>    v1=v2; <BR>end <BR>clear all<BR>clc<BR>vector=[0.8415 0.88422<BR>0.93631 0.92439<BR>0.80661 0.88005<BR>1 0.91963<BR>0.76099 1<BR>0.88896 0.94536<BR>0.8496 0.89746<BR>0.8013 0.90538<BR>0.83997 0.92553<BR>0.87082 0.89097<BR>0.85052 0.033711<BR>0.80931 0.046027<BR>0.82045 0.070631<BR>0.79557 0.23267<BR>0.86742 0.05037<BR>0.87928 0.07081<BR>0.81461 0.056466<BR>0.8666 0.17976<BR>0.85147 0.11081<BR>0.83013 0.026908<BR>0.073104 0.81728<BR>0.096218 0.80291<BR>0.1964 0.90333<BR>0.11254 0.95784<BR>0.17569 0.97483<BR>0.1881 0.90578<BR>0.10972 0.92459<BR>0.071924 0.80293<BR>0.1737 0.98663<BR>0.15201 0.88539<BR>0.20787 0.084998<BR>0.030107 0.082605<BR>0.18389 0.042529<BR>0.14797 0.05471<BR>0.094279 0.19933<BR>0.1365 0<BR>0.18611 0.087359<BR>0.11759 0.13434<BR>0 0.019363<BR>0.13852 0.14989<BR>0.46592 0.47153<BR>0.37536 0.54519<BR>0.5069 0.43911<BR>0.51883 0.66284<BR>0.41349 0.47559<BR>0.58517 0.4958<BR>0.58505 0.57272<BR>0.49493 0.49139<BR>0.52174 0.47888<BR>0.51053 0.41941];<BR>vector=ds1(vector); <BR>[a,b]=size(vector); <BR>d=zeros(a); <BR>for i=1:a <BR>    for j=1:a <BR>        for k=1:b <BR>            d(i,j)=d(i,j)+abs(vector(i,k)-vector(j,k)); <BR>        end<BR>        end <BR>    end <BR>    <BR>[a,b]=size(vector); <BR>max=max(max(vector)); <BR>for i=1:a <BR>    for j=i:b <BR>        vector(i,j)=max; <BR>    end <BR>end; <BR>while g&gt;12<BR>[c,d]=size(vector); <BR>    [e,f,g]=min1(vector); <BR>    for l=1:c <BR>        if l&lt;=min2(e,f) <BR>            vector(c+1,l)=min2(vector(e,l),vector(f,l)); <BR>        else <BR>            vector(c+1,l)=min2(vector(l,e),vector(l,f)); <BR>        end <BR>    end; <BR>    vector(1:c+1,c+1)=max;<BR>    vector(1:c+1,e)=max; <BR>    vector(1:c+1,f)=max; <BR>    vector(e,1:c+1)=max; <BR>    vector(f,1:c+1)=max; <BR>end <BR>vector2(2,c)=[1:c;];<BR>if e&lt;=c<BR>    vector2(2,c)=1;<BR>end<BR>if f&lt;=c<BR>    vector2(2,f)=1;<BR>end<BR>m=[];<BR>if e&lt;=c&amp;f&gt;c<BR>    m=[m:e]<BR>end<BR>if e&lt;=c&amp;f&lt;=c<BR>    m=[m:f]<BR>end<BR> if e&lt;=c&amp;f&lt;=c<BR>        m=m+1;<BR>        m=[m;[e,f];<BR>        end;<BR>    end<BR>for j=1:c<BR>     if vector2(2,j)==0<BR>     n=m+j;<BR>  n=n+1;<BR>    end<BR>  end
回复
分享到:

使用道具 举报

 楼主| 发表于 2006-4-29 21:18 | 显示全部楼层
是最短距离聚类的程序
发表于 2006-4-29 21:24 | 显示全部楼层

回复:(fenghongpe)我写了个最短距离的小程序.可是一...

你的那个程序好长啊,最短距离聚类参考下面的代码吧<BR><BR>function result=cluster(vector); <BR>[a,b]=size(vector); <BR>maxv=max(max(vector)); <BR>for i=1:a <BR>for j=i:b <BR>vector(i,j)=maxv; <BR>end <BR>end; <BR>for k=1:(b-1) <BR>[c,d]=size(vector); <BR>fprintf('第%g次聚类:\n',k); <BR>[e,f,g]=min1(vector); <BR>fprintf('最小值=%g,将第%g区和第%g区并为一类,记作G%g\n\n',g,e,f,c+1); <BR>for l=1:c <BR>if l&lt;=min2(e,f) <BR>vector(c+1,l)=min2(vector(e,l),vector(f,l)); <BR>else <BR>vector(c+1,l)=min2(vector(l,e),vector(l,f)); <BR>end <BR>end; <BR>vector(1:c+1,c+1)=maxv; <BR>vector(1:c+1,e)=maxv; <BR>vector(1:c+1,f)=maxv; <BR>vector(e,1:c+1)=maxv; <BR>vector(f,1:c+1)=maxv; <BR>end
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-20 15:30 , Processed in 0.070336 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表