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

时间: 2024-10-30 12:24:12

matlab M文件和面向对象编程的相关文章

第二章 Matlab面向对象编程基础

DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab编程书上都对Matlab面向对象所提甚少甚至没提.因此在DeepLab的使用说明书中专门添加Matlab面向对象编程基础是有必要的.第一节 Matlab面向对象大体结构代码清单2.1.1 classdef className<handle & superclass1 & supercla

Matlab 为什么要使用面向对象的编程——开篇

基本上,Matlab的入门资料都会涉及到Matlab编程,但一般的书只涉及到面向过程的编程,忽视了面向对象的编程.实际上,Matlab很早就支持面向对象的编程,我们平时在利用图像对象.坐标系对象.图像对象都或多或少的使用了一些面向对象的性质. 本系列博文是本人在学习利用Matlab进行面向对象编程时自己的理解,主要的资料就是Matlab的帮助文档.因为本人对面向对象的编程只知皮毛,一些理解上的错误在所难免,欢迎指正,互相学习. 类是面向对象的编程中重要的一个概念,类就是描述具有共同特征对象的抽象

一个简单的Matlab面向对象编程实例

新建Dog.m 内容: classdef Dog properties % these are the variables name; age msg; end methods % these are the functions function obj = Dog() % constructor end function obj = setInfo(obj, name, age) obj.name = name; obj.age = age; end function rst = bark(o

C++ Primer 学习笔记_73_面向对象编程 --再谈文本查询示例

面向对象编程 --再谈文本查询示例 引言: 扩展第10.6节的文本查询应用程序,使我们的系统可以支持更复杂的查询. 为了说明问题,将用下面的简单小说来运行查询: Alice Emma has long flowing red hair. Her Daddy says when the wind blows through her hair, it looks almost alive, like a fiery bird in flight. A beautiful fiery bird, he

python_way.day7 模块(configparser,xml,shutil,subprocess)、面向对象(上)(创建类,类的构成,函数式编程与面向对象编程的选择,类的继承)

python_way.day7 1.模块 configparser,xml,shutil,subprocess 2.面向对象(上) 创建类,类的构成,函数式编程与面向对象编程的选择,类的继承 1.模块 configparser 用于处理特定格式的文件,其本职上使用open来操作,只能是  [test1] 特定的格式 [test1] k1 = 123 k2 = True [test2] k1 = 123 k2 = v1 文件内容 1.获取 import configparser #打开文件找到文件

Python基础-第七天-面向对象编程进阶和Socket编程简介

本篇内容: 1.面向对象编程进阶-静态方法 2.面向对象编程进阶-类方法 3.面向对象编程进阶-属性方法 4.面向对象编程进阶-特殊成员(内置方法) 5.面向对象编程进阶-反射 6.异常处理.断言 7.Socket编程简介 一.面向对象编程进阶-静态方法 1.静态方法的实现 通过@staticmethod装饰器可以把其装饰的方法变为一个静态方法: 变成静态方法后,形参中可以不用写self了.如果写了self,默认是不会把对象本身传递给self,需要手动传递: class Dog(object):

从一些简单代码实例彻底理解面向对象编程思想|OOP本质是什么?

从Rob Pike 的 Google+上的一个推看到了一篇叫<Understanding Object Oriented Programming>的文章,我先把这篇文章简述一下,然后再说说老牌黑客Rob Pike的评论. 先看这篇教程是怎么来讲述OOP的.它先给了下面这个问题,这个问题需要输出一段关于操作系统的文字:假设Unix很不错,Windows很差. 这个把下面这段代码描述成是Hacker Solution.(这帮人觉得下面这叫黑客?我估计这帮人真是没看过C语言的代码) 1 2 3 4

C++ Primer 学习笔记_34_面向对象编程(5)--虚函数与多态(二):纯虚函数、抽象类、虚析构函数、动态创建对象

C++ Primer 学习笔记_34_面向对象编程(5)--虚函数与多态(二):纯虚函数.抽象类.虚析构函数.动态创建对象 一.纯虚函数 1.虚函数是实现多态性的前提 需要在基类中定义共同的接口 接口要定义为虚函数 2.如果基类的接口没办法实现怎么办? 如形状类Shape 解决方法 将这些接口定义为纯虚函数 3.在基类中不能给出有意义的虚函数定义,这时可以把它声明成纯虚函数,把它的定义留给派生类来做 4.定义纯虚函数: class <类名> { virtual <类型> <函

面向对象编程(OOP)基础知识(一)

Java是一个支持并发.基于类和面向对象的计算机编程语言. 下面列出了面向对象软件开发的优点: 1.代码开发模块化,更易维护和修改. 2.代码复用. 3.增强代码的可靠性和灵活性. 4.增加代码的可理解性. 面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象.下面的章节我们会逐个分析这些特性. 封装 封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内部的数据.在Java当中,有3种修饰符:public,private和protected.每一种修饰符给