24小时热门版块排行榜    

查看: 3820  |  回复: 10

c123_5

铁虫 (初入文坛)

[求助] matlab解决重心法选址问题,运行不了啊,求助各位大神

这是代码,我是R2013a版的,各位大神帮忙看看啊,我才刚开始接触matlab
function T=TotalCost
x0=0;
y0=0;
x1=0;
y1=0;
a=[0.04,0.04,0.095,0.095,0.095];
w=[5000,7000,3500,3000,5500];
x=[3,8,2,6,8];
y=[8,2,5,4,8];
d=[0,0,0,0,0];
T0=200;
T1=100;
while(T1-T0<=0)                                             
T0=0;
T1=0;
a1=0;
a2=0;
b1=0;
b2=0;
x0=x1;
y0=y1;
d(i)=sqrt((x0-x(i))^2+(y0-y(i))^2);
T0=T0+a(i)*w(i)*d(i);
end
for i=1:5
    a1=a1+a(i)*w(i)*x(i)/d(i);
    a2=a2+a(i)*w(i)/d(i);
    b1=b1+a(i)*w(i)*y(i)/d(i);
    b2=b2+a(i)*w(i)/d(i);
end
x1=a1/a2;
y1=b1/b2;
for i=1:5
   d(i)=sqrt((x(i)-x1)^2+(y(i)-y1)^2);
   T1=T1+a(i)*w(i)*d(i);
end
T0;
T1;
end
x1;
y1;
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖


感谢参与,应助指数 +1
fegg7502: 金币+1, 3ks 2013-05-04 19:41:26
描述问题,你有什么输入,需要什么输出?
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2013-04-30 18:43:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

c123_5

铁虫 (初入文坛)

引用回帖:
2楼: Originally posted by libralibra at 2013-04-30 18:43:28
描述问题,你有什么输入,需要什么输出?

就是设施选址的重心法,就是比如说有六个地点,要选择一个配送中心,这个中心到这六个点的运送货物的流量已知,单位费用已知,求这个点,使之到这六个点的配送总费用最小的问题。。。。六个点的坐标已知,求这个点的坐标。。。。非常感谢!
3楼2013-04-30 19:12:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

★ ★
ben_ladeng: 专家考核 2013-04-30 20:46:06
csgt0: 金币+2, 谢谢 2013-05-02 09:47:29
引用回帖:
3楼: Originally posted by c123_5 at 2013-04-30 19:12:45
就是设施选址的重心法,就是比如说有六个地点,要选择一个配送中心,这个中心到这六个点的运送货物的流量已知,单位费用已知,求这个点,使之到这六个点的配送总费用最小的问题。。。。六个点的坐标已知,求这个点 ...

这个你直接按照重心定义求就可以了吗?看做6个质点,每个质点有质量(流量*单位费用),然后直接求加权平均就行了
CODE:
a=[0.04,0.04,0.095,0.095,0.095];
w=[5000,7000,3500,3000,5500];
x=[3,8,2,6,8];
y=[8,2,5,4,8];
m = a.*w;
n = sum(m);
c(1) = x*m'/n;
c(2) = y*m'/n;
figure,hold on;
scatter(x,y,50,'filled') % 站点
scatter(c(1),c(2),100,'filled') % 重心

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
4楼2013-04-30 19:52:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

c123_5

铁虫 (初入文坛)

引用回帖:
4楼: Originally posted by libralibra at 2013-04-30 19:52:12
这个你直接按照重心定义求就可以了吗?看做6个质点,每个质点有质量(流量*单位费用),然后直接求加权平均就行了
a=;
w=;
x=;
y=;
m = a.*w;
n = sum(m);
c(1) = x*m'/n;
c(2) = y*m'/n;
figure,hold on;
s ...

这个是可以,但是还需要有个迭代的过程,麻烦您看一下附件

FT4SR5%3DHWA6UH(MGD((IQ.jpg



QQ截图20130430211920.png



QQ截图20130430211930.png

5楼2013-04-30 21:20:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

c123_5

铁虫 (初入文坛)

引用回帖:
4楼: Originally posted by libralibra at 2013-04-30 19:52:12
这个你直接按照重心定义求就可以了吗?看做6个质点,每个质点有质量(流量*单位费用),然后直接求加权平均就行了
a=;
w=;
x=;
y=;
m = a.*w;
n = sum(m);
c(1) = x*m'/n;
c(2) = y*m'/n;
figure,hold on;
s ...

我发的那段代码是网上课件里的,需要用到迭代法但我用matlab运行了,上面说是语句有错误,我正在写篇论文,所以很需要用matlab。。。
6楼2013-04-30 21:21:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

c123_5

铁虫 (初入文坛)

引用回帖:
4楼: Originally posted by libralibra at 2013-04-30 19:52:12
这个你直接按照重心定义求就可以了吗?看做6个质点,每个质点有质量(流量*单位费用),然后直接求加权平均就行了
a=;
w=;
x=;
y=;
m = a.*w;
n = sum(m);
c(1) = x*m'/n;
c(2) = y*m'/n;
figure,hold on;
s ...

这是那个课件里的资料,以及运行结果

QQ截图20130430211930.png



QQ截图20130430212740.png



QQ截图20130430212747.png

7楼2013-04-30 21:28:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖


fegg7502: 金币+1, 鼓励交流 2013-05-04 19:41:51
引用回帖:
5楼: Originally posted by c123_5 at 2013-04-30 21:20:26
这个是可以,但是还需要有个迭代的过程,麻烦您看一下附件

FT4SR5%3DHWA6UH(MGD((IQ.jpg

QQ截图20130430211920.png

QQ截图20130430211930.png
...

迭代是可以,问题是既然是重心法,直接能求出来重心,为何要舍近求远取用迭代?不太理解
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
8楼2013-04-30 22:00:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

c123_5

铁虫 (初入文坛)

引用回帖:
8楼: Originally posted by libralibra at 2013-04-30 22:00:22
迭代是可以,问题是既然是重心法,直接能求出来重心,为何要舍近求远取用迭代?不太理解...

因为可能他不是最优,要有一个验证的过程,可以求偏导,也可以用迭代,迭代不是较容易编程吗?您能看出来问题出在哪了吗?
9楼2013-05-01 00:04:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

c123_5

铁虫 (初入文坛)

那个重心是一个粗糙的结果,后面的迭代其实是为了取最优值,使偏导数等于零,大神帮忙看一下吧
10楼2013-05-03 23:37:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 c123_5 的主题更新
信息提示
请填处理意见