• 第二章 M文件程序设计(matlab)


    Contents

    clc;
    clear all;

    第二章 M文件程序设计

    M文件

    f2c.m

    一,程序控制结构

    1.顺序结构

    1)数据的输入input

    % x = input('whats your name ', 's')

    2)数据的输出disp 输出字符串或者矩阵

    % A = 'Hello ,Tom' ;
    % disp(A)
    %
    % a = [1 2 3;4 5 6 ; 7 8 9 ] ;
    % disp(a)
    %
    % % 输入x,y的值,并将他们的值置换后输出
    % x = input('请输入x矩阵');
    % y = input('请输入y矩阵');
    % z = x;
    % x = y;
    % y = z;
    % disp(x);
    % disp(y);

    3)程序的暂停 pause Ctrl+C 延迟的秒数.

    %  pause(2)

    2.选择结构

    1)IF语句

     % 单分支语句
    %  x = 0.6
    %   if fix(x) == x
    %       disp(x)
    %   end
    
      % 双分支if语句
    %   P = input('请输入P的值');
    %   if P>5
    %       A = zeros(1,10)
    %   else
    %       A = ones(1,10)
    %   end
    
      % 多分支if语句
    
    %   disp('解方程ax^2+bx+c=0,请输入参数')
    %   a = input('a=');
    %   b = input('b=');
    %   c = input('c=');
    %   derta = b*b -4*a*c;
    %   x = [((-b+sqrt(derta))/(2*a)),(-b-sqrt(derta))/(2*a)];
    %  disp(['方程',num2str(a),'x^2+',num2str(b),'x+',num2str(c),'=0的根为:']);
    %  disp(['x1=',num2str(x(1)),',x2=',num2str(x(2))]);

    2)switch 语句 | 结构体 | 结构体元素引用 | 空格blanks(n) | num2str 数字转换为字符串.

    %  switch 表达式
    %      case 表达式1
    %          语句组1
    %      case 表达式2
    %          语句组2
    %          ...
    %      otherwise
    %      语句组n
    %  end
    
    % 用switch结构来实现学生成绩管理
    
    % switch里的case的表达式可以是数字,矩阵,字符串.
    % matlab中的的结构体的组成.
    % 结构体的元素的引用.
    %
    clear;
    for i=1:10;
        a{i} = 89+i;
        b{i} = 79+i;
        c{i} = 69+i;
        d{i} = 59+i;
    end;
    % a = [90]    [91]    [92]    [93]    [94]    [95]    [96]    [97]    [98]    [99]
    %
    % b =  [80]    [81]    [82]    [83]    [84]    [85]    [86]    [87]    [88]    [89]
    %
    % c =  [70]    [71]    [72]    [73]    [74]    [75]    [76]    [77]    [78]    [79]
    %
    % d =  [60]    [61]    [62]    [63]    [64]    [65]    [66]    [67]    [68]    [69]
    c = [d,c];
    % c =    [60]    [61]    [62]    [63]    [64]    [65]    [66]    [67]    [68]    [69]    [70]    [71]    [72]  [73]    [74]    [75]    [76]    [77]    [78]    [79]
    Name = {'Jack','Marry','Peter','Rose','Tom'};
    Mark = { 72 83 56 94 100 };
    Rank =cell(1,5);                                %生成一维矩阵 为空: Rank =   []    []    []    []    []
    S = struct('Name',Name,'Marks',Mark,'Rank',Rank);
    for i = 1:5
        switch S(i).Marks
            case 100
                S(i).Rank = '满分';
            case a
                S(i).Rank = '优秀';
            case b
                S(i).Rank = '良好';
            case c
                S(i).Rank = '及格';
            otherwise
                S(i).Rank = '不及格';
        end
    end
    disp(['学生姓名 ',' 得分  ',' 等级 ']);
    disp('')
    for i=1:5;
        disp([S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank]);
    end
    学生姓名  得分   等级 
    Jack      72      及格
    Marry      83      良好
    Peter      56      不及格
    Rose      94      优秀
    Tom      100      满分

    3)try语句

    %   try
    %       语句组1
    %   catch
    %       语句组2
    %   end
    
    % A = [1 2 3;4 5 6];
    % B = [7 8 9;10 11 12];
    % try
    %     C1 = A*B
    % catch
    %     C2 = A.*B
    % end
    % lasterr             %Last error message

    3.循环结构

    1)for语句

    % for 循环变量 = 表达式1:表达式2:表达式3
    %     循环体语句
    % end
    
    
    %  for 循环变量 =矩阵表达式
    %      循环体语句
    %  end
    
    
    % %输出1个3位数,各位数的立方和等于该数本身.
    % for m = 100:1:999
    %     m1 = fix(m/100);            % 求m的百位数字
    %     m2 = rem(fix(m/10),10);     % 求m的十位数字
    %     m3 = rem(m,10);             % 求m的个位数字
    %     if m == m1*m1*m1 + m2*m2*m2 + m3*m3*m3
    %         disp(m)
    %     end
    % end
    
    % 已知y=1+1/2^2+...+1/n^2 ,当n为100时,求y的值.
    
    % y = 0;
    % n = input('输入n的值,求y:');
    % for i = 1:n
    %     y = y+1/i/i ;
    % end
    % disp(['当n为',num2str(n),'时,y=',num2str(y)])
    
    % n=200;
    % i = 1:n^2;
    % y = sum(1./i)
    
    % 求矩阵各行元素之和
    % s = 0;
    % a = [12 13 14; 15 16 17; 18 19 20;21 22 23]
    % for k = a
    %     s = s+k;
    % end
    % disp(s);

    2)while语句

    % while(条件)
    %     循环体语句
    % end
    
    
    % 从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们之和.
    
    % sum = 0;
    % count = 0;
    % val = input('输入一个数,(以0结束输入)');
    % while (val ~= 0)
    %     sum = sum + val;
    %     count = count + 1;
    %     val = input('输入一个数,(以0结束输入)');
    % end
    % if (count>0)
    %     disp([blanks(6),'总和为',num2str(sum)]);
    %     disp([blanks(6),'平均值为',num2str(sum/count)]);
    % end

    3)break语句和continue语句

    % continue语句控制跳过循环体的某些语句.
    % break 语句跳过当前循环体.
    
    % a = 3;b = 6;
    %     for i = 1:3
    %         b = b+1
    %         if i<2                %当if条件满足时,程序不再执行continue后面的语句,而是开始下一次的循环.
    %             continue          %continue语句常用于循环体中,与if语句一起使用.
    %         end
    %         a = a+2
    %     end
    
    % a = 3;b = 6;
    %     for i = 1:3
    %         b = b+1
    %         if i>2                % 当if条件不满足时,程序执行a = a +2;
    %             break             % 当if条件满足时,程序执行循环体,跳出循环体.
    %         end
    %         a = a+2
    %     end

    4)循环的嵌套

    % 若一个数等于它的各个真因子之和,则称之为完数.如6 = 1+2+3;所以6是完数.求[1,500]之间的完数.
    % 求某个数的因子,然后累加,比较后输出.
    
    % for m = 1:500
    %     s = 0;
    %     for k = 1:m/2
    %         if rem(m,k) == 0
    %             s = s+k;
    %         end
    %     end
    %         if m == s
    %             disp(m);
    %         end
    % end

    二,函数文件

    1)函数文件的基本结构

    编写函数文件求半径为r的圆的面积和周长. [s,p] = fcircle(10)

     [s,p] = fcircle(10)
    s =
    
      314.1593
    
    
    p =
    
       62.8319

    2)函数调用

     % 利用函数文件,实现指教坐标(x,y)和极坐标(\rho,\theta)
    %函数fcircle.m
    % x = input ('输入直角坐标x:');
    % y = input ('输入直角坐标y:');
    % [rho,theta] = tran(x,y);
    % disp(['{\rho} = ',num2str(rho)]);
    % disp(['{\theta} = ',num2str(theta)]);
    
    % 利用函数的递归调用,求n!
    % % 函数factor.m
    % s = 0;
    % for i = 1:5
    %     s = s + factor(i);
    % end
    % s
    % % 函数factor.m调用
    % s = 0;
    % n = input ('请输入n,以求n的阶乘.n=');
    % for i = 1:n
    %     s = s + factor(i);
    % end
    % disp([num2str(n),'!=',num2str(s)])

    3)全局变量和局部变量

    % 全局变量示例
    % % 函数wadd.m
    %  global alpha beta
    %  alpha = 1;
    %  beta = 2;
    %  s = wadd(1,2)

    三.案例分析

    % % 用筛选法求某自然数范围内的全体素数.
    %  m = input('m=');
    %  p = 1:m;
    %  p(1) = 0;
    %  for i = 2:sqrt(m)
    %      for j = 2*i:i:m
    %          p(j) = 0
    %      end
    %  end
    %  n  = find(p~=0)
    %  p(n)
    
    %
    % m = input('m=');
    % p =2:m ;
    % for i = 2:sqrt(m)
    %     n = find(rem(p,i) == 0 & p ~= i); %如果p对i取余为0,并且p不等于i
    %     p (n) = [];
    % end
    % p
    
    % % 设f(x) = exp(0.5x)*sin(x+pi/6) ,求s = [0,3*pi]f(x)dx.
    % %----------------------------------------------------
    % a = 0;
    % b = 3*pi;
    % n = 10000;
    % h = (b-a)/n;
    % x =a; s = 0;
    % f0 = exp(-0.5*x)*sin(x+pi/6);
    % for i=1:n
    %     x = x +h;
    %     f1 = exp(-0.5*x)*sin(x+pi/6);    %更新f1
    %     s = s +(f0+f1)*h/2;              %求小矩阵的值.累加.
    %     f0=f1;                           %更新f0
    % end
    % s
    % %----------------------------------------------------
    % a = 0;
    % b = 3*pi;
    % n =1000;
    % h = (b-a)/n;
    % x = a:h:b;
    % f = exp(-0.5*x).*sin(x+pi/6);       %求图形上的各点.
    % for i =1:n
    %     s(i) = (f(i)+f(i+1))*h/2;       %求小梯形的面积.
    % end
    % s = sum (s)                         %累加求积分值.
    
    % %----------------------------------------------------
    % % 斐波拉契数列
    % n = input('求斐波拉契数列的第n项,n=');
    % resultFFIB = ffib(n)

    f2c.m

    clc;
    clear;
    F= input('输入华氏温度F:');
    C = 5*(F-32)/9;
    disp('华氏温度F为')
    disp(F)
    disp('转换为摄氏温度C是')
    disp(C)

    factor.m

    function f = factor(n)
    if n<=1
        f = 1;
    else
        f = factor(n-1)*n;
    end


    fcircle.m

    function [s,p] = fcircle(r)

    % CIRCLE calculate the zrea and perimeter of a circle of radir r
    % r 圆半径
    % s 圆面积
    % p 圆周长
    s = pi*r*r;
    p = 2*pi*r;

    % lookfor perimeter
    % fcircle                        - CIRCLE calculate the zrea and perimeter of a circle of radir r

    ffib.m

    function f =ffib(n)
    if n >2
        f = ffib(n-1) + ffib(n-2);
    else
        f =1;
    end

    tran.m

    %% tran.m
    function [rho,theta] = tran(x,y)

    rho = sqrt (x*x+y*y);
    theta = atan (y/x);
    wadd.m

    function f = wadd(x,y)
    global alpha beta
    f = alpha*x+beta*y;
    F:\matlab\work\TongXingYuanLi\Chapter2\type>

  • 相关阅读:
    python中gui编程的模块之一:tkinter(python3.x中是tkinter,小写的t)
    oracle中用户删除不了,ORA-01940提示 “无法删除当前已连接用户”
    python中一次性input3个整数,并用空格隔开怎么表示
    二、loadrunner参数化连接数据库
    一、loadrunner脚本录制及回放
    eclipse安装使用
    mysqld_safe与mysqld区别(转载)
    MySQL数据库用户基本管理
    Docker容器技术
    shell编程实战学习(4)
  • 原文地址:https://www.cnblogs.com/xilifeng/p/2816426.html
Copyright © 2020-2023  润新知