热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

matlab基本语法总结,matlab基础语法

title:matlab基础语法date:2019-08-1908:53:16一、变量变量命名:区分大小写,必须以字母开头,后可跟下划线和

title: matlab基础语法

date: 2019-08-19 08:53:16

一、变量

变量命名:区分大小写,必须以字母开头,后可跟下划线和数字

变量类型:

全局变量:global X_Val,变量名大写,在函数体开头位置进行定义

永久变量:persistent a,只允许声明它的函数进行存取

二、控制流

1.顺序结构

2.if-else-end分支结构

注意:elseif是连在一起写的

x=input(' enter''x'': ');%input的实际参数是一个,即 enter'x':

if(x>0)

y=1;

elseif(x==0)

y=0;

else y=-1;

end

disp(y)%将y结果输出在命令窗口中

3.switch-case结构

num=input(' enter''num'': ');

switch num

case 1

data='Hello';

case 2

data='Nice';

case 3

data='Good';

otherwise

data='No'

end

disp(data);

注意:exp(x),表示e的x次幂,参数也可以是矩阵,输出为矩阵次幂

4.try-catch结构

num=1;

Mat=magic(4)%方阵,且每行,每列,及对角线之和相等

try

Mat_num=Mat(num,:)%取第num行元素

catch

Mat_end=Mat(end,:)%若num超过了矩阵有的行数,均取最后一行

end

lasterr%显示出错原因,也会重复上一次出错情况下的错误原因(每次运行都会有输出)

5.for循环结构

注意:matlab是列优先的,所以for循环次数是由数组array的列数(即个数)决定的

for i=1:4

for j=1:4

if i>(5-j)

Mat(i,j)=0;

else

Mat(i,j)=i+j-1;

end %与if配对的end

end %与j层循环配对

end %与i层循环配对

6.while循环结构

while和end之间的内容为循环体,即C++中括号内内容,注意这里不使用括号,要习惯matlab里条件和循环体都不需要括号

%求第一个大于9999的斐波那契数列元素

a(1)=1;

a(2)=2;

i=3;

while a(i)<10000

a(i)&#61;a(i-2)&#43;a(i-1);

i&#61;i&#43;1;%这里不能写作i&#43;&#43;或i&#43;&#61;1

end

[i a(i)] %显示结果

7.return指令

用法和c&#43;&#43;一样&#xff0c;可以使被调函数在未执行完的时候return到调用函数

8.input和keyboard指令

Value&#61;input(&#39;message:&#39;);%引号中放输出在屏幕的提示信息

Value&#61;input(&#39;message:&#39;,&#39;s&#39;);%将用户输入的信息以字符串形式赋给Value

keyboard将控制权交给键盘&#xff0c;可以直接从键盘读入指令,运行界面如下:

>> keyboard

K>> N&#61;input(&#39;x:&#39;);

x:2

input指令只能够输入值(数组、字符串或元胞数组等)&#xff0c;而keyboard可以输入指令

输入dbcont退出keyboard模式

元胞数组cell:类似于C&#43;&#43;中的结构体&#xff0c;就是数组里可以包含不同类型的数据

9.yesinput、pause、continue、break指令

yesinput是一个只能输入的指令&#xff0c;无法在notebook中运行

Value&#61;yesinput(&#39;S:&#39;,0,3)这样出现函数未定义报错&#xff1f;&#xff1f;&#xff0c;不知道咋回事&#xff0c;算了这个函数反正应该不常用&#xff0c;明明应该是系统自带的函数吧…没思绪

声明变量用sym

pause命令

Value&#61;input(&#39;x:&#39;);

pause; %暂停执行文件&#xff0c;按任意键可以继续

pause(3);%暂停3s&#xff0c;然后自动继续执行

Value

continue命令和break命令与C&#43;&#43;中相同

10.error和warning指令

