MATLAB基础练习
1.输出1-500内的完数,即所有的真因子(即除了自身以外的约束)的和,恰好等于它本身,第一个完数为6
for i=1:500
s=0;
for j=1:i/2
if rem(i,j)==0
s=s+j;
end
end
if i==s
disp(i);
end
end
2.筛选法求某自然数范围内全部素数
maxnum=input('maxnum=');
% 处理行向量
f=1:maxnum;
f(1)=0; % 1非素数
for i=2:sqrt(maxnum)
for j=2*i:i:maxnum
f(j)=0;
end
end
n=find(f~=0);
f(n)
筛选法求某自然数范围内全部素数的方法可以进行简化
m=input('m=');
f=2:m;
for i=2:sqrt(m)
n=find(rem(f,i)==0 & f~=0);
f(n)=[];
end
f
3.产生20个两位随机整数,输出其中小于平均值的偶数
x=fix(rand(1,20)*100);
avg_x=mean(x);
for i=1:20
if x(i)<avg_x && rem(x(i),2)==0
disp(x(i));
end
end
4.大小写字母互换
c=input('s');
if c>='A' & c<='Z'
disp(lower(c));
elseif c>='a' & c<='z'
disp(upper(c));
else
disp(str2double(c)^2);
end
5.输入num个数,求其中最大数和最小数。要求分别用循环结构和调用MATLAB的max函数、min函数来实现
A=[];
num=input('num=');
for i=1:num
A(i)=input(['A(', num2str(i), ')='])
end
maxnum=A(1);
minnum=A(1);
for i=2:num
if maxnum<A(i)
max=numA(i);
end
if minnum>A(i)
minnum=A(i);
end
end
% 用MATLAB的max函数、min函数
disp(max(A));
disp(min(A));
6. s=1+2+2^2+2^3+…+2^63;分别用循环结构和调用MATLAB的sum函数求s的值
s=0;
base=2;
for i=0:63
s=s+base.^i;
end
disp(s);
x=0:63;
f=2.^x;
disp(sum(f));
7.计算 (2*2/1/3)*(4*4/3/5)*(6*6/5/7)...*(2n*2n/(2n-1)/(2n+1))...
n=input('n=');
s=1;
for i=1:n
s=s*(2*i*2*i)/((2*i-1)*(2*i+1));
end
disp(s);
% 或者类似上述题sum求解也使用函数
n=input('n=');
x=1:n;
f=(2*x).^2./((2*x-1).*(2*x+1));
disp(prod(f))
8.求矩阵A的大小和维数
A=[1,2,3,56,65;34,4,23,32,574;45,76,64,873,4]
A_size=size(A)
num_rows=length(A(end,:)) %num_rows=A_size(1)
num_cols=length(A(:,end)) %num_cols=A_size(2)
num_dims=length(size(A))
disp(['矩阵 A 的大小为:',num2str(num_rows),'行×',num2str(num_cols),'列'])
disp(['矩阵 A 的维数为:',num2str(num_dims)]);
9.处理矩阵A整数显示
A=[23,10,-0.078,0;41,-45,65,5;32,5,0,32;6,-9.54,54,3.14]
A_subject=A;
A_subject(~mod(A, 1))=fix(A(~mod(A, 1)));
if ~mod(A,1)
A_subject=fix(A(~mod(A,1)));
end % 实际处理仍是double
练习绘图
动态绘图
figure;
axis([10,20,10,20]);
for i=1:100
x=randi([10,20],1,10);
y=randi([10,20],1,10);
plot(x,y,'*');
drawnow; % 实时更新
pause(0.2);
end
立体绘图
theta=0:0.01:2*pi;
r=sin(2*theta).*cos(2*theta);
[x,y,z]=pol2cart(theta,r,r);
figure;
plot3(x,y,z);
grid on;
两者结合图
figure;
axis equal;
axis off;
ph=(1+sqrt(5))/2;
vert=[1,1,1; -1,-1,1; -1,1,-1; 1,-1,-1; 0,0,ph; 0,0,-ph];
faces=[1,5,2; 2,4,1; 1,4,3; 3,5,1; 2,5,3; 4,2,3; 6,1,5; 6,3,4; 6,5,3; 6,4,2];
h=patch('Vertices', vert, 'Faces', faces, 'FaceColor', 'red', 'EdgeColor', 'none');
view(3);
for k=1:100
rotate(h,[1,1,1],2); % 旋转
drawnow;
pause(0.1);
end