用Matlab求水仙花数,完美数,回文数和亲合数

合集下载

数值分析 - 第1章 MATLAB入门

数值分析 - 第1章 MATLAB入门

(2)>> u=[x,y] u = 7 4 3 -1 -2 -3
3、解: sum=0;a=[4 -1 2 -8 4 5 -3 -1 6 for i=1 : length(a) if a(i)>0, sum=sum+a(i); end end sum sum = 21
-7];
7 5 3 (4)>> d=b(4:-1:1) d = 3 5 7 9 (5)>> e=sort(b) e =
1水仙花数是一个3位自然数应当满足在100999之间2由于还需要满足各位数的立方和等于该数本身因此需要求出该数的每位数字另外我们还要用到取模函数mod和取整函数fix
1.3
习题课
1、通过使用 help 命令来学习使用 date、clock 命令,了解它们的显示格式。 解答:本题的主要目的让学生学习使用 help 命令来学习一些命令的使用方法。 在 MATLAB 中输入 help date 或者 help clock,会得到 date 和 clock 命令的一些说明。结果如下: DATE Current date as date string. S = DATE returns a string containing the date in dd-mmm-yyyy format. 它表示 date 命令的显示结果是按照:天、月、年的格式显示的。 CLOCK Current date and time as date vector. CLOCK returns a six element date vector vector containing the current time and date in decimal form: CLOCK = [year month day hour minute seconds] The first five elements are integers. The seconds element is accurate to several digits beyond the decimal point. FIX(CLOCK) rounds to integer display format. 这是 help clock 的结果,它提示了 clock 命令的显示格式为:年、月、日、小时、分钟、秒。 然后我们分两次输入 date 和 clock 命令后就会得到各自的结果。通过 help 命令的提示我们就可以轻松看懂结果 的意思了。 >> date ans = 22-Oct-2007 >> clock ans = 1.0e+003 * 2.0070 0.0100 0.0220 0.0170 0.0130 0.0313 2、编写一个计算公式,在 MATLAB 中计算一个半径为 3 的圆的周长。 解答:先写出周长计算公式:c=2πr,然后将里边的数学运算法转换成 MATLAB 的运算符为:c=2*pi*r。 下面我们介绍两组语句,它们都可以输出周长的值。 (1) >> r=3; >> c=2*pi*r; >> c c= 18.8496 (2) >> r=3; >> 2*pi*r ans =

matlab计算公式

matlab计算公式

matlab计算公式MATLAB是一种强大的数学计算软件,广泛应用于科学与工程领域。

它提供了丰富的计算功能,包括数值计算、矩阵运算、绘图以及数据分析等。

本文将介绍MATLAB中常用的计算公式及其使用方法。

一、数值计算1. 四则运算在MATLAB中,进行加减乘除等基本运算非常简单。

例如,要计算两个数的和,可以使用如下公式:```matlabsum = a + b;```其中,`a`和`b`是待计算的数值,`sum`则为计算结果。

2. 幂运算如果需要进行幂运算,可以使用`^`操作符,例如:```matlabresult = x ^ n;```这个公式表示将`x`的`n`次方赋值给`result`。

3. 开方运算开方运算可以通过调用`sqrt`函数来实现:```matlabroot = sqrt(x);````x`为待开方的数值,`root`为计算结果。

二、矩阵运算在MATLAB中,矩阵运算也是常见且重要的功能之一。

1. 矩阵相加要计算两个矩阵的和,可以使用如下公式:```matlabresult = matrix1 + matrix2;```其中,`matrix1`和`matrix2`是待相加的矩阵,`result`为计算结果。

2. 矩阵相乘矩阵相乘可以使用`*`操作符,例如:```matlabresult = matrix1 * matrix2;```这个公式表示将`matrix1`和`matrix2`进行乘法运算,并将结果赋值给`result`。

3. 转置矩阵如果需要计算矩阵的转置,可以使用`'`符号,例如:```matlabtranspose = matrix';```这个公式表示将`matrix`进行转置操作,并将结果赋值给`transpose`。

三、绘图功能MATLAB提供了丰富的绘图功能,可以用于生成各种类型的图形,如折线图、散点图、柱状图等。

1. 折线图要绘制折线图,可以使用`plot`函数,例如:```matlabx = 0:0.1:2*pi;y = sin(x);plot(x, y);```这个公式表示生成从0到2π的一系列数据,并计算其对应的正弦值,然后通过`plot`函数将结果绘制成折线图。

第二章 MATLAB数值计算