error(&#39;message&#39;);%输出错误信息message(红色底)&#xff0c;就像是java里try-catch错误信息那样自定义出错吧

errortrap;%也出现未定义&#xff1f;&#xff1f;&#xff1f; 这个是发生错误后&#xff0c;控制程序是否继续执行的开关

lasterr%显示上一次出错原因&#xff0c;如果上一次没有出错就上上次

warning(&#39;message&#39;);

lastwarn;

三、脚本和函数

函数&#xff1a;以function开头&#xff0c;且.m文件应与函数名相同

function y&#61;average(x)

[a,b]&#61;size(x);

if ~((a&#61;&#61;1)|(b&#61;&#61;1)|(a&#61;&#61;1)&(b&#61;&#61;1))

error(&#39;必须输入向量&#39;)

end

y&#61;sum(x)/length(x);

匿名函数&#xff1a;直接在命令行中定义和使用

>> Fxy&#61;&#64;(x,y) x.^y&#43;3*x*y

Fxy &#61;

包含以下值的 function_handle:

&#64;(x,y)x.^y&#43;3*x*y

>> Fxy(2,5)

ans &#61;

62

1.eval和feval函数

eval函数应用举例&#xff1a;可以计算四种不同类型的语句字符串

(1)”表达式“字符串

Array&#61;1:5;

String&#61;&#39;[Array*2;Array/2;2.^Array]&#39;;

Output&#61;eval(String)

>> test

Output &#61;

2.0000 4.0000 6.0000 8.0000 10.0000 %Array*2

0.5000 1.0000 1.5000 2.0000 2.5000 %Array/2

2.0000 4.0000 8.0000 16.0000 32.0000 %Array.^2

(2)“指令语句”字符串

theta&#61;pi;

eval(&#39;Output&#61;exp(sin(theta))&#39;);

who

>> test

Output &#61;

1.0000

您的变量为:

Array Output String theta %这里输出的是当前工作区的所有变量

(3)“备选指令语句”字符串: 只允许两个参数,以第一个为主&#xff0c;第二个是备选指令

Matrix&#61;magic(3)

Array&#61;eval(&#39;Matrix(5,:)&#39;,&#39;Matrix(3,:)&#39;)

errmessage&#61;lasterr

>> test

Matrix &#61;

8 1 6

3 5 7

4 9 2

Array &#61;

4 9 2

errmessage &#61;

&#39;位置 1 处的索引超出数组边界(不能超出 3)。&#39;

(4)“组合“字符串&#xff1a;

Expression&#61;{&#39;zeros&#39;,&#39;ones&#39;,&#39;rand&#39;,&#39;magic&#39;};

Num&#61;2;

Output&#61;[];

for i&#61;1:length(Expression)

Output&#61;[Output eval([Expression{i},&#39;(&#39;,num2str(Num),&#39;)&#39;])];

end

Output

>> test

Output &#61;

0 0 1.0000 1.0000 0.8147 0.1270 1.0000 3.0000

0 0 1.0000 1.0000 0.9058 0.9134 4.0000 2.0000

敲重点&#xff1a;eval函数的功能是将一个字符串等价转换为一个对应可执行的matlab语句&#xff0c;举例&#xff1a;

a &#61; 3

eval(&#39;b&#61;4&#39;)

a &#61;

3

b &#61;

4

eval([Expression{i},&#39;(&#39;,num2str(Num),&#39;)&#39;])

&#39;zeros(2)&#39;

&#39;ones(2)&#39;

&#39;rand(2)&#39;

&#39;magic(2)&#39;

再调用eval函数

eval(&#39;zeros(2)&#39;) -->等价于MATLAB语句zeros(2)

eval(&#39;ones(2)&#39;) -->等价于MATLAB语句ones(2)

eval(&#39;rand(2)&#39;) -->等价于MATLAB语句rand(2)

eval(&#39;magic(2)&#39;) -->等价于MATLAB语句magic(2)

生成了四个2*2的矩阵&#xff0c;在行方向拼接&#xff0c;形成2 *8的矩阵&#xff0c;Output最初时为空数组

feva函数应用举例&#xff1a;效率比eval高

[y1,y2,...]&#61;feval[&#39;FN&#39;,arg1,arg2,...] %与eval不同的是FN不可以是表达式

feval是用变量arg1,arg2,…来执行FN函数所指定的计算

两种写法举例:

eval(&#39;plot(z)&#39;);

feval(&#39;plot&#39;,z);

2.内联函数

inline(&#39;CE&#39;,arg1,arg2,...)和inline(&#39;CE&#39;)(不能使用多标量构成的向量进行赋值&#xff0c;即只能一个参数)

示例:

可以自动辨识字符串‘CE’转化成输入变量自动生成的内联函数

内联函数用于沟通feval和eval&#xff0c;只要是eval可以操作的表达式都可以通过inline转换成内联函数&#xff0c;这样内联函数总能被feval调用

注意&#xff1a;字符串’CE’中不能包含赋值号"&#61;"

f1&#61;inline(&#39;mod(12,5)&#39;)

f2&#61;vectorize(f1) % 使内联函数适用于数组运算的规则

f3&#61;char(f2) % 取出计算公式&#xff0c;即f3&#61;&#39;mod(12,5)&#39;

class(f3) % &#39;char&#39;

class(f2) % &#39;inline&#39;

class(f1) % &#39;inline&#39;

最好使用带参数的&#xff0c;不然容易出问题

f4&#61;inline(&#39;m*exp(n(1))*cos(n(2))&#39;),f4(1,[-1]) %这样是不行的&#xff0c;没办法使用[-1,pi/2](错误提示&#xff1a;输入数目太多)&#xff0c;就算变成[-1]也不行&#xff0c;去掉就会变成没有定义n

f5&#61;inline(&#39;m*exp(n(1))*cos(n(2))&#39;,&#39;m&#39;,&#39;n&#39;),f5(1,[-1,,pi/2]) % n(1),n(2)取的是[-1,pi/2]这个数组里的值

内联函数也可以向量输入、向量输出

y&#61;inline(&#39;[3*x(1)*x(2)^3;sin(x(2))]&#39;)

argnames(y) %输出函数y的变量名

x&#61;[10,pi*5/6];

ans&#61;y(x)

>> test

y &#61;

内联函数:

y(x) &#61; [3*x(1)*x(2)^3;sin(x(2))]

ans &#61;

1×1 cell 数组

{&#39;x&#39;}

ans &#61;

538.3034

0.5000

创建内联函数&#xff0c;并被feval调用示例&#xff1a;

Z&#61;inline(&#39;floor(x)*sin(P1)*exp(P2^2)&#39;,2) %第二个参数为数字的时候&#xff0c;表示的是输入参数的个数

argnames(Z)

z&#61;Z(2.3,pi/8,1.2)

fz&#61;feval(Z,2.3,pi/8,1.2)

>> test

Z &#61;

内联函数:

Z(x,P1,P2) &#61; floor(x)*sin(P1)*exp(P2^2)

ans &#61;

3×1 cell 数组

{&#39;x&#39; }

{&#39;P1&#39;}

{&#39;P2&#39;}

z &#61;

3.2304

fz &#61;

3.2304

3.向量化和预分配

向量化的目的主要是加速循环&#xff0c;例如&#xff1a;

x&#61;0.01;

for k&#61;1:1001

y(k)&#61;log10(x);

x&#61;x&#43;0.01;

end

y

进行向量化翻译&#xff1a;

x&#61;0.01:0.01:10

y&#61;log10(x)

y

若一条代码无法向量化&#xff0c;我们通过预分配内存&#xff0c;加速循环&#xff0c;免去扩展r向量的时间

tic

t&#61;zeros(100,1);

for n&#61;1:100

t(n)&#61;rank(magic(n));

end

toc



推荐阅读
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 深入理解排序算法:集合 1(编程语言中的高效排序工具) ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 文章目录Golang定时器Timer和Tickertime.Timertime.NewTimer()实例time.AfterFunctime.Tickertime.NewTicke ... [详细]
  • 2022年7月20日:关键数据与市场动态分析
    2022年7月20日,本文对当日的关键数据和市场动态进行了深入分析。主要内容包括:1. 关键数据的解读与趋势分析;2. 市场动态的变化及其对投资策略的影响;3. 相关经济指标的评估。通过这些分析,帮助读者更好地理解当前市场环境,为决策提供参考。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
author-avatar
mobiledu2502897851
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有