• matlab M文件和面向对象编程


    一.matlab控制流

     1.for循环结构: 

    for i=1:10;
    x(i)=i;
    end;
    x
    x =
    1 2 3 4 5 6 7 8 9 10

    2.while循环结构:

      Fibonacci数组的元素满足Fibonacci 规则,现要求该数组中第一个大于10000的元素。

    a(1)=1;a(2)=1;i=2;
    while a(i)<=10000
    a(i+1)=a(i-1)+a(i);
    i=i+1;end;

    i,a(i)

    i =
    21
    ans =
    10946

    3.if-else-end分支结构

    cost=10;number=12;
    if number>8
    sums=number*0.95*cost;
    end,sums

    sums =
    114.0000

    用for 循环指令来寻求Fibonacc 数组中第一个大于10000 的元素:

    n=100;a=ones(1,n);
    for i=3:n
    a(i)=a(i-1)+a(i-2);
    if a(i)>=10000
    a(i),
    break;
    end;
    end,i

    ans =
    10946
    i =
    21

    4.switch-case结构:学生的成绩管理,用来演示switch 结构的应用

    clear;
    %
    for i=1:10;a{i}=89+i;b{i}=79+i;c{i}=69+i;d{i}=59+i;end;c=[d,c];
    Name={' Jack','Marry','Peter',' Rose',' Tom'};
    Mark={72,83,56,94,100};Rank=cell(1,5);
    %
    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 满分

    5.try-catch结构:对(3× 3)魔方阵的行进行援引,当“行下标”超出魔方阵的最大行数时,将改向对最后一行的援引,并显示“出错”警告。

    clear,N=4;A=magic(3);
    try
    A_N=A(N,:)
    catch
    A_end=A(end,:)
    end
    lasterr
    A_end =
    4 9 2
    ans =
    Index exceeds matrix dimensions.

    二.跨空间变量传递

    1.跨空间计算串表达式的值:(A)编写绘制正多边形或圆的程序。(B)子函数与(母)函数的关系。(C)各种不同的工作空间。(D)evalin 运行机理与eval 的异同。

    (1)
    [exm070531_1.m]
    function y1=exm070531_1(a,s)
    t=(0:a)/a*2*pi;
    y1=subevalinzzy(4,s);
    %------------ subfunction -------------
    function y2=subevalinzzy(a,s)
    t=(0:a)/a*2*pi;ss='a*exp(i*t)';
    switch s
    case {'base','caller'}
    y2=evalin(s,ss);
    case 'self'
    y2=eval(ss);
    end

    (2)
    clear,a=30;t=(0:a)/a*2*pi;sss={'base','caller','self'};
    for k=1:3
    y0=exm070531_1(8,sss{k});
    subplot(1,3,k)
    plot(real(y0),imag(y0),'r','LineWidth',3),axis square image
    end

    2.跨空间赋值:assignin 运作机理示范。

    (1)
    [exm070532_1.m]
    function y=exm070532_1(x)
    y=sqrt(x);t=x^2;
    assignin('base','yy',t)

    (2)
    clear;x=4;y=exm070532_1(x);
    disp([blanks(5),'x',blanks(5),'y',blanks(4),'yy']),disp([x,y,yy])
    x y yy
    4 2 16

    三.串演算函数

    1.eval

    【例7.6.1-1】计算“表达式”串,产生向量值。
    clear,t=pi;cem='[t/2,t*2,sin(t)]';y=eval(cem)
    y =
    1.5708 6.2832 0.0000
    【例 7.6.1-2】计算“语句”串,创建变量。
    clear,t=pi;eval('theta=t/2,y=sin(theta)');who
    theta =
    1.5708
    y =
    1

    Your variables are:
    t theta y

    【例 7.6.1-3】计算“替代”串。
    A=ones(2,1);B=ones(1,3);c=eval('B*A','A*B'),errmessage=lasterr
    c =
    1 1 1
    1 1 1
    errmessage =
    Error using ==> *
    Inner matrix dimensions must agree.

    【例 7.6.1-4】计算“合成”串。
    CEM={'cos','sin','tan'};
    for k=1:3
    theta=pi*k/12;
    y(1,k)=eval([CEM{1},'(',num2str(theta),')']);
    end
    y
    y =
    0.9659 0.8660 0.7071

    2.feval

    【例7.6.2-1】feval 和eval 运行区别之一:feval 的FN 绝对不能是表达式。
    x=pi/4;Ve=eval('1+sin(x)')
    Ve =
    1.7071
    Vf=feval('1+sin(x)',x)
    ??? Error using ==> feval
    Invalid function name '1+sin(x)'.
    【例 7.6.2-2】feval 和eval 调用区别:feval 的FN 只接受函数名。本例两种方法以后者为好。
    randn('seed',1);A=rand(2,2);
    [ue,de,ve]=eval('svd(A)');
    disp('Results by eval');disp([ue,de,ve]);disp(blanks(1))
    [uf,df,vf]=feval('svd',A);
    disp('Results by feval');disp([uf,df,vf])
    Results by eval
    -0.9193 -0.3936 1.2212 0 -0.7897 -0.6135
    -0.3936 0.9193 0 0.2633 -0.6135 0.7897
    Results by feval
    -0.9193 -0.3936 1.2212 0 -0.7897 -0.6135
    -0.3936 0.9193 0 0.2633 -0.6135 0.7897

    3.内联函数

    【例 7.6.3.3-1】演示:内联函数的第一种创建格式;使内联函数适于“数组运算”。
    clear,F1=inline('sin(rho)/rho')
    F1 =
    Inline function:
    F1(rho) = sin(rho)/rho
    f1=F1(2)
    f1 =
    0.4546
    FF1=vectorize(F1)
    xx=[0.5,1,1.5,2];ff1=FF1(xx)
    FF1 =
    Inline function:
    FF1(rho) = sin(rho)./rho
    ff1 =
    0.9589 0.8415 0.6650 0.4546

    【例 7.6.3.3-2】演示:第一种内联函数创建格式的缺陷;含向量的多宗量输入的赋值。
    G1=inline('a*exp(x(1))*cos(x(2))'),G1(2,[-1,pi/3])
    G1 =
    Inline function:
    G1(a) = a*exp(x(1))*cos(x(2))
    ??? Error using ==> inline/subsref
    Too many inputs to inline function.
    G2=inline('a*exp(x(1))*cos(x(2))','a','x'),G2(2,[-1,pi/3])
    G2 =
    Inline function:
    G2(a,x) = a*exp(x(1))*cos(x(2))
    ans =
    0.3679

    【例 7.6.3.3-3】演示:产生向量输入、向量输出的内联函数;这种向量函数的调用方法。
    Y2=inline('[x(1)^2;3*x(1)*sin(x(2))]')
    argnames(Y2)
    Y2 =
    Inline function:
    Y2(x) = [x(1)^2;3*x(1)*sin(x(2))]
    ans =
    'x'
    x=[4,pi/6];
    y2=Y2(x)
    y2 =
    16.0000
    6.0000

    【例 7.6.3.3-4】演示:最简练格式创建内联函数;内联函数可被feval 指令调用。
    Z2=inline('P1*x*sin(x^2+P2)',2)
    Z2 =
    Inline function:
    Z2(x,P1,P2) = P1*x*sin(x^2+P2)
    z2=Z2(2,2,3)
    fz2=feval(Z2,2,2,3)
    z2 =
    2.6279
    fz2 =

    2.6279

  • 相关阅读:
    Object-c学习之路七(oc字符串操作)
    Object-c学习之路六(oc字符串文件读写)
    Object-c学习之路五(@protocol协议)
    jQ效果(滑动)
    jQ效果(淡入淡出)
    jQ效果(显示隐藏)
    jQ笔记2
    jq笔记
    DOM节点操作
    两个css样式
  • 原文地址:https://www.cnblogs.com/hxbbing/p/4569387.html
Copyright © 2020-2023  润新知