MATLAB熟练度练习

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值