MATLAB编出程序

MATLAB编出程序,第1张

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程序编写~~求帮助·等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10180843.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存