当前位置:编程学习 > Matlab >>

matlab编程请教,请大家看看我的问题

有50单位的东西要分给10个人,10个人的需求等级有4类,用数字1-4表示,对应分给的东西分别为2,4,6,8.而且分配必须满足先对等级高的分配,我的程序没有实现按等级分配,请各位高手指教一二,不胜感谢! 10人等级矩阵:A=[3 4 4 3 2 1 2 4 3 1]; 若足够分配,则理论对应的分配矩阵:B=[6 8 8 6 4 2 4 8 6 2]; 优先满足高等级需求. clear all T=50; t=0; A=[3 4 4 3 2 1 2 4 3 1]; for i=1:10 if A(i)==4 B(i)=8; t=t+B(i); if t<=T X(i)=1; else X(i)=0 end elseif A(i)==3 B(i)=6; t=t+B(i); if t<=T X(i)=1; else X(i)=0 end elseif A(i)==2 B(i)=4; t=t+B(i); if t<=T X(i)=1; else X(i)=0 end elseif A(i)==1 B(i)=2; t=t+B(i); if t<=T X(i)=1; else X(i)=0 end end end B; X; 程序结果不对啊,请各位帮我瞅瞅,谢谢!
补充:clear all
T=50;
t=0;
A=[3 4 4 3 2 1 2 4 3 1];
for i=1:10
    if A(i)==4
        B(i)=8;
        t=t+B(i);
        if  t<=T
            X(i)=1;
        else
            X(i)=0;
            t=t-B(i);
        end
    elseif A(i)==3
        B(i)=6;
        t=t+B(i);
        if  t<=T
            X(i)=1;
        else
            X(i)=0;
            t=t-B(i);
        end
    elseif A(i)==2
        B(i)=4;
        t=t+B(i);
        if  t<=T
            X(i)=1;
        else
            X(i)=0;
            t=t-B(i);
        end
    elseif A(i)==1
        B(i)=2;
        t=t+B(i);
        if  t<=T
            X(i)=1;
        else
            X(i)=0;
            t=t-B(i);
        end
    end
end
B;
X;
 程序是这样的,还是不对。
追问:
        	
				
哦,明白了。谢谢
还想再问一个问题。我这里为了简化是写出了每个等级能分多少东西,如果没有标明能分多少东西,而是我个等级分的东西有一个范围呢?比如,等级为1分得的范围为1-2的任意实数,其他等级的也是,分得东西只与优先级有关,怎么处理程序呢?
那你在分的时候可以随机生成一个在范围内的实数就行了,你看一下函数randi的用法就能实现随机生成一个实数,这样的话K要变了,你把每个等级能分的范围都写成一个数组,而用randi生成的实数x可以对应数组里第x个数,这样就行了
主要是这个范围里的数很多啊,能不用K数组吗,有没有别的方法可以实现呢
你可以看下你的程序,很繁琐,我给你的程序用了一个数组来表示优先等级和对应所分东西的个数,这样程序可以简化很多。如果所分东西是个范围的话,不用数组,你怎么从这个范围里随机选一个实数来分呢?你有4个优先等级,可以这样设置:
K=[1 2 3 4];
t1=[……];表示优先等级为1,可以分的范围,比如t1=[1 2 4]表示可以分1个,2个或4个
t2=[……];表示优先等级为2,可以分的范围
t3=[……];表示优先等级为3,可以分的范围
t4=[……];表示优先等级为4,可以分的范围
这样你在编程的时候会简化很多,逻辑性更好了
如果你不想这样表示的话,怎么实现随机呢?
我要实现分得东西的数值不是整数,比如优先级为1,分配范围是1-2的任意实数,可能会有1.12,1.73之类的,可设成 1+rand  是吗?
t4=6+2*rand;
t3=4+2*rand;
t2=2+2*rand;
t1=2*rand;
K=[4 3 2 1;
    t4 t3 t2 t1];
其他的内容不变,得到
B = 5.5296    7.5430    7.5430    5.5296    2.8421    0.1136    2.8421    7.5430    5.5296    0.1136
X = 1     1     1     1     1     1     1     1     1     1
嗯,可以这样设
但是要怎么实现同一级别分配不同的量值呢?上面设置得到的同一级别分配的相同的量值。麻烦再为我解答一下,谢谢
这样的话,这么改:
clear all
clc
T=50;
A=[3 4 4 3 2 1 2 4 3 1];
X=zeros(1,length(A));
tt=[6+2*rand 4+2*rand 2+2*rand 2*rand];
K=[4 3 2 1;tt];
for j=1:4
    for i=1:10
        tt=[6+2*rand 4+2*rand 2+2*rand 2*rand];
        K(2,:)=tt;
        if A(i)==K(1,j)
            if T>=K(2,j)
                B(i)=K(2,j);
                X(i)=1;
            else
                B(i)=T;
            end
            T=T-B(i);
        end
    end
end
B
X
答案:你在分之前没有判断还剩多少单位的东西能分,所以你的结果是对每个人都分了足够的东西,而且你根本没有考虑优先级 
给你我编的程序:
clear all
clc
T=50;
A=[3 4 4 3 2 1 2 4 3 1];
X=zeros(1,length(A));
K=[4 3 2 1;
    8 6 4 2];
for j=1:4
    for i=1:10
        if A(i)==K(1,j)
            if T>=K(2,j)
                B(i)=K(2,j);
                X(i)=1;
            else
                B(i)=T;
            end
            T=T-B(i);
        end
    end
end
B
X

上一个:VC和matlab混合编程,将一个多行矩阵载入matlab中,结果和我放进去的不符合啊
下一个:a=[1,2,3,4,5,6,7,8;2,3,4,5,6,7,8,9]用matlab语言编程实现b=[0.2345678;0.23456789]

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,