matlab问题,大家来讨论!!!

来源:百度知道 编辑:UC知道 时间:2024/05/23 13:47:16
不知道为什么,我的提问不见了。。好奇怪啊,积分也扣了,可是没看到题目~~无耻啊无耻
http://zhidao.baidu.com/question/66293772.html
这个问题
greatdju的回答,我现在要实现的功能是,如果s(j)为空的,把最大的s(j)(j范围是1~N)一分为2,乘以(1+e),(1-e)
并且计算每一个的形心,由新的形心租车vec3,vec3长度就为N了
如何编程?

(P.S.
这里形心的计算问题
比如aa=[1,2,3;4,5,6]可以用mean(aa)
但是如果aa=[1,2,3],就不能用mean了,直接返回aa
。。。
如此)
回1楼
呵呵,两个s(j)不是一回事
就是说,s中一个由N个数组,而根据上面原则划分,N个数组的长度并不一样,如果由数组是空的,必须舍弃这个数组,同时,为了保证S这个集合中仍然由N个数组,把原来s中最大的数组分裂成两个

%以下为上次回答部分
clear;clc;
m=10;N=5;
vec1=rand(m,3);
vec2=rand(N,3);
s=cell(1,N);
for i=1:m
[val,j]=min(sqrt(sum((repmat(vec1(i,:),N,1)-vec2).^2,2)));
s{j}=[s{j};vec1(i,:)];
end
%以下为分裂部分,永远用那个最长的数组分裂
for i=1:N
len(i)=size(s{i},1);
end
[val,j]=max(len);
for i=find(len==0)
s{i}=s{j}*(1-exp(1));
s{j}=s{j}*(1+exp(1));
end
%以下为求平均值部分
for i=1:N
vec3(i,:)=mean(s{i},1);
end

回答楼上
是这样的
s中由N个数组
如果其中有一个数组为空假如是s(j),我们把它去掉
为了保证总数目不变
将s中的另外一个数组(包含矩阵最多的)进行分裂,比如这个数组为s(i)=aa,分裂成两个数组就是aa*(1-e) aa*(1+e)
这样,一个占原来位置,一个则用来替代去掉的空的数组
变成s(i)=aa*(1-e) s(j)=aa*(1+e)