第二章 MATLAB数值计算
{向量(Vector):是指1×n或n×1的矩阵,即只 有一行或者一列的矩阵。
{矩阵(Matrix):是一个矩形的数组,即二维 数组,其中向量和标量都是矩阵的特例,0×0矩 阵为空矩阵([])。
{数组(Array):是指n维的数组,为矩阵的延 伸,其中矩阵和向量都是数组的特例。
复数(Complex)
以m×n的矩阵a为例,若元素a(i,j)则 对应的“单下标”为s= (j-1)×m+i。
a(1,2) a(4)
a(2,3) a(8)
2. 子矩阵块的产生
子矩阵是从对应矩阵中取出一部 分元素构成的。 (1)全下标方式
例 设矩阵A是已知的66矩阵
A(1:3,2:5) A的前3行,及第2到5列元素构成的子矩阵
数值采用十进制表示,可以用带小 数点的形式直接表示,也可以用科学计 数法,数值的表示范围是10-309~10309 。 例如:
-2、5.67、2.56e-56(表示2.56×10-56)、 4.68e204(表示4.68×10204)
矩阵和数组的概念
{标量(Scalar):是指1×1的矩阵,即只含一个 数的矩阵。
表示数组A和B中的对应元素相乘。A和B数组必 须大小相同,除非其中有一个是标量。
(3) 矩阵和数组的除法(division) 矩阵的除法运算表达式有两种:“A\B”和“A/B”, 运算符为“\”和“/”分别表示左除和右除。 X=B/A是X*A=B的解,B/A=B*A-1。 X=A\B是方程A*X=B的解, A\B=A-1*B。 数组的除法运算表达式有两种:“A.\B”和“A./B”, 表示数组相应元素左除和右除。 A和B数组必须大小相同,除非其中有一个是标量。
产生均匀分布的随机矩阵,元素取值 范围0.0~1.0。 产生正态分布的随机矩阵

matlab编程题整理

matlab编程题整理

作业一1输出x,y两个中值较大的一个值x=input(‘x’);y=input(‘y’);if x>yxelseyend2输入x,计算y的值。

计算函数的值y=x+1,x<0,y=2x-1,x≧0x=input错误!未指定书签。

(‘x);if x<0y=x+1elsey=2*x-1end3输入一学生成绩,评定其等级,方法是:90~100分为“优秀”,80~89分为“良好”,70~79分为“中等”,60~69分为“及格”,60分为“不合格”x=input(‘x’)if x>100|x<0y=’输入错误’elseif x>=90y=’优秀’elseif x>=80y=’良好’elseif x>=70y=’中等’elseif x>=60y=’及格’elsey=’不合格’emd4某超市节日期间举办购物打折的促销活动,优惠办法是:每位顾客当天一次性购物在100元以上者,按九五折优惠;在200元以上者,按九折优惠;在300元以上者,按八五折优惠;在500元以上者,按八折优惠。

x=input(‘x’);if x>=500y=x*0.8elseif x>=300y=x*0.85elseif x>=200y=x*0.9elseif x>=100y=x*0.95else y=xend 5编程计算:s=1+2+3+…+100sum=0;for i=1:100sum=sum+i;endsum引申1!-2!+3!-4!+5!- (99)sum=0;for i=1:99pdr=1;for k=1:ipdr=pdr*k;endsum=sum+pdr*(-1)^(i-1);endsum引申1*2*3*4*……*100sum=1;for i=1:100sum=sum*iendsum6计算1~100的奇数和sum=0;for i=1:2:100sum=sum+i;endsum7百元买百鸡问题。

(完整版)第一讲Matlab基本数值计算

(完整版)第一讲Matlab基本数值计算

第一讲Matlab 基本数值计算一、矩阵在Matlab中,一个矩阵可以使数学意义上的矩阵,也可以是标量或者向量。

对于一个标量(一个数)可以将之作为11⨯的矩阵,而向量(一行或一列)则可以认为是1n⨯⨯或者1n⨯的矩阵。

另外,一个00矩阵在Matlab中被认为是空矩阵,用“[]”表示。

1、矩阵的创建矩阵的创建可以有以下几种形式⑴直接输入>> A=[1 2 3;4 3 7;2 4 1]注意:每行间的元素用逗号或空格分开,行与行之间用分号或回车分开,矩阵标示是一对中括号[ ]。

也可以采用数组编辑器(Array Editor)像在Excel电子表格中据那样输入数据。

⑵通过语句和函数产生常用的特殊矩阵:zeros:全零矩阵,ones:全1矩阵,eye:单位矩阵,rand:随机矩阵,diag:对角阵等。

例:>> A=ones(3,4)>> E=eye(3)>> D=diag([3 5 2])⑶对矩阵进行裁剪或拼接⑷从外部文件装入数据外部数据文件可以是以保存的Matlab工作空间,也可以是文本(.txt)文件,或者是电子表格创建的文件(.xls).例:已知一个文本格式的数据文件E:\Mathmodel\data1.txt>> load e:\Mathmodel\data1.txt得到一个变量名与文件名相同的矩阵(data1)。

注意:文件的扩展名不能省略。

例:已知一个Excel文件的路径为E:\Mathmodel\data2.xlsa. 缺省操作:>> NUMBER=xlsread('E:\Mathmodel\data2.xls')>>[NUMBER,TXT]=xlsread('E:\Mathmodel\data2.xls')默认操作是从第一个工作表(sheet1)中提取数据。

b. 从指定的工作表(而不是第一个)中提取数据:>> NUMBER=xlsread('E:\Mathmodel\data2.xls','S2')或者>> NUMBER=xlsread('E:\Mathmodel\data2.xls',2)c.从指定的工作表中读取指定区域的数据:>> NUMBER=xlsread('E:\Mathmodel\data2.xls',2,'g3:i8')2、Matlab的矩阵运算⑴基本运算矩阵的加(+)、减(-)、乘(*)、乘方(^)运算法则与代数中的定义完全一致。

MATLAB软件应用 解题代码 线性代数

MATLAB软件应用 解题代码 线性代数

2%求全部4位水仙花数m=1000:9999%生成所有四位数的m向量m1=rem(m,10)%求m除以10的余数赋给m1m2=rem(fix(m/10),10)%先调用fix,对m/10的结果取整,再求取整后的数/10的余数m3=rem(fix(m/100),10)%先调用fix,对m/100的结果取整,再求取整后的数/10的余数m4=fix(m/1000)%对m/1000取整赋予m4k=find(m==m1.*m1.*m1.*m1+m2.*m2.*m2.*m2+m3.*m3.*m3.*m3+m4.*m4.*m4.*m4) %调用find函数,在向量m中找到水仙花数的序号赋给变量ks=m(k)%输出水仙花数%反序x='Kat is beautiful'%生成字符串result=strrep(x,'is',x(6:-1:5))%调用strrep函数将x中的子字符串is替换为利用冒号表达式表示的反序,初项为6,末项为5,步长为-13A=magic(7)%产生一个7阶魔方矩阵A([2 6],:)=A([6 2],:)%交换矩阵A的第一行和第二行B=A%得到矩阵Bsum(B(1,:))%求B矩阵第一行元素之和sum(B(1,:))==sum(B(2,:))%验证B矩阵各行元素之和是否相等sum(B(2,:))==sum(B(3,:))sum(B(3,:))==sum(B(4,:))sum(B(4,:))==sum(B(5,:))sum(B(5,:))==sum(B(6,:))sum(B(6,:))==sum(B(7,:))sum(B(:,1))%求B矩阵第一列元素之和sum(B(:,1))==sum(B(:,2))%验证B矩阵各列元素之和是否相等sum(B(:,2))==sum(B(:,3))sum(B(:,3))==sum(B(:,4))sum(B(:,4))==sum(B(:,5))sum(B(:,5))==sum(B(:,6))sum(B(:,6))==sum(B(:,7))sum(diag(B))%求B矩阵主对角线元素之和B1=flipud(B)%将B矩阵上下翻转,B矩阵的副对角线就变成了B1矩阵的主对角线sum(diag(B1))%求B1矩阵主对角线元素之和即求B矩阵副对角线元素之和sum(B(1,:))==sum(B(:,1))%验证B矩阵每行、每列元素之和是否相等sum(diag(B))==sum(diag(B1))%验证B矩阵主、副对角线元素之和是否相等sum(B(1,:))==sum(diag(B))%验证B矩阵每行、每列元素之以及主、副对角线元素之和是否相等B(:,[2 6])=A(:,[6 2])%交换矩阵B的第一列和第二列C=B%得到矩阵Csum(C(1,:))%求C矩阵第一行元素之和sum(C(1,:))==sum(C(2,:))%验证C矩阵各行元素之和是否相等sum(C(2,:))==sum(C(3,:))sum(C(3,:))==sum(C(4,:))sum(C(4,:))==sum(C(5,:))sum(C(5,:))==sum(C(6,:))sum(C(6,:))==sum(C(7,:))sum(C(:,1))%求C矩阵第一列元素之和sum(C(:,1))==sum(C(:,2))%验证C矩阵各列元素之和是否相等sum(C(:,2))==sum(C(:,3))sum(C(:,3))==sum(C(:,4))sum(C(:,4))==sum(C(:,5))sum(C(:,5))==sum(C(:,6))sum(C(:,6))==sum(C(:,7))sum(diag(C))%求C矩阵主对角线元素之和C1=flipud(C)%将C矩阵上下翻转,C矩阵的副对角线就变成了C1矩阵的主对角线sum(diag(C1))%求C1矩阵主对角线元素之和即求C矩阵副对角线元素之和sum(C(1,:))==sum(C(:,1))%验证C矩阵每行、每列元素之和是否相等sum(diag(C))==sum(diag(C1))%验证C矩阵主、副对角线元素之和是否相等sum(C(1,:))==sum(diag(C))%验证C矩阵每行、每列元素之以及主、副对角线元素之和是否相等4x=[2,4,8;0,-6,-4;8,1,7]%自定义一个非奇异的3阶方阵xn=norm(x) %直接求x的2-范数max(eig(x.'*x))^(1/2)%求矩阵x的转置乘矩阵x本身所得的矩阵的最大特征值的平方根%两者的结果相等x=[0,6,6,1,1,6,6,1,1,6,6,0;0,0,1,1,5,5,6,6,10,10,11,11]%生成结点坐标矩阵x,第一行为横坐标,第二行为纵坐标A1=[2,1;1,1]%定义变换矩阵A1A2=[0,-1;1,0]%定义变换矩阵A2A3=[2,0;0,2]%定义变换矩阵A3y1=A1*x%再利用A1对x进行变换,得到y1矩阵y2=A2*x%再利用A2对x进行变换,得到y2矩阵y3=A3*x%再利用A3对x进行变换,得到y3矩阵%分别绘制变换前后的图形subplot(2,2,1)fill(x(1,:),x(2,:),'r')subplot(2,2,2)fill(y1(1,:),y1(2,:),'r')subplot(2,2,3)fill(y2(1,:),y2(2,:),'r')subplot(2,2,4)fill(y3(1,:),y3(2,:),'r')5%判断n是否为质数n1 = input('请输入一个不大于100的整数:','s');n = str2num(n1);%因为默认输入的是ASCII码值,所以要有这一步,转换成数字if rem(n,2)==0 & n/2~=1 %表示如果输入的数字被2整除,则输出'您所输入的数为合数',且把2排除disp('您所输入的数为合数')elseif rem(n,3)==0 & n/3~=1%条件表示如果输入的数字是奇数,且被3整除,则输出'您所输入的数为合数',且把3排除disp('您所输入的数为合数')elseif rem(n,3)~=0 & rem(n,5)==0 & n/5~=1%条件表示如果输入的数字不被2、3整除,但被5这整除,则输出'您所输入的数为合数',且把5排除disp('您所输入的数为合数')elseif rem(n,3)~=0 & rem(n,5)~=0 & rem(n,7)==0 & n/7~=1%条件表示如果输入的数字不被2、3、5整除,但被7这整除,则输出'您所输入的数为合数',且把7排除disp('您所输入的数为合数')else %以上条件都不满足,则输出num本身disp(n)end%判断n是否为两个质数的乘积n1 = input('请输入一个不大于100的整数:','s');n = str2num(n1);%因为默认输入的是ASCII码值,所以要有这一步,转换成数字if rem(n,2)==0 & isprime(n/2) %表示如果输入的数字被2整除且除以2后为质数,则判定输入的数为两个质数的乘积disp([num2str(n),'是2和',num2str(n/2),'的乘积']) %输出‘n是2和n/2的乘积’elseif rem(n,3)==0 & isprime(n/3) %表示如果输入的数字被3整除且除以3后为质数,则判定输入的数为两个质数的乘积disp([num2str(n),'是3和',num2str(n/3),'的乘积']) %输出‘n是3和n/3的乘积’elseif rem(n,3)~=0 & rem(n,5)==0 & isprime(n/5) %表示如果输入的数字被5整除且除以5后为质数,则判定输入的数为两个质数的乘积disp([num2str(n),'是5和',num2str(n/5),'的乘积']) %输出‘n是5和n/5的乘积’elseif rem(n,3)~=0 & rem(n,5)~=0 & rem(n,7)==0 & isprime(n/7) %表示如果输入的数字被7整除且除以7后为质数,则判定输入的数为两个质数的乘积disp([num2str(n),'是7和',num2str(n/7),'的乘积']) %输出‘n是7和n/7的乘积’else %以上条件都不满足,则输出'您输入的数不能分解为两个质数的乘积' disp('您输入的数不能分解为两个质数的乘积')end6%用辛普森法计算四分之一圆的面积,从而计算圆周率的近似值disp('以下是辛普森法求圆周率')a=0; %给a赋值为0b=1; %给b赋值为1n=input('n=?'); %输入n的值,即把区间分成n等份h=(b-a)/n; %计算每个区间的宽度,赋给变量hx=a:h:b %产生自变量向量x,x中包含了要取的n+1个自变量的值f=sqrt(1-x.*x);%得到一个与x对应的函数值向量赋给变量f,(这里一定要用点乘)s=[] %定义一个空矩阵sfor k =1:2:n %循环n次,步长为2s1=(f(k)+4*f(k+1)+f(k+2))*h/3; %求以抛物线弧段为曲边,以[Xk,Xk+2]为底的曲边梯形面积s=[s,s1]; %将s1添加到矩阵s中,循环n次后,s里面的元素分别时endpai=4*sum(s) %调用sum函数求s各元素之和,即整个曲边梯形的面积,再乘以4即为pi8figure(1)u1=linspace(-pi,pi,100);u2=linspace(-2*pi,2*pi,200);u3=linspace(0,2*pi,400);plot(u1,sin(2*u1)+1,'b-',u2,cos(u2),'r--',u3,sin(u3)+cos(2*u3),'k-.')figure(1)x=linspace(0,0.3);y=x.*sin(1./x);plot(x,y,'b')title('figure(1)')figure(2)r=1;t=0:6*pi;x1=r*(t-sin(t));y1=r*(1-cos(t));plot(x1,y1,'r')title('figure(2)')figure(3)syms x yezplot('4*x^2+9*y^2=36')grid ontitle('figure(3)')10figuresubplot(1,2,1);t=-1:0.1:1;[X,Y]=meshgrid(t);Z=X.^3+Y.^2;mesh(X,Y,Z);hold onsurf(X,zeros(size(Y)),Y.^3)title('{z=x^{3}+y^{2}}与x0z平面的相交图')subplot(1,2,2);t=-1:0.1:1;[X,Y]=meshgrid(t);Z=X.^2+Y.^5;mesh(X,Y,Z);hold onsurf(zeros(size(Y)),Y,X.^5)title('{z=x^{2}+y^{5}}与y0z平面的相交图')11%画月亮t=linspace(0,2*pi,100);subplot(2,2,1)x=sin(t);y=cos(t);p1=y>0.5;y(p1)=NaN;plot(x,y)hold onx11=sqrt(3)*sin(t)./2;y11=sqrt(3)*(0.5+cos(t))./2;p11=y11>0.5;y11(p11)=NaN;plot(x11,y11)axis([-1.1,1.1,-1.1,1.1])axis squaregrid onsubplot(2,2,2)x=sin(t);y=cos(t);p2=x>0.5;x(p2)=NaN;plot(x,y)hold onx11=sqrt(3)*(0.5+sin(t))./2;y11=sqrt(3)*cos(t)./2;p11=x11>0.5;x11(p11)=NaN;plot(x11,y11)axis([-1.1,1.1,-1.1,1.1])axis squaregrid onsubplot(2,2,3)x=sin(t);y=cos(t);p3=y<-0.5;y(p3)=NaN;plot(x,y)hold onx11=-sqrt(3)*sin(t)./2;y11=-sqrt(3)*(0.5+cos(t))./2; p11=y11<-0.5;y11(p11)=NaN;plot(x11,y11)axis([-1.1,1.1,-1.1,1.1])axis squaregrid onsubplot(2,2,4)x=sin(t);y=cos(t);p4=x<-0.5;x(p4)=NaN;plot(x,y)hold onx11=-sqrt(3)*(0.5+sin(t))./2; y11=-sqrt(3)*cos(t)./2;p11=x11<-0.5;x11(p11)=NaN;plot(x11,y11)axis([-1.1,1.1,-1.1,1.1])axis squaregrid on13% (a)x1=[1,3,5];p=poly(x1);p=p*3;px=poly2str(p,'x')x2=[2,4];q=poly(x2);q=q*-2;qx=poly2str(q,'x')% (b)A=[2,3;1,1];B=[2,1;1,1];pA=polyvalm(p,A)qA=polyvalm(q,A)pB=polyvalm(p,B)qB=polyvalm(q,B)%点乘的话,p(A)q(A)=q(B)p(A) pA.*qBqB.*pA%乘的话,p(A)q(A)和q(B)p(A)不相等pA*qBqB*pA% (c)a=0;b=10;f=diff(polyval(polyint(p),[a b]))p=[3,-27,69,-45]px=poly2str(p,'x')q=[-2,12,-16]qx=poly2str(q,'x')r=[1,1]rx=poly2str(r,'x')q1=[0,0,q]f=conv(p,r)+q1x=roots(f)14%算积分%【a】fun1=@(x) x+x.^2+x.^3;I1=rectangular(fun1,-1,1,1000)x=linspace(-1, 1, 100);y=x+x.^2+x.^3;I2=trapz(x,y)I3=quad(fun1,-1,1)%【b】fun2=@(x,y) sin(y.*(x+y)./(x.^2+4)) I=quad2d(fun2,1,10,1,10)function f=rectangular(fun,a,b,n)%矩形法:h=(b-a)/n;x=a:h:b;y=x;for i=2:n+1y(i)=fun((x(i)+x(i-1))/2);endf=h*sum(y(1:end));endsyms x y zeq1 = 3*x + 2*y - z == 4;eq2 = x - y + z == 1;eq3 = -x + 4*y + 5*z == 8;[x,y,z] = solve([eq1,eq2,eq3], [x,y,z])14%算积分%【a】fun1=@(x) x+x.^2+x.^3;I1=rectangular(fun1,-1,1,1000)x=linspace(-1, 1, 100);y=x+x.^2+x.^3;I2=trapz(x,y)I3=quad(fun1,-1,1)%【b】fun2=@(x,y) sin(y.*(x+y)./(x.^2+4)) I=quad2d(fun2,1,10,1,10)function f=rectangular(fun,a,b,n)%矩形法:h=(b-a)/n;x=a:h:b;y=x;for i=2:n+1y(i)=fun((x(i)+x(i-1))/2);endf=h*sum(y(1:end));endsyms x y zeq1 = 3*x + 2*y - z == 4;eq2 = x - y + z == 1;eq3 = -x + 4*y + 5*z == 8;[x,y,z] = solve([eq1,eq2,eq3], [x,y,z])。

水仙花数通用算法

水仙花数通用算法
flag = 0
break
if flag:
print(tempnumber)
matchlist = [0 for x in range(10)]
flag = 1
以上就是代码了。。。
如有错误或需要讨论。。。
请移步:
/valbendan/article/details/7461243
max = 10 ** weishuo
if weishuo is 1:
min = 0
else :
min = 10 ** (weishuo-1)
max9 = max // number[9][1]
min9 = min // number[9][1]
for s[9] in range(min9,max9e(0,weishuo-s[9]+1):
for s[7] in range(0,weishuo-s[9]-s[8]+1):
for s[6] in range(0,weishuo-s[9]-s[8]-s[7]+1):
for s[5] in range(0,weishuo-s[9]-s[8]-s[7]-s[6]+1):
number = [[x * i ** weishuo for x in range(weishuo+1)]for i in range(10)]
matchlist = [0 for x in range(10)]
s = [x for x in range(10)]
bignumber = 0
flag = 1
for s[1] in range(0,weishuo-s[9]-s[8]-s[7]-s[6]-s[5]-s[4]-s[3]-s[2]+1):

matlab实验题

matlab实验题

实验一、Matlab 基本操作1、 计算9.248.26107sin 369.12÷⎪⎭⎫ ⎝⎛π+的值 2、 产生一个5阶魔术方阵,并执行如下操作:(1) 将矩阵的第2行3列元素赋值给变量c(2) 将由矩阵第2,3,4行第3,5列构成的子矩阵赋值给变量d3、给出区间[0,1]上的6个等分点数据。

4、建立如下矩阵 (1)1010200700020070002007⨯⎛⎫ ⎪ ⎪ ⎪ ⎪⎝⎭ (2)1010010101001010100⨯⎛⎫ ⎪ ⎪ ⎪ ⎪⎝⎭ 5、设有分块矩阵⎥⎦⎤⎢⎣⎡=⨯⨯⨯⨯22322333S O R E A ,其中E,R,O,S 分别为单位阵、随机阵、零阵和对角阵,试通过数值计算比较A*A 与A.*A 的区别。

实验二、Matlab 程序设计1、 已知函数⎪⎩⎪⎨⎧≤≤<≤<≤-+=2110,101,1)(2x x x x x x f 计算)5.1(),5.0(),1(f f f -. 2、 用for-end 循环语句求:100!和∑=1001i i 。

3、 用while-end 循环语句求不超过1000的偶数之和与奇数之和。

4、 建立一个命令M-文件:求所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。

例如,153是一个水仙花数,因为153=13+53+33。

5、建立如下矩阵(1)10101000120011100⨯⎛⎫ ⎪ ⎪ ⎪ ⎪⎝⎭ (2)20072000002007300000200740000020075000002007⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭实验三、使用Matlab 作图1、 在同一坐标系下面画出)5.0sin(2.01.0x e y x +=和)5.0cos(2.01.0x e y x +=在区间]2,0[π上的曲线图。

2、 绘制三维螺旋线:].,0[,5.0,sin 2,cos 2π∈===t t z t y t x3、 画出曲面)sin(xy z =的网线图。

Matlab数学运算及数值计算

Matlab数学运算及数值计算
第二讲 MATLAB的数值计算
—— matlab 具有出色的数值计 算能力,占据世界上数值计算软 件的主导地位
编辑ppt
数值运算的功能
创建矩阵 矩阵运算 多项式运算 线性方程组 数值统计 线性插值 函数优化 微分方程的数值解
编辑ppt
一、MATLAB中的变量类型 数值变量 字符串变量 单元型变量 结构型变量
编辑ppt
a=[1,2,3;4,5,6;7,8,9];a^2 ans =30 36 42
66 81 96 102 126 150
※当一个方阵有复数特征值或负实 特征值时,非整数幂是复数阵。
编辑ppt
a^0.5 ans =
0.4498 + 0.7623i 0.5526 + 0.2068i 0.6555 -0.3487i 1.0185 + 0.0842i 1.2515 + 0.0228i 1.4844 - 0.0385i 1.5873 - 0.5940i 1.9503 - 0.1611i 2.3134 + 0.2717i
strjust 微调字符串 deblank 去除串空格
strmatch 查找匹配的串 eval 执行字符串
编辑ppt
串检验与进制转换函数
详情请参阅帮助(help)
函数名 可实现的功能 函数名 可实现的功能 ischar 字符串检验 isletter 字母检验 iscellstr 串单元阵检验 isspace 空格检验 hex2dec 16→10转换 dec2bin 10→2转换 hex2num 16→双精转换 base2dec n→10转换 dec2hex 10→16转换 dec2base 10→n转换 bin2dec 2→10转换 strings 字串帮助

MATLAB中的数学运算技巧

MATLAB中的数学运算技巧

MATLAB中的数学运算技巧引言MATLAB是一款功能强大的数学软件,广泛应用于科学、工程等领域。

在MATLAB中,有许多数学运算技巧可以帮助我们更高效地处理各种数学问题。

本文将介绍一些常用的MATLAB数学运算技巧,希望能帮助读者更好地掌握这一工具。

一、符号计算MATLAB的符号计算功能可以让我们进行精确的数学运算,而不仅仅是数值近似。

通过使用符号变量,在MATLAB中可以进行各种代数、微积分和方程求解等高级数学运算。

例如,我们可以使用符号变量来计算多项式的导数。

首先,定义一个符号变量x:```MATLABsyms x```然后,假设我们要计算多项式2x^3+3x^2+4x的导数,可以使用diff函数:```MATLABpoly = 2*x^3 + 3*x^2 + 4*x;diff(poly)```运行上述代码,我们将得到多项式的导数6x^2 + 6x + 4。

这样,符号计算功能可以帮助我们解决各种数学问题,提供更精确的结果。

二、线性代数运算在科学和工程领域中,线性代数是一个非常重要的数学分支。

MATLAB提供了丰富的线性代数函数,帮助我们进行向量和矩阵的计算。

例如,我们可以使用MATLAB的矩阵乘法运算符*来进行矩阵乘法。

假设我们有两个矩阵A和B,想要计算它们的矩阵乘法结果C,可以使用以下代码:```MATLABC = A * B;```此外,MATLAB还提供了求解线性方程组、矩阵求逆和特征值计算等功能,使得线性代数运算更加便捷。

三、数值积分数值积分是一种常见的数学问题,需要将一个函数在一定的区间上进行近似积分。

MATLAB提供了多种数值积分函数,帮助我们计算各种复杂函数的近似积分值。

例如,我们可以使用quad函数来计算定积分。

假设我们要计算函数f(x) = x^2在区间[0, 1]上的定积分,可以使用以下代码:```MATLABf = @(x) x^2;integral = quad(f, 0, 1);```运行上述代码,我们将得到函数f(x) = x^2在区间[0, 1]上的定积分值1/3。

MATLAB 编程题总结

MATLAB 编程题总结

1.输出x,y 两个中值较大的一个值。

x=input('x='); y=input('y='); if x>y x else y end2.输入x ,计算y 的值。

计算函数的值⎩⎨⎧≥-<+=01201x x x x y ,, x=input('x='); if x<0 y=x+1 elsey=2*x-1 End3.输入一学生成绩,评定其等级。

方法是:90~100分为“优秀”,80~89分为“良好”,70~79分为“中等”,60~69分为“及格”,60分以为“不合格”x=input('x='); if x>100 | x<0 y='输入错误' elseif x>=90 y='优秀' elseif x>=80 y='良好' elseif x>=70 y='中等'elseif x>=60 y='及格' elsey='不合格' end4.某购物超市节日期间举办购物打折扣的促销活动,优惠办法是:每位顾客当天一次性购物在100元以上者,按九五折优惠;在200元以上者,按九折优惠;在300元以上者,按八五折优惠;在500元以上者,按八折优惠。

则可以根据顾客购物款数计算出优惠价。

x=input('x='); if x>=500y=x*0.8 elseif x>=300 y=x*0.85 elseif x>=200 y=x*0.9 elsey=x*0.95 end5.编程计算:S=1+2+3+…+100sum=0;for i=1:100 sum=sum+i; end sum6.计算1~100的奇数和.sum=0;for i=1:2:100 sum=sum+i; end Sum 或sum=0;for i=1:100if mod(i,2)==1 sum=sum+i; endend sum7.百元买百鸡问题。

对“水仙花数”的研究

对“水仙花数”的研究
%求水仙花数matlab代码3. clear all; clc; n=input('n='); %输入自然数m的位数n. k=fix((n+2)/3); %确定搜索自然数m的0至9这10个数码的个数的终止值,加快搜索速度. for o=0:k %搜索n位自然数m中数码0的个数. for p=0:k %搜索n位自然数m中数码1的个数. for q=0:k %搜索n位自然数m中数码2的个数.以下依此类推. for r=0:k for s=0:k for t=0:k for u=0:k for v=0:k for w=0:k for x=0:k %搜索n位自然数m中数码9的个数. if o+p+q+r+s+t+u+v+w+x==n %0至9这10个数码的个数的和. m=o*0^n+p*1^n+q*2^n+r*3^n+s*4^n+t*5^n+u*6^n+v*7^n+w*8^n+x*9^n; %0至9这10个数码的n次 幂的和. if m<=10^n-1 & m>=10^(n-1) %n位自然数的范围. y=int2str(m)-'0'; %分离自然数m的各位数码. if sum(y.^n)==m %自然数m为水仙花数. disp(m) %输出水仙花数. end
%求水仙花数matlab代码1. clear all; clc; n=input('n='); %输入自然数的位数. for m=10^(n-1):10^n-1 %输入位数相同的自然数.
m1=rem(fix(m/10^(n-1)),10); %确定自然数的首位数码. m2=rem(fix(m/10^(n-2)),10); %确定自然数的第二位数码,以下类推. m3=rem(fix(m/10^(n-3)),10); m4=rem(fix(m/10^(n-4)),10); m5=rem(fix(m/10^(n-5)),10); m6=rem(fix(m/10^(n-6)),10); m7=rem(fix(m/10^(n-7)),10); m8=rem(fix(m/10^(n-8)),10); m9=rem(fix(m/10^(n-9)),10); if (m1)^n+(m2)^n+(m3)^n+(m4)^n+ (m5)^n+(m6)^n+(m7)^n+(m8)^n+(m9)^n ==m %判断水仙花数

水仙花数与四叶玫瑰数 课件

水仙花数与四叶玫瑰数 课件
Next End Sub
演示
课堂检测
利用多重循环实现
Private Sub Form_Click() Cls Print "水仙花数有:“ Dim g As Integer, s As Integer, b As Integer
For b = _1__ To _9__ For s =__0__ To _9__


i<=999
g=i mod 10
结束
s=(i Mod 100) \ 10
否 i=g^3+s^3+b^3
是 Print i
i=i+1
b=i \100
Private Sub Form_Click() Rem 此程序用于找出水仙花数
Cls Print "水仙花数有:“
Dim i As Integer
设变量g、s、b、q分别存放个位、
十位、百位、千位上的数,则:
g=______
s=______
b=______
q=______
3、找到各位上的数后,判断其是否为
四叶玫瑰数的条件为:_________
二、用流程图描述算法
开始
i=


i<=
g= 结束
s=
b=
q=
否 i=
是 Print i
i=i+1
三、编写代码
End If Next
演示
End Sub
找出四叶玫瑰数
一、分析问题
由四叶玫瑰数的概念可知:
1、它们是______位数的正整数。设
变量i用于存放每一个需要判断的数,
则i由______变到______,故需要用 到______结构。

MATLAB考试题目及解答

MATLAB考试题目及解答

1.圆盘上有如图所示的二十个数,请找出哪4个相邻数之和最大,并指出它们的位置和数值。

(10分)2011841361015217319716811149125解答:%1.圆盘上有如图所示的二十个数,请找出哪4个相邻数之和最大,并指出它们的位置和数值。

(10分)A=[1 18 4 13 6 10 15 2 17 3 19 7 16 8 11 14 9 12 5 20];% 程序位置规定:从1开始顺时针方向计数;NumA=size(A); Num=NumA(1,2); sum(1)=A(1); for i=1:(Num-3)sum(i)=A(i)+A(i+1)+A(i+2)+A(i+3); endmaxresult=max(sum(:));%找出4个相邻数之和最大值 maxresult %4个相邻数之和最大值 Position=i %四个数起始位置 FourNumber=A(1,i:(i+3)) %四个数的值及顺序 运行结果:maxresult =50Position =17FourNumber =9 12 5 202.甲、乙、丙三人上街买糖果。

三人都买好后,甲对乙、丙说,我可以按你们现有的糖果数再送你们每人一份。

甲送给乙、丙后,乙也按甲、丙现有的糖果数,送给甲、丙每人各一份糖果。

丙也如此送了甲、乙各一份。

互相赠送后,每人恰好各有64颗糖果。

问甲、乙、丙原来各买了多少糖果?(10分)解答:%由代数关系构造矩阵 a=[1 -1 -1;0 2 0;0 0 2]; b=a([2 1 3],:); b=b(:,[2 1 3]); c=a([2 3 1],:); c=c(:,[2 3 1]); d=64*ones(3,1); result=a\(b\(c\d))运行结果:result=104 56 323.求n S a aa aaa aaa a =++++ 的值。

a 的值为1~9之间的一个整数,n S 中每一项aaa a 共有n 位。

matlab中求和求平均求中值求相关系数的方法

matlab中求和求平均求中值求相关系数的方法

matlab中求和求平均求中值求相关系数的方法MATLAB是一种广泛使用的数值计算软件,可以用来进行各种数学运算,包括求和、平均、中值和相关系数等。

下面是MATLAB中求和、平均、中值和相关系数的方法:1. 求和MATLAB中,可以使用`sum`函数来计算一个数列的和。

例如,如果要计算从1到100的整数和,可以使用以下代码:```matlaba = 1:100;sum(a);```2. 求平均MATLAB中,可以使用`mean`函数来计算一个数列的平均数。

例如,如果要计算从1到100的整数平均数,可以使用以下代码:```matlaba = 1:100;mean(a);```3. 求中值MATLAB中,可以使用`min`和`max`函数来计算一个数列的中值。

例如,如果要计算从1到100的整数中值,可以使用以下代码:```matlaba = 1:100;min(a);```4. 求相关系数MATLAB中,可以使用`corr`函数来计算两个数列的相关系数。

例如,如果要计算1到100的两个数列之间的相关系数,可以使用以下代码:```matlaba = 1:100;b = 1:100;corr(a,b);```上述代码将返回1到100之间的两个数列之间的相关系数。

相关系数的符号表示两个数列之间的相关性,0表示无相关性,1表示高度相关性。

除了`corr`函数外,MATLAB还提供了其他相关系数计算函数,例如`rcorr`和`pcorr`。

这些函数可以计算更加复杂的相关性,例如线性相关性和非线性相关性。

此外,MATLAB还提供了一些工具箱和函数,可以更轻松地计算各种数学运算。

例如,MATLAB中的`统计分析`工具箱可以用于计算平均值、中值和相关系数。

综上所述,MATLAB是一种功能强大的数值计算软件,可以用来进行各种数学运算。

通过使用MATLAB中的各种函数和工具箱,可以快速准确地计算各种数学结果。

水仙花数matlab编程求解

水仙花数matlab编程求解

水仙花数(matlab编程求解) 水仙花数(Narcissistic Number)是指一个n位数,它的每个位上的数字的n次幂之和等于它本身。

例如,153是一个三位数的水仙花数,因为153=1^3 + 5^3 + 3^3。

下面是一种使用MATLAB编程语言来求解n位水仙花数的方法。

function result = narcissistic_number(n)
% 初始化结果列表
result = [];
% 循环遍历所有可能的n位数的组合
for i = 1 : pow(10,n-1)
num = i;
sum = 0;
% 计算每一位的n次方之和
for j = 1 : n
digit = mod(num,10);
sum = sum + digit^n;
num = num / 10;
end
% 如果结果等于原数,将数加入结果列表
if sum == num
result = [result num];
end
end
end
你可以调用这个函数来寻找任意位数的水仙花数。

例如,要寻找四位的水仙花数,可以这样调用函数:
n = 4;
result = narcissistic_number(n);
disp(result);
注意这个函数可能会运行得比较慢,因为它需要遍历所有可能的n位数,然后计算每个数的每个位的n次方之和,然后检查结果是否等于原数。

对于大的n值,这可能需要一些时间。

但是,对于寻找小的水仙花数,这个函数应该可以很好地工作。

MATLAB编程求解水仙花数

MATLAB编程求解水仙花数

【原创】MATLAB编程-求解水仙花数【例】何为水仙花数?水仙花数是指一个n位数(n〉3,)它的每个位上的数字的n次幕之和等于它本身。

(例如:1A3 + 5A3+3A3 = 153 )三位的水仙花数共有4个: 153, 370, 371 , 407;四位的水仙花数共有3个: 1634 , 8208 , 9474 ;五位的水仙花数共有3个: 54748 , 92727 , 93084 ;六位的水仙花数只有1个: 548834 ;七位的水仙花数共有4个: 1741725 , 4210818 , 9800817 , 9926315八位的水仙花数共有3个: 24678050 , 24678051 , 88593477程序如下:for m=100:999 m1=fix(m/100); m2=rem(fix(m/10),10); m3=rem(m,10);ifu A A o Adisp(m) end end153370371407while循环结构【例】Fibo nacci数组的元素满足Fib on acci规则:ak2ak aki , (k 1,2,):且ai比1。

现要求该数组中第一个大于10000的元素。

a(1)=1;a (2)=1;i=2;while a(i)<=10000a(i+1)=a(i-1)+a(i);i=i+1;end;21ans =10946【例】用for 循环指令来寻求Fib on acc 数组中第一个大于10000的元素n=100;a=ones(1 ,n);for i=3:na(i)=a(i-1)+a(i-2);if a(i)>=10000a(i),break;end;end,ians =10946■ I =21switch-case 结构【例】学生的成 绩管理,用来演示switch 结构的应用clear;for i=1:10;a{i}=89+i;b{i}=79+i;c{i}=69+i;d{i}=59+i;end;c=[d,c]; Name={*Jack\,Marry7Peter\,Rose'; Tom*}; Mark={72,83,56,94,100};Rank=cell(1,5);S=struct(,Name ,,Name,^arks^Mark,'Rank', Rank);for i=1:5switch S(i).Marks case 100S(i).Rank=*case a S(i).Rank=,case b S(i).Rank=*case c S(i).Rank=,otherwiseS(i).Rank=,endend disp([*学生姓名for i=1:5;disp([S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i) .Rank]); end;学生姓名得分等级满分: 优秀'; 良好: 及格: 不及格*; 得分 等级HdispC)Jack 72及格Marry 83 良好Peter 56 不及格Rose 94优秀Tom 100满分【例】matlab 魔方矩呼的程序设计function M = magic(n) %MAGIC Magic square.% MAGIC(N) is an N-by-N matrix constructed from the integers% 1 through N A2 with equal row, colum n, and diago nal sums・ % Produces valid magic squares for all N > 0 except N = 2.% Copyright 1984-2002 The MathWorks, Inc.% $Revision: 5.15 $ $Date: 2002/04/15 03:44:23 $ % Historically, MATLAB's magic was a built-in function. % This M-file uses a new algorithm to gen erate the same matrices, n = floor(real(double( n(1))));% Odd order.if mod(n,2) == 1[J, I] = meshgrid(1:n);A = mod(l+J-(n+3)/2,n);B = mod(l+2*J-2,n);M = n*A + B + 1;% Doubly even order.elseif mod(n,4) == 0J,I] = meshgrid(1:n);< =fix(mod(l,4)/2) == fix(mod(J,4)/2); M = reshape(1:n*n,n,n)1;M(K) = n*n+1 - M(K);% Singly even order, elsep = n/2;M =magic(p);M =[M M+2*pA2; M+3*pA2 M+pA2];if n == 2, return , end■(1:p):k =(n-2)/4;j = [1:k (n-k+2):n];M([i; i+p]j) = M([kp;■k+1;■[1 i];M([i; i+p]沪M([i+p; i],j);end。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题目:对深圳市人口及医疗的预测编号: 10055队长李荣姓名: 李荣(09041117)王遂(09041124)李春晓(09055025)1.水仙花数:(1)题目若一个三位数自然数的各位数的各位数字的立方和等于该数本身,则称该数为水仙花数,例如,153=1^3+5^3+3^3,所以153为水仙花数,编程计算所有水仙花数.(2)分析问题:本题特点在于一个数的各个位数立方和与其本身的关系很明确且很简单,可以用if语句或find语句来完成.如果用if语句,则又有两种选择:1.命一个三位数,再表示其各个位数的数字;2.命各个位数的数字,再表示该三位数.如果用find语句,其思路与if语句类似.(3)问题求解:方法一:for x=100:1:999a=fix(x/100);b=fix(x/10-10*a);c=x-100*a-10*b;if x==a^3+b^3+c^3xendend方法二:for x=1:1:9for y=0:1:9for z=0:1:9if x^3+y^3+z^3==100*x+10*y+zm=100*x+10*y+zendendendend方法三:shui=100:999;i=floor(shui/100);j=floor(mod(shui,100)/10);k=floor(mod(shui,10));p=i.^3+j.^3+k.^3;shui(find(p==shui))(4)结论及分析:通过实验,结果正确,证明分析无误.(5)结果:153 370 371 4072.回文数(1)题目:对于一个自然数,若将各位数字倒序排出,加到原数字上,反复多次,若能得到一个从左到右读和从有到左读完全一样的数,则称该自然数能产生回文数.通过编程计算,你能找出多少个能产生回文数的数,又能找到多少不能产生回文数的数,二者的最小数是多少?(2)分析问题:本题关键在于如何将一个数的各个数位的数字倒序排出,并加到原数上.又由题目知必然要用到循环语句.(3)假设:由于将一个数的各个数位的数字倒序排出,并不断加到原数上比较困难,我们假设该数为四位数并假设倒序排出加到原数得到的新数不超过10000,于是有了下面的简单程序for a=0:9;for b=0:9;for c=0:9;for d=0:9;x=1000*a+100*b+10*c+d;while x<10000;if a==d&b==c;x=x;elsex=x+1000*d+100*c+10*b+a;endendendendxendend实际操作时,我们发现:该程序不仅具有假设中的缺陷,而且在实际操作中运行速度很慢,无法得到结果,所以必须将方法优化。

后来我们使用取余和取整操作,借助循环语句while,得出如下程序,突破了本题的关键。

for a=1:100b=0;c=0;x=a;while x>=10b=mod(x,10);x=fix(x/10);c=10*c+b;endc=10*c+x;此程序实现了一个数的倒序操作,并不用考虑位数问题.(4)问题求解:for a=1:100c=0;x=a;while x>=10b=mod(x,10);x=fix(x/10);c=10*c+b;endc=10*c+x;A=a+c;B=0;y=A;while y>=10C=mod(y,10);y=fix(y/10);B=10*B+C;endB=10*B+y;while B~=AA=A+B;m=0;z=A;while z>=10n=mod(z,10);z=fix(z/10);m=10*m+n;endm=10*m+z;B=m;end[a,A]end(5)结论及分析:修改后的程序通过四个while循环语句完成了(1)数字的倒序排出(2)倒序排出数与原数无上界的不断相加(3)相加之和倒序、正序排列所得数的比较,得出了正确的的结果。

运行速度较快.(6)结果:最小的能产生回文数的数是1,100个数中找到了98个能产生回文数的数.其中89,98运算结果为:1.0e+012 * 1.0e+012 *0.0000 8.8132 0.0000 8.8132它们是不能产生回文数的数,则得到两个这样的数,最小的为89..(7)结论推广:在命a的范围时,我们的范围是1到100,而事实上a可以任意取值,故可以通过国修改a的范围算出任意区间上的结果.3.完美数(1)题目:对于一个数而言,若它的真因子之和等于数本身,则称该数为完美数。

通过编程计算,你能找到多少个完美数。

(2)分析问题:问题的关键在于找出一个数的真因子,通过使用mode命令可以找到其所有因子。

然后利用for循环得到因子之和,最后用if语句使之与原数相等而导出结果。

(3)假设:由于暂时没有想到得到真因子的方法,我们忽略了“真”字,于是得出下列程序:for a=1:1000;c=0;for b=1:1000;if mod(a,b)==0;c=c+b;endendif c==aaendend结果只得了一个a=1.于是我们改换思路,将以上程序中a除以b的商当做真因子并作了部分修改,得到了结果。

在做亲和数实验时,为了将完美数从结果中去掉,我们添加了变量之间的不等命令。

从中我们得到了启示,对以上程序添加了a>b命令,再次得到结果。

(4)问题求解:方法一for a=1:1000;c=0;for b=1:1000;if mod(a,b)==0&a>b;c=c+b;endendif c==aaendend方法二for a=1:1000;s=0;for b=2:1000;if mod(a,b)==0;c=a/b;s=s+c;endendif s==asendend(5)结论及分析:通过对自己原来固有思维的大胆突破,我们得出了结果;通过对原来程序的修改,我们再次得到结果。

修改后的程序运行较快,结果正确。

(6)结果:一千以内的完美数有:6 ,28, 496(7)结论推广:程序中的a为1到1000,而a的取值可以时任意区间的自然数,可以通过修改a的范围得到其他结果。

4.亲和数(1)题目:亲和数又叫友好数,是指两个自然数,其中每个自然数的真因数之和等于另一个数。

通过编程计算,你能得到多少对亲和数。

(2)分析问题:此题实际上是在完美数的基础上的一个拓展,故其思想与完美数基本一样。

(3)假设:我们假设亲和数可以是两个相同的完美数,于是将完美数的方法二分别用于两类数上,并进行了适当的修改,得出以下程序:for a=1:1000;x=0;for b=2:1000;if mod(a,b)==0;c=a/b;x=x+c;endendfor l=1:1000y=0;for m=2:1000;if mod(l,m)==0;n=l/m;y=y+n;endendif y==a&l==x;[a,l]endendend此程序有两大缺点:1、运行速度慢;2、没有将完美数排除在外。

于是我们又做了些优化,将以上程序中的x直接取代l,于是得出了运行较快的程序,而这样无疑是将运算范围缩小了一半。

此外,我们添加了a~=l命令,解决了第二个缺陷。

同时这个命令使我们得到了启示,于是得出了完美数的方法一,也随即得出了亲和数的第三、四种方法。

(4)问题求解:方法一for a=1:10000;x=0;for b=2:10000;if mod(a,b)==0; c=a/b;x=x+c;endendfor l=1:10000y=0;for m=2:10000;if mod(l,m)==0; n=l/m;y=y+n;endendif y==a&l==x&a~=l; [a,l]endendend方法二for a=1:20000;x=0;y=0;for b=2:20000;if mod(a,b)==0; c=a/b;x=x+c;endendfor m=2:10000;if mod(x,m)==0; n=x/m;y=y+n;endendif y==a&a~=x;[a,x]endend方法三for a=1:10000;c=0;for b=1:10000;if mod(a,b)==0&a>b; c=c+b;endendfor x=1:10000;z=0;for y=1:10000;if mod(x,y)==0&x>y; z=z+y;endendif c==x&z==a&x~=a;[a,x]endendend方法四for a=1:10000;c=0;z=0;for b=1:10000;if mod(a,b)==0&a>b; c=c+b;endendfor y=1:10000;if mod(c,y)==0&c>y; z=z+y;endendif a==z&a~=c[a,c]endend(5)结论及分析:虽然4种方法都可得出结果,但通过优化的方法,明显缩短了运算时间。

(6)结果:我们得出了10000以内的所有亲和数:220 284284 2201184 12101210 11842620 29242924 26205020 55645564 50206232 63686368 6232(7)结论推广:程序中的运算范围我们定为1到10000,,但通过改变对变量的赋值范围,就可以得出其他更多的结果实验感想本次实验我们初步了解了MATLAB的使用方法,尤其对简单编程有了进一步的实践,并掌握了一些基本操作方法和编程思想。

通过实验,电脑软件的强大功能让我们认识到了其对数学研究的重要性和必要性。

由于第一次接触MATLAB,在实验过程中我们遇到了不少困难,但我们通过查阅书本、互相讨论、反复研究以及向学长、老师请教等途径将它们一一克服。

尤其是我们的团结协作,在此体现得非常明显,很多问题都是在大家不断的商量与完善中才得出的结果。

而对于同一个的问题,每个人通常都会有不同的看法,在不断的对比与优化中我们才逐渐得到比较好的程序。

另外在实验报告的完成过程中,大家各尽所长。

这次试验使我们更加清楚的认识到团结合作的重要性。

在今后的学习中,我们要更认真地学习MATLAB,使之成为我们学习数学和日后进行研究的好帮手;同时,我们要更加重视团队合作,取长补短,精益求精。

2009年12月23日。

相关文档
最新文档