热门标签 | 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



推荐阅读
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 历经三十年的开发,Mathematica 已成为技术计算领域的标杆,为全球的技术创新者、教育工作者、学生及其他用户提供了一个领先的计算平台。最新版本 Mathematica 12.3.1 增加了多项核心语言、数学计算、可视化和图形处理的新功能。 ... [详细]
  • 本文探讨了在 SQL Server 中使用 JDBC 插入数据时遇到的问题。通过详细分析代码和数据库配置,提供了解决方案并解释了潜在的原因。 ... [详细]
  • 本文将指导如何向ReactJS计算器应用添加必要的功能,使其能够响应用户操作并正确计算数学表达式。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文详细介绍了 Java 中的 org.apache.hadoop.registry.client.impl.zk.ZKPathDumper 类,提供了丰富的代码示例和使用指南。通过这些示例,读者可以更好地理解如何在实际项目中利用 ZKPathDumper 类进行注册表树的转储操作。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 2017-2018年度《网络编程与安全》第五次实验报告
    本报告详细记录了2017-2018学年《网络编程与安全》课程第五次实验的具体内容、实验过程、遇到的问题及解决方案。 ... [详细]
  • iOS 开发技巧:TabBarController 自定义与本地通知设置
    本文介绍了如何在 iOS 中自定义 TabBarController 的背景颜色和选中项的颜色,以及如何使用本地通知设置应用程序图标上的提醒个数。通过这些技巧,可以提升应用的用户体验。 ... [详细]
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社区 版权所有