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,矩阵的性能越好。(但还是不太理解矩阵的性能是刻画什么的)

  • 相关阅读:
    Educational Codeforces Round 86 (Rated for Div. 2) D. Multiple Testcases
    Educational Codeforces Round 86 (Rated for Div. 2) C. Yet Another Counting Problem
    HDU
    HDU
    HDU
    HDU
    Good Bye 2019 C. Make Good (异或的使用)
    Educational Codeforces Round 78 (Rated for Div. 2) C. Berry Jam
    codeforces 909C. Python Indentation
    codeforces1054 C. Candies Distribution
  • 原文地址:https://www.cnblogs.com/amberwang2018/p/10473236.html
Copyright © 2011-2022 走看看