a=zeros(20,75);%20个老师,每个老师75张卷的任务
s=zeros(20,1); %每个老师已分配的任务数,初始都是0
for j=1:500 %500份试卷要分配
r=nan;
for i=1:3 %同一份试卷,要分配三次
R=find(s==min(s)); %找到分配任务数最少的老师
R=R(R~=r); %同一份试卷,不能分给同一个老师
r=R(randi(length(R))); %将试卷随机分配给可选的老师中的一个
C=find(a(r,:)==0); %找到该老师任务的空位
c=C(randi(length(C))); %随机选一个任务位置
a(r,c)=j; %将这第j份试卷分配给这个老师的这个任务空位
s(r)=s(r)+1; %该老师的已分配任务数加1
end
end
当然以上的方法保证a每一行不同,但是a中同一列有可能相同
如果需要同行全不相同,同列也都不相同,下面代码可以实现
实际上是用对角线(斜方向)填充办法,保证相同的三个数不会
填充在同一行和同一列,然后再整行,整列地打乱矩阵的顺序
因为数据是整行整列地变动的,所以顺序打乱之后依旧保持
同行不相同,同列不相同
a=zeros(20,75);
i=0;j=0;
for m=randperm(500)
for n=1:3
i=mod(i,20)+1;
j=mod(j,75)+1;
if(a(i,j)~=0),i=mod(i,20)+1;end
a(i,j)=m;
end
end
a=a(randperm(20),randperm(75));
同行不同意义是明显的,因为同一张卷,一个老师不会改两次以上
而同一列不同,有时候也是有意义的
假设老师评卷是流水作业,也就是每以轮任务所有老师是同时工作的
那么保证同列不同,就不会出现在同一轮任务中,两个老师抢一张卷的情况
可以最高效率地分配完成任务
放在一个m文件中即可,但还需要你自己给出初始值,上下限等,不然结果会令你很失望
function [] = cxd()
clear;
clc;
%lb=[0 495];
%ub=[10 522];
[x,fval]=fmincon(@myfun,[1;1],[],[],[],[],[],[],@mycon2) %%%% 主函数
function [c,ceq]=mycon2(x)
c=[x(2)-5200;
2x(2)/1000-600810^-3;
2+00015x(2)-59910^-3;
135(x(2)+600810^-3-2)/(599x(2)10^-3-2)-1863];
ceq=pi(x(2)^3/12+x(1)x(2)^2/4)-7510^10;
function f=myfun(x)
e=10;
f=785pix(1)(x(2)+600810^-3x(2))600810^-3x(2)10^-6+54165pi59910^-3x(2)(x(2)+59910^-3x(2))^210^-6;
基本解答如下:
(1-1):
function [b,y] = by(m,n)
b=lcm(m,n);%最小公倍数
y=gcd(m,n);%最大公约数
end
(1-2):
function t=sushu(n)
m=floor(sqrt(n));
for i=2:m
if mod(n,i)==0
t=0;
break;
else
t=1;
end
end
end
(2):可以一次算出每一项,发现他们都是同一个值,这个值的求法:SUM=sum(1:n^2)/n;%n阶魔幻阵特有的和
function [A,H,L,DJ,SUM]=mag(n)
A=magic(n);%产生一个n阶魔幻阵
H=sum(A);%每行的和
L=sum(A);%每列的和
DJ=sum(diag(A));%对角线和
SUM=sum(1:n^2)/n;%n阶魔幻阵特有的和
end
(3):这题我给出“该数各位数字之和为奇数”的求法,结合上面有判断素数的代码自己可以求出
该数各位数字之和为奇数:
function funct
for i=2:999
%l=floor(log10(i))+1; %提取位数
n1=floor(i/100); %取出百位数字n1
n2=mod(floor(i/10),10); %取出十位数字n2
n3=mod(i,10) ; %取出个位数字n3
nsum=n1+n2+n3;
if rem(nsum,2)~=0%判断是否为奇数
disp (i);
end
end
end
自己可以调试看看,祝你成功!
代码
function
main()
%
一、要求写出窗口运行过程及结果
%
%
1.利用Matlab求函数f(x)=-x2+ex+lnx的导数、不定积分和1到10区间的定积分及趋于1的极限。
%
clc;
clear
all;
close
all;
syms
x
fx
=
-x^2
+
exp(x)
+
log(x);
dfx
=
diff(fx,
x)
ifx
=
int(fx,
x)
iabfx
=
int(fx,
x,
1,
10)
limfx
=
limit(fx,
x,
1)
%
2.用matlab函数解方程:①x5+3=0;②y5(t)+2y=5t
。
%
clear
all;
syms
x
y
t
eq1
=
x^5
+
3;
eq2
=
y^5
+
2y
-
5t;
solve(eq1,
x)
solve(eq2,
y)
%
二、Matlab语言编写程序(写出建立函数的过程、程序代码和调用时的运行结果)
%
%
不用Matlab自身的求和函数,建一个a到b的求和函数文件,已知a和b为正整数。
%
s
=
test_add(1,
2)
function
s
=
test_add(a,
b)
s
=
a
+
b;
%
三、矩阵A(:,5)、A(3,:)、A(3,10:20)、B=A(2:2:end,:)分别表示什么意义?
%
A(:,5)取矩阵A的第5列
%
A(3,:)取矩阵A的第3行
%
A(3,10:20)取矩阵A的第3行,第10到20列
%
B=A(2:2:end,:)将矩阵A的第2、4、……行赋予矩阵B
结果
dfx
=
exp(x)
-
2x
+
1/x
ifx
=
exp(x)
-
x
+
xlog(x)
-
x^3/3
iabfx
=
exp(10)
-
exp(1)
+
10log(10)
-
342
limfx
=
exp(1)
-
1
ans
=
-3^(1/5)
3^(1/5)(5^(1/2)/4
+
1/4
-
(2^(1/2)(5
-
5^(1/2))^(1/2)i)/4)
3^(1/5)(5^(1/2)/4
+
1/4
+
(2^(1/2)(5
-
5^(1/2))^(1/2)i)/4)
3^(1/5)(1/4
-
5^(1/2)/4
+
(2^(1/2)(5^(1/2)
+
5)^(1/2)i)/4)
-3^(1/5)(5^(1/2)/4
-
1/4
+
(2^(1/2)(5^(1/2)
+
5)^(1/2)i)/4)
ans
=
RootOf(X61^5
+
2X61
-
5t,
X61)
s
=
3
>>
以上就是关于MATLAB编出程序全部的内容,包括:MATLAB编出程序、matlab主程序编写、几个简单的matlab程序编写~~求帮助·等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)