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



推荐阅读
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
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社区 版权所有