当前位置: 首页 > news >正文

MATLAB基础:5脚本与函数

脚本与函数

MATLAB命令的两种执行方式:

  • 交互式命令执行方式
  • 程序执行

要充分利用MATLAB数据结构的特点(矩阵运算、矢量化编程),充分利用MATLAB自带的函数

M文件:

  • 是一个文本文件,拓展名为.m
  • 可以用任何编辑程序来建立和编辑,默认matlab
  • M文件就是将处理问题的各种命令融合到一个文件中

启动MATLAB编辑器的三种方法:

  1. “主页”选项中的新建脚本/双击已有文件/打开命令按钮
  2. 命令行输入edit(既可以新建,也可以打开已有文件)
  3. 命令历史窗口,选中一些命令(按住ctrl可以同时选择多个),从右键快捷菜单中选择“创建脚本”命令,并在编辑区加入所选命令

M文件分类:

  1. 函数文件
  2. 脚本文件
区别函数文件脚本文件
输入参数没有
输出参数不返回返回
变量操作文件所有命令执行结果完全返回到工作空间执行完毕局部变量被清除
运行可以直接运行以函数调方式调用

举例:
建立一个M文件实现a和b的值的互换,2种方式
脚本文件:

a=input('请输入a的值:');
b=input('请输入b的值:');
c=a;
a=b;
b=c;
disp(['a=',num2str(a),'b=',num2str(b)]);

重点:input()函数和disp()函数


函数文件:
function [a,b]=swap(a,b)
c=a;
a=b;
b=c;
return;
end

重点:function和return

  1. 函数文件必须以function开头,以end结尾
  2. 函数文件()填输入参数,[]是输出参数
  3. 调用函数:[a,b]=swap(a,b)返回a和b的值
注释
  1. 单行注释:%
  2. 多行注释:%{ }%
函数文件的可调性
  • 调用函数时,MATLAB用两个永久变量nargin和nargout记录函数的输入参数和输出参数个数
  • 只要在函数文件包含这两个变量,就可以知道函数被调用时,输入参数和输出参数个数
    例子:
function fout=charray(a,b,c)
if nargin==1
fout=a;
elseif nargin==2
fout=[a,b];
elseif nargin==3
fout=[a,b,c];
end
return;
全局变量和局部变量
  • 函数文件中的变量是局部的,即在一个函数文件中定义的变量只能在该函数文件中使用,不能在别的函数使用
  • 如果要在若干个函数之间共享变量,可以将变量定义为全局变量
  • 全局变量用global命令定义,如:global a b
    例子:
    先建立函数文件wadd.m
    该函数将输入的参数加权相加:
function f=wadd(a,b)
global m n
f=m*a+n*b;
return;
end

命令行输入:

global m n
m=2;
n=3;
wadd(1,2)

函数的递归调用:

函数可以调用自己、调用他人
利用函数的递归,求n的阶乘:

function f=factorial(n)
if n<=0 
f=1;
else
f=n*factorial(n-1);
end

特殊形式函数:

1. 子函数
  • 可以在M文件同时定义多个函数
  • M文件出现的第一个函数称为主函数,其他函数称为子函数
  • 子函数只能由同一M文件调用,不能被其他文件调用
  • 函数名与主函数相同
    例如:
function d=func(a,b,c)
d=subfunc(a,b)+c;
end
function f=subfunc(a,b)
f=a*b;
end
2. 内联函数
  • 以字符串形式存在的函数表达式可以通过inline函数转换为内联函数
  • 例如:a=“x+y”,可以通过inline(a)转换为内联函数f(x,y)=x+y
a='(x+y)^2';
b=inline(a);
b(2,3)
3. 匿名函数
  • 匿名函数基本格式:函数名=@(x,y)x+y
  • 输入参数用逗号隔开
程序优化和调试

程序调试方法:

  • 程序错误有两类:语法错误和运行错误
  • 语法错误包括词法或文法错误,例如函数名拼写错、表达式写错等
  • 程序运行错误是指运行错误,例如变量未定义、函数调用错误等,称为程序逻辑错误
  • 利用调试函数
  • 利用调试工具

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 鸿萌数据恢复服务:Synology Hybrid RAID 的容错、优势和数据恢复
  • 【Java算法】二叉树的深搜
  • 数据结构修炼——顺序表和链表的区别与联系
  • 【目标检测】labelimg图像标注软件的使用流程
  • Vue3:reactive丢失响应式,数据有更新但表单没有更新
  • 完美解决 Array 方法 (map/filter/reduce) 不按预期工作 的正确解决方法,亲测有效!!!
  • Python模块和包:标准库模块(os, sys, datetime, math等)②
  • 邮件营销:助力企业转换客户,提升曝光率
  • Redis实践之缓存:设置缓存过期策略
  • web基础+http协议+httpd详细配置
  • docker中图形化界面的转发
  • 大模型技术新手指南:从零开始的全方位教程
  • 二叉树算法
  • Vivado FIR IP 详解 (一)
  • 初始c++:入门基础(完结)
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 【前端学习】-粗谈选择器
  • Android组件 - 收藏集 - 掘金
  • Angular 2 DI - IoC DI - 1
  • JS函数式编程 数组部分风格 ES6版
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • log4j2输出到kafka
  • MySQL用户中的%到底包不包括localhost?
  • Python学习之路13-记分
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Web设计流程优化:网页效果图设计新思路
  • 那些年我们用过的显示性能指标
  • 设计模式走一遍---观察者模式
  • 实战|智能家居行业移动应用性能分析
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 听说你叫Java(二)–Servlet请求
  • 小程序01:wepy框架整合iview webapp UI
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​用户画像从0到100的构建思路
  • $NOIp2018$劝退记
  • (26)4.7 字符函数和字符串函数
  • (4.10~4.16)
  • (9)目标检测_SSD的原理
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (分布式缓存)Redis持久化
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (十八)Flink CEP 详解
  • (四)opengl函数加载和错误处理
  • (五)关系数据库标准语言SQL
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (一)基于IDEA的JAVA基础12
  • (转)四层和七层负载均衡的区别
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .Net实现SCrypt Hash加密
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @vueup/vue-quill使用quill-better-table报moduleClass is not a constructor
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [ 数据结构 - C++]红黑树RBTree
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择