zoukankan      html  css  js  c++  java
  • Matlab练习1

    操作系统:win10 Matlab版本:Matlab R2017a

    1.分别求一个三位正整数的个位、十位、百位。

    x=input('x=?:');
    a=fix(x/100) %百位
    b=rem(fix(x/10),10) %十位
    c=rem(x,10) %个位

    批注:默认数据类型为8位double,更改输出显示为format,默认显示小数点后四位。

    2.求【1,100】区间的所有素数。

    x=1:100;
    y=isprime(x);%找到素数,返回1
    y1=find(y);%素数的位置
    x(y1)%输出

    3.求全部水仙花数。

    水仙花数是指:一个三位数,其各位数字立方和等于该数本身。例如:370=33+73+00.这就说明370是一个水仙花数。

    自己写的版本:

    clc,clear
    for i=100:1:999
        a=fix(i/100);
        b=rem(fix(i/10),10);
        c=rem(i,10);
        if (a^3+b^3+c^3==i)
           disp(i)
        end
    end

    例子程序:

    i=100:999;
    m1=fix(i/100);
    m2=rem(fix(i/10),10);
    m3=rem(i,10);
    k=find(i==m1.*m1.*m1+m2.*m2.*m2+m3.*m3.*m3)
    s=i(k)

    批注:同学建议最好先求个位,虽然是个人习惯,不过我觉得确实先求个位会比较不乱,然后就是编写的时候求个位时就忘记自己求什么了,程序写成了rem(i,100),只输出一个数,找了好半天错误。一个流畅的思维也是编程的关键呐。

    例子程序将多个数据存储为向量计算,可以省去循环,这个很可取,以后编程要注意。

    4.建立字符串向量,实现①取前1~5个字符 ②倒叙 ③小写字母改为大写字母 ④求小写字母个数

    clc,clear
    s='My Name is amber'; %开始写的是s=('My Name is amber','s'),不知道哪来的写法
    s(1:5)                            %取前5个字符
    s1=s(end:-1:1);             %之前写错为s=(end:1)
                                         %然后写的是s=s(end:1) 输出为:空的1×0 char数组,说明没有倒叙
    x=find(s>='a'&s<='z');   %小写字母改为大写字母,不会找小写字母T-T,看一眼例子
    s(x)=s(x)-('a'-'A')           %将找出的小写字母转换为大写字母
    length(x)                       %求小写字母个数
    

    批注:①字符串中如果含有单引号,要用两个引号来实现例如s='I ''m amber'。②Matlab中的逻辑运算符为&(与)、|(或)、~(非),matlab中的&和&&本质是一样的,但&先计算左右两个式子的真假,再逻辑与,适用于矩阵间的逻辑运算,而&&前一个式子为假就不计算下一个式子了,效率更高,只适用于单个元素。

    5.(1)产生5阶两位随机整数矩阵A。(2)产生均值为0.6,方差为0.1的5阶正态分布随机矩阵B。

    100*rand(5)
    

      

    0.6+sqrt(0.1)*randn(5)
    

    批注:以上分别对应(1)(2)。注意①rand产生的是(0,1)区间均匀分布的随机矩阵,而randn产生均值为0,方差为1的标准正态分布。②μ+σx是得到均值为μ,方差为σ的平方的随机数。

    6.验证魔方矩阵的主、副对角线元素之和相等。

    clc,clear
    A=magic(8);%产生8阶魔方矩阵
    a=diag(A);
    A1=fliplr(A);%将矩阵左右翻转,上下翻转也可以,这样副对角线就移到主对角线了。
    b=diag(A1);
    sum(a);
    sum(b);
    if(sum(a)==sum(b))
        fprintf('same
    ')
    else
        fprintf('no
    ')
    end
    

    批注:①左右翻转和上下翻转都可以将矩阵的副对角线移到主对角线上;②matlab中输出为fprintf不是printf。

    7.求3~20阶魔方矩阵的秩并绘成直方图。

    clc,clear
    for i=3:1:20
    A=magic(i);
    x(i-2)=rank(A);
    end
    disp(x)
    hist(x)%频率直方图
    bar(x)%仅仅把数据用直方图的形式展现出来
    

    批注:①magic中无法使用向量一次求出,只能借助循环。②hist可以绘制频率直方图,而bar仅仅是把数据用直方图的形式展现出来。

    8.求2~10阶希尔伯特矩阵的条件数。

    clc,clear
    for i=2:1:10
    A=hilb(i);
    x(i-1)=cond(A);
    end
    disp(x)
    %例子中加的
    format long
    x'
    

    批注:运行后,可以看到随着阶数的增加,希尔伯特矩阵的条件数不断增大,矩阵性能变差。条件数越接近1,矩阵的性能越好。(但还是不太理解矩阵的性能是刻画什么的)

  • 相关阅读:
    Python项目生成requirements.txt的多种方式
    标准的Flask启动文件
    Flask的错误日志处理和|ORM操作
    Django的model中创建表
    Redis的删除机制、持久化 主从
    RabbitMQ 消息队列
    IP地址与子网掩码逐位相与
    IP地址转二进制
    一款很好用的工具
    放球问题
  • 原文地址:https://www.cnblogs.com/amberwang2018/p/10473236.html
Copyright © 2011-2022 走看看