MatlabM文件编程
MATLAB-程序设计-M文件建立
1、先建立函数M文件fun2.m来定义函数f(x) function f=fun2(x) 1 else if x<=0
f=x^3 else
f=2*x end end
2、再在MATLAB命令窗口输入fun2(2),fun2(0.5), fun2(-1)即可.
MATLAB入门
程序设计
M文件
MATLAB的内部函数是有限的,有时为了研究 某一个函数的各种性态,需要为MATLAB定义新函 数,为此必须编写函数文件. 函数文件是文件名后 缀为M的文件,这类文件的第一行必须是一特殊字 符function开始,格式为:
function 因变量名=函数名(自变量名) 函数值的获得必须通过具体的运算实现,并赋 给因变量.
2x x 1
1、编写函数M文件 function f=fun1(x) if x>1
f=x^2+1 end if x<=1
f=2*x end
2、在MATLAB命令窗口输入fun1(2),fun1(-1)即可.
2) 有两个选择的一般形式是: if (expression1) {commands1} else {commands2} end
例: 设银行年利率为11.25%.将10000元钱存入银行, 问多长时间会连本带利翻一番?
money=10000; years=0; while money<20000
years=years+1; money=money*(1+11.25/100); end years money
运行结果:
years =7 money = 2.1091e+004
3. if-else-end结构
(1)有一个选择的一般形式是: if (expression) {commands} end
matlab基本编程
例
程序如下: function iftow(x) if x>0
fprintf(‘%f is a positive number\n’,x) else
fprintf(‘%f is not a positive number\n’,x) end
例 计算分段函数值。
程序如下: x=input('请输入x的值:'); if x==10 y=cos(x+1)+sqrt(x*x+1); else y=x*sqrt(x+sqrt(x)); end y
function f = fact(n) %函数的定义行
% Compute a factorial value. %H1行
% FACT(N) returns the factorial of N, %帮助文 本
% usually denoted by N!
% Put simply, FACT(N) is PROD(1:N). %注释
disp(setstr(abs(c)-1)); elseif c>='0'& c<='9'
disp(abs(c)-abs('0')); else
disp(c); end
例 输入数n,判断其奇偶性
程序如下: n = input('n='), if rem(n,2)==0 A = ‘even’ else A = ‘odd’ end
3.多分支if语句 语句格式为: if 条件1
语句组1 elseif 条件2
语句组2
…… elseif 条件m
语句组m
else 语句组m+1
Matlab笔记之十一---- 有关M文件编写
Matlab笔记之十一---- ◎#有关M文件编写#◎for循环结构:for x = array( commands )endwhile循环结构:while expression( commands )enda(1)=1a(2)=1i=2while a(i)<=10000a(i+1)=a(i-1)+a(i)i=i+1end;ia(i)单分支:if expression(commands)end双分支:if expression(commands1)else(commands2)end多分支:if expression1(commands)elseif expression2(commands)…………else(commands)end如果判决条件expression为一个空数组,MATLAB认为条件为假(false)。
表达式有时由多个逻辑子表达式组成的,MATLAB将尽可能少地检测这些子表达式的值。
例如,表达式为:(子表达式1 |子表达式2),当MATLAB 检测到子表达式1的值为真时,它就认为表达式为真,而不再对子表达式2进行检测。
又如,表达式为:(子表达式1 & 子表达式2),当MATLAB检测到子表达式1的值为假时,它就认为表达式值为假的,从而跳过该结构。
if指令判决和break指令的配合使用,可以强制终止for循环或while循环。
switch-case结构:switch ex ex为一标量或字符串。
case test1(commands 1) 当ex等于test1时,执行组命令1,然后跳出该结构。
case test2……(commands k) 当ex等于testk时,执行组命令k,然后跳出该结构。
otherwise otherwise指令可以不存在(commands) 表达式不等于前面所有检测值时,则执行该组命令。
end1 当遇到switch结构时,MATLAB将表达式的值依次和各个case指令后面的检测值进行比较。
matlab编写m文件的例子
matlab编写m文件的例子一、矩阵运算在MATLAB中,矩阵运算是一项重要的功能。
下面以几个示例来说明如何使用MATLAB进行矩阵运算。
1. 矩阵的加法假设有两个矩阵A和B,它们的维度相同。
我们可以通过使用"+" 运算符来对这两个矩阵进行相加。
例如:```matlabA = [1 2 3; 4 5 6; 7 8 9];B = [9 8 7; 6 5 4; 3 2 1];C = A + B;disp(C);```上述代码将输出矩阵C,即A和B对应位置元素相加的结果。
2. 矩阵的乘法矩阵的乘法在MATLAB中有两种形式:点乘和矩阵乘。
点乘使用".*" 运算符,而矩阵乘使用"*" 运算符。
下面分别介绍这两种运算。
点乘示例:```matlabA = [1 2 3; 4 5 6; 7 8 9];B = [9 8 7; 6 5 4; 3 2 1];C = A .* B;disp(C);```上述代码将输出矩阵C,即A和B对应位置元素相乘的结果。
矩阵乘示例:```matlabA = [1 2 3; 4 5 6; 7 8 9];B = [9 8 7; 6 5 4; 3 2 1];C = A * B;disp(C);```上述代码将输出矩阵C,即A和B的矩阵乘积。
3. 矩阵的转置在MATLAB中,可以使用 "transpose" 函数或 ".'" 运算符对矩阵进行转置。
下面是一个示例:```matlabA = [1 2 3; 4 5 6; 7 8 9];B = transpose(A);C = A.';disp(B);disp(C);```上述代码将分别输出矩阵B和C,它们都是矩阵A的转置。
二、图像处理MATLAB也提供了丰富的图像处理函数,下面以几个示例来说明如何使用MATLAB进行图像处理。
1. 读取图像使用"imread" 函数可以读取图像文件。
matlab编程简明教程
>> isfinite(5) >> isinf(5)
14
运算优先级
括号 幂,点幂 正号,负号,逻辑非 乘,除,点乘,点除 加,减 冒号运算 关系运算
& | && ||
高
低
15
本讲主要内容
M 文件 Matlab 编程基础
算术运算、关系运算、逻辑运算 控制结构:
顺序结构:数据输入输出(input、disp、fprintf 等) 选择结构:if 语句、switch 语句 循环结构:for 循环、while 循环
\n ( 换行 ) \t ( 制表符 ) \b ( 退格 ) \\ ( 反斜杆 ) %% ( 百分号 )
20
fprintf
例: >> a='Hello';
>> b=2.4; >> c=100*pi; >> fprintf('a=%s, b=%f, c=%e\n',a,b,c)
format 中的格式字符串要与输出变量一一对应
1
0
1
1
0
1
0
0
在 Matlab 中,0 表示 “假”,非零表示 “真”
12
逻辑运算
逻辑运算函数:all、any
any(x)
如果向量 X 中存在非零元素,则返回 1, 否则返回 0
all(x)
如果向量 X 中所有元素都非零,则返回 1, 否则返回 0
若 x 为矩阵,则 any 和 all 按列运算, 返回一个 0-1 向量
y=a+1; elseif n==1
y=a*(1+n); elseif n==2
MATLAB的M文件学习和使用_纯手打-真实经验之谈
MATLAB的M文件的学习和使用
一、概念
M文件是MATLAB的程序文件,分为两类:脚本文件和函数文件。
✓脚本文件可以用于执行一些简单的MATLAB命令,运行时直接输入文件名就可以。
✓函数文件使用时不能直接输入函数名,必须由其他语句调用。
二、基本操作:
✓创建M文件:点击工具栏上的图标,或在命令窗口输入edit。
✓打开M文件:点击工具栏上的图标。
✓保存M文件:写好内容后,点击保存按钮,函数文件保存时文件名要和函数名一致。
存储路径一定要是英文。
三、函数M文件格式
函数M文件不能独立执行,有输入参数和输出参数,输出形参多于一个时,用方括号括起来。
格式为:
●function [参数1,参数2,…]=函数名(参数1,参数2,…)
●注释
●函数体
四、示例
1、创建文件,写入函数,并保存。
两个数加、乘运算,定义为ff函数:
2、“当前路径”和文件保存路径一致时才能调用,如果不一致就会报错。
我的文件放在桌面上了,当前路径就是桌面:
3、调用时先给出函数参数的值,如图:
因为是输入输出都是形参,所以变量名可以自己定义:
4、把调用命令写到另一个M文件中,这个是M文件是脚本文件,保存为main1.m,
和在命令窗口调用效果是一样的:
5、运行main1文件,在命令窗口直接输入文件名即可:
或者点击main1文件的运行按钮,命令窗口出现结果:。
matlab编程经典例题
3.2 程序控制结构 3.2.1 顺序结构 1.数据的输入 从键盘输入数据,则可以使用input函数来进
行,该函数的调用格式为: A=input(提示信息,选项); 其中提示信息为一个字符串,用于提示用户 输入什么样的数据。 如果在input函数调用时采用's'选项,则允 许用户输入一个字符串。例如,想输入一 个人的姓名,可采用命令: xm=input('What''s your name?','s');
%输出商品实际销售价格
3.try语句 语句格式为:
try 语句组1
catch 语句组2
end try语句先试探性执行语句组1,如果语句组1
在执行过程中出现错误,则将错误信息赋 给保留的lasterr变量,并转去执行语句组2。
1
例3-7 矩阵乘法运算要求两矩阵的维数相容,否则 会出错。先求两矩阵的乘积,若出错,则自动转 去求两矩阵的点乘。
语句组m
else 语句组n
end 语句用于实现多分支选择结构。
1
例3-5 输入一个字符,若为大写字母,则输出其 对应的小写字母;若为小写字母,则输出其对应 的大写字母;若为数字字符则输出其对应的数值, 若为其他字符则原样输出。 c=input('请输入一个字符','s'); if c>='A' & c<='Z' disp(setstr(abs(c)+abs('a')-abs('A'))); elseif c>='a'& c<='z' disp(setstr(abs(c)- abs('a')+abs('A'))); elseif c>='0'& c<='9' disp(abs(c)-abs('0')); else disp(c); end
MATLAB实验三Matlab的M文件编写
MATLAB实验三 Matlab的M文件编写
21、已知函数y=x,编写能对任意输入x值求相应的y值的程序,文件名规定为sy301。
并利用该程序求得当x=[1,3,5,7]数组时,对应的y数组?
,0.3t2、已知函数y=1-ey,1,ecos0.7t,编写能对任意输入t的范围,绘制出y的曲线图的程序,文件名规定为sy302。
要求:(1)显示分格线
(2)所控制的坐标轴刚好将图形包括在内。
(3)完善标注,坐标和标题
3、编写给予任意的圆点坐标(x0,y0)和半径r,绘制出圆的程序,文件名规定为sy303。
4、编写给予任意的圆点坐标(x0,y0)和半径r(r为一组数组如
[1,3,5]),绘制出圆组(年轮)的程序,文件名规定为sy304。
参考P179例5.2-1
5、计算1+3+5…+99 的值
6、编写M函数文件,将某班学生某门课的成绩为:60,75,85,96,52,36,86,56,94,84,77,用switch结构统计各分段的人数,并将各人数变为用优,良,中,及格和不及格
表示,统计人数和成绩变换都用子函数实现。
MATLAB编程基础第讲M文件底层IO命令的数据输入与输出程序优化
MATLAB编程基础第讲M文件底层IO命令的数据输入与输出程序优化MATLAB是一种被广泛应用于科学计算、数学建模和工程分析领域的高级编程语言和交互式环境,其典型的使用场景包括数字信号处理、图形处理、矩阵计算、数值分析等等。
在MATLAB编程中,M文件是最基础、最常见的文件类型,其由一组MATLAB程序语句组成,可用于实现各种数学运算、数据处理、编程结构等功能。
而对于M文件的数据输入与输出,底层IO命令则是非常实用的工具,本文将阐述如何使用MATLAB底层IO命令实现M文件数据输入输出,并对其进行优化。
一、MATLAB底层IO命令在MATLAB中,读写文件有多种方法,常用的方法有fread、fwrite、fscanf、fprintf、load、save等。
而在这些方法中,fread和fwrite可以实现最基本的二进制数据读写功能,速度相对较快、效率较高。
与之不同的是,fscanf和fprintf则是针对文本文件的读写,其通常用于对ASCII字符数据的读写。
以下将分别介绍这些函数的基本使用方法。
1. fread函数fread函数可实现二进制数据的读写,其基本语法为:fid = fopen(filename, permission);data = fread(fid, size, precision);fclose(fid);其中,filename表示要进行读写操作的文件名,permission表示文件的访问权限,如r表示只读,w表示只写,a表示追加。
size是一个1x2的向量,表示读写数据的大小,如size=[100 1]表示读写100个数据项,每个数据项为1个元素。
precision是数据类型,如int32、double、uchar等。
在使用fread函数时,输入的数据类型需要与文件中的数据类型相匹配,否则会出现类型转换错误。
同时,fread函数的读写速度相对较快,但是其在处理文本文件时不可用。
MATLABd的M文件程序设计
运行结果: 输入 n= 87
r= B
9
2. switch语句
switch 表达式 计算表达式 case 数值1 程序模块1; 数值1 数值n 表达式的值等于? case 数值2 数值2 数值3 程序模块2; 模块1 模块2 模块3 模块n …… otherwise 注意: 和C语言不同的是,在switch结构 程序模块n 中,如果一个case条件满足,那么在执行 …… 完这个case组中的语句体之后,就会直接 end 去执行end语句后面的语句,而不再判断
可以接受输入参数和返回输出参数。 所使用的变量为临时的局部变量,当运行完毕
函数文件,其变量空间被释放。
25
4.3.2 函数文件
函数文件基本格式:
function [输出形参列表]=函数名(输入形参列 表) %注释说明语句段 程序语句段
26
4.3.2 函数文件
27
命令文件与函数文件的区别 P187
dfile.mat dfile.mat dfile.mat dfile.mat
save dfile x-ascii-double
其它case语句的情况。
10
例:将百分制的学生成绩转换为五级制的成绩输出 ——使用switch语句
>>clear >>n=input('输入n= '); >>switch fix(n/10) case {10,9} r='A' case 8 r='B' case 7 r='C' case 6 r='D' otherwise r='E' end
Matlab-M文件的程序控制
实验二 Matlab程序设计一、目的:1、掌握建立M文件的方法;2、掌握利用if,switch语句实现条件结构的方法;3、了解try语句的使用;4、掌握利用for,while语句实现循环结构的方法;5、掌握M文件的调试方法。
二、原理:当对于某些复杂而且反复操作的问题,我们可以编成可存储的程序文件(M文件),再让Matlab执行程序文件,这种工作模式称为程序文件模式。
当运行程序后,Matlab就会自动依次执行文件中的命令,直至全部命令执行完毕。
以后需要这些命令时,只需再次运行该程序。
三、仪器及软件:电脑、Matlab编程软件四、实验数据:个人创建的M文件:function[s,v]=fball(r)%求球的体积,表面积%s 球的表面积%v 球的体积%r 球的半径>> X='Good Morning'; >> disp(X)Good Morning>> A=[1,2,3;4,5,6;7,8,9]; >> disp(A)1 2 34 5 67 8 9M文件:a=input('a=?');b=input('b=?');c=input('c=?');d=b*b-4*a*c;x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];disp(['x1=',num2str(x(1)),' x2=',num2str(x(2))])>> solutiona=?2b=?3c=?4x1=-0.75+1.199i x2=-0.75-1.199i>> solutiona=?1b=?3c=?6x1=-1.5+1.9365i x2=-1.5-1.9365i>> x=input('请输入x的值:'); %检测输入值是否为-1、0、1请输入x的值:4>> if x==-1disp('negative one');elseif x==0disp('zero');elseif x==1disp('positive one');elsedisp('other value');endother value>> P=input('输入商品的价格:');输入商品的价格:300>> switch floor(P/100)case{0,1}rate=0;case{2:4}rate=4/100;case num2cell(5:9)rate=6/100;case num2cell(10:29)rate=8/100;case num2cell(30:49)rate=10/100;otherwiserate=15/100;end>> P=P*(1-rate)P = 255>> P=input('输入商品的价格:');输入商品的价格:500>> P=P*(1-rate)P = 425>> y=0;N=1000; %y=1+2+…+n >> for n=1:N;y=y+n;end>> yy = 500500>> A=rand(4,5); >> for i=Asum=mean(i)endsum =0.5685 sum = 0.5321 sum = 0.6684 sum =0.5605 sum =0.7891>> S=0; >> A=[65,76,56,78;98,69,87,69;89,90,87,85;80,90,70,89;69,79,94,84]; >> for K=AS=S+K;end>> disp(S')275 323 351 329 326>> y=0;n=1;>> while n<=100 >> yy=y+1/n/n; y =n=n+1; 1.6350end>> p=1;k=1; %求出一个值n,使其n!最大但小于10e60>> while p<1e60p=p*k;k=k+1;end>> k=k-1;r=p./k;k=k-1;>> disp(['The',num2str(k),'!is',num2str(r)])The47!is258623241511168180000000000000000000000000000000000000000000>> w=rand(1,10); % 从大到小排序>> x=fix(100*w); >> disp(x);5 35 81 0 13 20 19 60 27 19>> n=length(x); >> for j=1:n-1for i=n:-1:j+1if x(i)>x(i-1)y=x(i); x(i)=x(i-1);x(i-1)=y;endendend>> disp(x)81 60 35 27 20 19 19 13 5 0%互换变量x,y的值clear;x=15:-1:1;y=[1,2,3,4;5,6,7,8];z=x;x=y;y=z;xyx =1 2 3 45 6 7 8y =15 14 13 12 11 10 9 8 7 6 5 4 3 2 1%将不同变量的值互换function[x,y]=fexch(x,y) %M文件z=x;x=y;y=z;>> clear; >> x=15:-1:1; >> y=[1,2,3,4;5,6,7,8]; >> [a,b]=fexch(x,y)a = 1 2 3 45 6 7 8b = 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 function[rho,theta]=tran(x,y) %M文件%TRAN 将直角坐标转换成极坐标%x,y 直角坐标%rho,theta 极坐标rho=sqrt(x*x+y*y); theta=atan(y/x); >> [w,z]=tran(3,4) w = 5z = 0.9273。
matlab编写M文件(函数)
matlab编写M文件(函数)matlab的命令编辑窗口(Command Window)界面主要是用来调用系统命令、调用自定义函数(m文件里定义的函数)或编写一些较小的代码。
在遇到需要用到比较多的代码才能摆平的需求时,在命令编辑窗口每一行都有提示输入符号,用起来不是很方便(如前所述而且命令编辑窗口主要是用来调用命令之用),此时我们不得不求助于matlab的m文件来编写代码。
所以,记录一下经自行探索其编写方式后的入门过程:版本:MATLAB 7.9.0(R2009b)1.新建m文件打开matlab软件-->file-->new-->Function m-file经过此步骤之后,matlab会弹出一个新的编辑窗口,并生成少许代码如下:[plain]view plaincopyprint?1.function [ output_args ] = Untitled( input_args )2.%UNTITLED Summary of this function goes here3.% Detailed explanation goes here4.5.6.7.8.end这些代码是一个m-函数的模板。
function:表示编写的是一个函数。
output_args: 表示编写此函数的返回值(不同于C语言的是需要被返回的值无需使用return语句,只要将outp_args相应的参数拿到代码中赋值即可,同一般变量的使用),各返回值间用逗号隔开。
input_args: 此函数的输入参数,各参数之间用逗号隔开。
Untitled: 这是您所编写函数时所定义的函数名。
注意:函数名和m文件名需要保持一致。
如刚所创建的m文件在工作空间时命名为“RungeKuttaCalculate.m”则相应的函数名也需要为“RungeKuttaCalculate”,否则会引起报错。
%: 是matlab的注释语句的注释符,相当于C语言中的行注释符"//",在这里你可以描述此函数的功能,参数含义和返回值含义,使其含义更加明确。
MATLAB实验报告-M文件的编写
MATLAB实验报告-M文件的编写实验名称:M 文件的编写实验目的:1、学习MATLAB 中的关系运算和逻辑运算,掌握它们的表达形式和用法。
2、掌握MA TLAB 中的选择结构和循环结构。
3、学会用MA TLAB 进行M 文件的编写和调用。
实验步骤:1、创建一个矩阵,用函数all 和any 作用于该矩阵,比较结果。
创建一个矩阵a=[1,2,0,3;2,0,1,4];b=all(a),c=any(a),d=all(b),c=(b)比较结果b=1 0 0 1c=1 1 1 1d=0e=12、编写一个switch 语句,判断输入数的奇偶性。
n=input(‘n=’);switch mod(n,2);case 1A=‘奇’,case 0A=‘偶’,otherwiseA=‘空’,end3、编写一个程序画出下列分段函数所表示的曲面,并用M 文件存储。
121225.175.375.05457.0x x x e--- x 1+x 2>1 ?(x 1,x 2)=212267575.0x x e-- -1<="" 2≦1="" p="">21225.175.375.05457.0x x x e +-- x 1+x 2≦-1 步骤1:打开MATLAB 的M 文件编辑器file/new/M-file ,编写以下内容: %first.m This is my first examplea=2;b=2;clf;x=-a:0.2:a;y=-b:0.2:b;for i=1:length(y)for j=1:length(x)if x(j)+y(i)>1z(i,j)=0.5457*exp(-0.75*y(i)^2-3.75*x(j)^2-1.5*x(j)); else if x(j)+y(i)<=-1z(i,j)=0.5457*exp(-0.75*y(i)^2-3.75*x(j)^2+1.5*x(j)); else z(i,j)=0.7575*exp(-y(i)^2-6*x(j)^2);endendendendaxis([-a,a,-b,b,min(min(z)),max(max(z))]);colormap(flipud(winter));surf(x,y,z);步骤2:选择file/save命令,将文件保存,命名为first.m。
MatlabM文件编程
% 子函数
局部变量和全局变量
局部变量:在M函数内部声明并使用的变量 只在本函数范围内有效 仅能在函数调用执行期间被使用,一旦函数结束运行,则 变量占用的内存空间自动释放,变量的数值也不存在了
运行局部变量的例子 >> local 函数中的变量 Name Size Bytes Class u 1x3 256 cell array x 2x2 32 double array y 2x2 32 double array z 1x6 12 char array Grand total is 31 elements using 332 bytes >> whos >>
输入输出参数(续)
运行例4-15 >> A=[1 2 3;4 5 6] A = 1 2 3 4 5 6 >> [a,s,r]=ourstats(A) a = 2.5000 3.5000 4.5000 s = r = >> a=ourstats(A,0.1) a = 2.5000 3.5000
4.5000
函数文件供主程序文件调用,必须指定函数名和
输入输出参数,并由主程序文件中语句序列给出 一系列操作,从而生成所需数据 函数文件格式一般包括以下部分: (1)函数定义行:表明该m文件包含一个函数, 且为其定义函数名、输入参数和输出参数 function y=mean(x) (2)帮助信息:处在文件中的第二行,应该反 映该m文件概括性信息 %求平均值
保留变量实例
function y=persistent_example(x) % PERSISTENT_EXAMPLE 保留变量使用示例 for i=1:x y=myfun; end function y=myfun % 子函数 % persistent关键字的使用 persistent count; % count记录函数调用的次数 if (isempty(count)) count=1; else count=count+1; end str=sprintf('第%d次调用该函数',count); disp(str); y=count;
matlab编写m文件
forn=1:100;
x(n+1)=(x(n)+a/x(n))/2;
ifabs(x(n+1)-x(n))<1e-5
y= x(n+1);
end
end
y
结果:
请输入一个数:49
y =
7
用matlab编写m文件学会编写文件练习循环语句forwhile和条件语句ifelseendswitchcaseend一实验目的二实验内容及要求建立一个命令m文件
用matlab编写mr、while和条件语句if-else-end、switch-case-end
一、实验目的
三、实验结果和程序
1.程序:
clc
fors=100:999;
a=fix(s/100);
b=fix(s/10-10*a);
c=s-100*a-10*b;
ifs==a.^3+b.^3+c.^3
disp(s)
end
end
结果:
153
370
371
407
2.程序:
clear
clc
a=input('ÇëÊäÈëÒ»¸öÊý£º');
二、实验内容及要求
1.建立一个命令M-文件:求所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。例如,153是一个水仙花数,因为153=13+53+33。
2.编写函数M-文件SQRT.m:用迭代法求 的值。求平方根的迭代公式为:
迭代的终止条件为前后两次求出的x的差的绝对值小于10-5。
matlab m文件基本编程与常规pid实验心得
一、概述Matlab是一种强大的科学计算和工程仿真软件,被广泛应用于各个领域的数学建模、数据分析和算法设计中。
在Matlab中,M文件是一种包含Matlab代码的文本文件,通常用于编写自定义函数和脚本。
编写M文件是Matlab编程的基本技能之一,在工程领域中使用Matlab进行PID控制器的设计和调试也是十分常见的。
本文将主要介绍Matlab M文件的基本编程方法以及在常规PID调试实验中的心得体会。
二、Matlab M文件基本编程1. 新建M文件在Matlab中,可以通过点击“文件”菜单下的“新建”来创建一个新的M文件。
也可以直接在当前路径下右键点击“新建”来创建一个M文件。
创建成功后,会弹出一个编辑器窗口,里面可以编写Matlab 代码。
2. 编写Matlab代码在M文件的编辑器窗口中,可以编写Matlab代码。
Matlab的代码编写格式与其他编程语言类似,但是语法和函数库是独特的。
在编写代码时,需要注意语法的正确性和代码的规范性,以便提高代码的可读性和可维护性。
3. 保存和运行M文件在编写完Matlab代码后,可以点击编辑器窗口上方的“保存”按钮来保存M文件。
保存之后,可以点击编辑器窗口上方的“运行”按钮来执行M文件中的代码。
执行完毕后,可以在Matlab命令窗口中查看代码的运行结果。
4. 调试和优化在编写和运行M文件的过程中,可能会出现各种错误和异常情况。
这时需要使用Matlab提供的调试工具来查找和修复问题。
还可以通过优化算法和技巧来改进代码的性能和效率,提高代码的质量。
三、常规PID实验心得1. PID控制器设计在工程领域中,PID控制器是一种常见的控制器类型,用于实现系统的稳定和响应。
在设计PID控制器时,需要考虑系统的动态特性和性能要求,通过调整PID参数来优化控制效果。
2. PID控制器调试在实际应用中,PID控制器的调试是一项重要的工作。
通过对系统进行参数调整和控制仿真,可以验证PID控制器的性能和稳定性,找到最优的控制参数组合。
MATLAB的M文件编写及简单电力系统的仿真
MATLAB大型作业1、编写matlab函数命令M文件,完成下列功能:(1)函数输入参数为正整数n,要求3<n<10,如果输入的参数不符合3<n<10,则给出提示;(2)生成n阶矩阵A;(3)生成n阶矩阵B,B的每个元素是对应位置上A矩阵元素的自然对数;(4)求矩阵B的所有对角线元素之和m;(5)返回值为矩阵B和m;(6)要求:进行上机编程,调试完成后将程序书写在大作业报告中、并加以注释,将调试结果抓图打印粘贴在大作业报告中。
解:1、M文件的编写:2、调试结果:2、一个50Hz的简单电力系统如下图所示,试在Simulink中建立仿真模型研究该系统性能。
k1系统建模要求如下:(1)发电机G采用“Synchronous Machine pu Fundamental”模型,变压器T采用“Three-Phase Transformer (Two Windings)”模型,输电线路L采用“Three-Phase Series RLC Branch”模型,负荷LD1、LD2采用“Three-Phase Parelell RLC Load”模型。
(2)发电机模型参数:采用预设模型,其中学号末位数字为1的同学使用编号为01的模型参数,学号末位数字为2的同学使用编号为02的模型参数,……,学号末位数字为0的同学使用编号为10的模型参数。
(3)变压器模型采用默认参数,副边电压10kV,但需要注意与发电机模型相匹配参数的设置(原边电压、频率等),变压器容量设置为发电机额定功率的1.2倍;(4)线路参数的设置原则:忽略电容,X/R=3,线路通过发电机额定功率时首末端压降约为0.05p.u.;(5)负荷模型采用默认参数,但需要注意与整个系统模型相匹配参数的设置(电压、频率等),负荷LD1容量设置为发电机额定功率的5%,LD2容量为发电机额定功率的30%,功率因数0.95。
(6)其他模块(如短路模拟、测量、示波、powergui等)的使用根据研究要求自行确定。
Matlab中M-文件介绍
02
03
运行M-文件
查看运行结果
在Matlab命令窗口中输入文件名, 然后按Enter键,即可打开指定 的M-文件。
在打开的M-文件中,按下F5键 或选择"Run"菜单中的"Run"选项, 即可运行当前M-文件。
M-文件的运行结果将在Matlab 命令窗口中显示。
调试M-文件
设置断点
在需要调试的代码行左侧单击,即可 在该行设置断点。
调试技巧
使用Matlab调试器
Matlab提供了一个功能强大的调试器,可以帮 助用户更好地理解代码的执行过程。
逐步执行代码
逐步执行代码可以帮助用户更好地理解代码的 逻辑和执行过程。
检查变量值
在调试过程中,检查变量的值可以帮助用户更好地理解代码的逻辑和执行过程。
5
M-文件的高级应用
函数封装
函数封装
开始调试
在设置断点的代码行上按下F10键或 选择"Debug"菜单中的"Step Over" 选项,即可开始调试。
单步执行
在调试过程中,按下F10键或选择 "Debug"菜单中的"Step Over"选项, 可以逐行执行代码。
观察变量值
在调试过程中,可以随时查看变量的 值,以便更好地理解代码的执行过程。
信号处理和图像处理
Matlab具有强大的信号处理和 图像处理工具箱,广泛应用于 通信、雷达和医学成像等领域
。
02
M-文件基础
M-文件的定义
总结词
M-文件是Matlab中用于编写和存储Matlab代码的文件。
详细描述
M-文件是Matlab中用于编写和存储Matlab代码的文件,通常以.m为扩展名。 它可以是脚本文件或函数文件,用于执行一系列Matlab命令或定义可重复使用 的函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
M文件及程序调试
本章详细讲解利用M语言进行编程的方法讲述的主要内容:
主程序文件
函数文件
M文件的调试
MATLAB的工作模式
(1)指令驱动模式
即在MATLABM命令行窗口下用户输入单行指令
时,MATLAB立即处理这条指令,并显示结果,
这就是MATLAB命令行方式。
缺点:命令行方式程序可读性差,而且不能存
储,当处理复杂问题和大量数据时很不方便。
(2)M文件模式
将MATLAB语句构成的程序存储成以m为扩展名的
文件,然后再执行该程序文件,这种工作模式
称为程序文件模式。
M语言文件可以分为主程序文件和函数文件
一个M语言文件就是由若干MATLAB的命令组合在一起构成的。
M语言文件是标准的纯文本格式的文件,其文件扩展名为.m。
MATLAB提供了meditor编辑器编辑M文件
注意:
(1)不可用汉字命名(若用汉字命名虽然可以打开M文件,但是编译运行时会出错);
(2)文件名不可与MATLAB内置函数重名;
(3)文件名不可以以数字命名。
主程序文件(脚本文件)
相当于C语言的主函数
主程序文件没有输入参数和输出参数。
执行主程序文件时,文件中的指令或者命令按照出现在脚本文件中的顺序依次执行。
主程序文件主要由注释行和代码行组成: M文件的注释行需要使用%,定义符注释定义符仅能影响一行代码
程序执行的结果将显示于命令窗中
函数文件(相当于C语言的子函数)
函数文件供主程序文件调用,必须指定函数名和输入输出参数,并由主程序文件中语句序列给出一系列操作,从而生成所需数据
函数文件格式一般包括以下部分:
(1)函数定义行:表明该m文件包含一个函数,且为其定义函数名、输入参数和输出参数
function y=mean(x)
(2)帮助信息:处在文件中的第二行,应该反
映该m文件概括性信息
%求平均值
function y=mean(x )
%求平均值
(3)函数体:函数所用计算过程和输入输出参数赋值的MATLAB 代码;
这里可以为调用函数、流程控制、交互式输入输出、计算、赋值等。
[m,n ]=size(x );
if m==1
y=sum(x)/n ;
else
y=sum(x)/m ; %把每一列做平均值运算
end 函数文件例1:求均值
主程序文件调用y=mean(x)的方法
clear;
A=[1,2;3,4]
B=mean(A)
help mean 则在命令窗显示mean函数注释的帮助信息
函数文件例2:比较两个数大小function nummax(a,b)
if(a<=0|b<=0)
disp('input error');
elseif a>b
fprintf('the large number is %f',a);
elseif a<b
fprintf('the large number is %f',b);
else
fprintf('%f=%f',a,b);
end
function[avg,stdev,r ]=ourstats(x )
% ourstats 多输入输出参数示例
% 该函数计算处理矩阵,得到相应的均值、标准差和矩阵的秩
[m,n]=size(x);
if m==1
m=n;
end
% Average
avg =sum(x)/m;
% Sandad deviation
stdev =sqrt(sum(x.^2)/m -avg.^2);
% Rank
r=rank(x );
函数文件例3:多个输出参数
运行>> A=[1 2 3;4 5 6]A = 1 2 34 5 6>> [a,s,r]=ourstats(A )a = 2.5000 3.5000 4.5000s =
1.5000 1.5000 1.5000r =2>> [a,s]=ourstats(A )a =
2.5000
3.5000
4.5000s = 1.5000 1.5000 1.5000输入输出参数(续)>> a=ourstats(A)a = 2.5000 3.5000 4.5000调用该函数时,将输出参数依次写在一个向量中,若输出参数的个数与函数定义的输出参数个数不一致时,将计算得到的前几个输出参数作为返回值,若输出参数的个数等于指定的输出参数个数时,计算结果依次赋值给不同的变量。
子函数应用例1
function[avg,med ]=newstats(u ) % 主函数% NEWSTATS 计算均值和中间值n=length(u);
avg =mean(u,n); % 调用子函数med=median(u,n); % 调用子函数function a=mean(v,n) % 子函数% 计算平均值a=sum(v)/n;
function m=median(v,n) % 子函数% 计算中间值
w=sort(v ); %从小到大排序if rem(n,2)==1
m=w((n+1)/2);else
m=(w(n/2)+w(n/2+1))/2;end
在函数文件中可以包含多个函数,其中第一个函数称为主函数,其函数名与文件名相同,在M 函数文件中的其他函数称为子函数,它只能由这一函数文件中的主函数或其他子函数引用
子函数:相当于C 语言中函数的递归调用
局部变量和全局变量
使用global关键字创建全局变量时有三种情况(1)若声明为全局的变量在当前空间和全局空间都不存在,则创建一个新的变量,然后为这个变量
赋值为空数组,该变量同时存在于局部工作空间
和全局工作空间
(2)若声明为全局的变量已经存在与全局空间中,则不会在全局工作空间创建新的变量,其数值同
时赋值给局部工作空间中的变量
(3)若声明为全局的变量存在于局部工作空间中,而全局工作空间不存在,则系统会提示一个警告
信息,同时将局部的变量“挪”到全局工作空间中
全局变量和局部变量实例
函数文件:function y=add3(x) global c d;
%切记:声明两个或两个以上全局变量时,变量之间用空格隔开,不可用逗号隔开
y=x+3;
c=x;
d=y;主程序文件:clear;
global c d;
c=0;
d=0;
a=5;
b=add3(a);
c=c+1
d=d+1
保留变量
这类变量在MATLAB中被声明为persistent
这类变量在函数退出时不被释放,当函数再一次被调用时,变量保留上次退出时的值
保留变量的特征
(1)变量仅能在声明变量的函数内使用,其他函数不能直接使用保留变量
(2)函数执行退出后,MATLAB不清除保留变量占用的内存
(3)当函数被清除或者重新编辑后,保留的变量被清除
function y=persistent_example(x )
% PERSISTENT_EXAMPLE 保留变量使用示例for i=1:x
y=myfun ;end
function y=myfun % 子函数
% persistent 关键字的使用persistent count;
% count 记录函数调用的次数if (isempty(count ))
count=1;else
count=count+1;end
str =sprintf ('第%d 次调用该函数',count);disp(str );y=count;
保留变量实例
>> persistent_example(1)第1次调用该函数ans =
1
>> persistent_example(3)第2次调用该函数第3次调用该函数第4次调用该函数ans =
4
保留变量
在MATLAB命令行中键入指令:>> clear all
则所有的变量都会被清除>> persistent_example(3)第1次调用该函数第2次调用该函数第3次调用该函数ans =
3
M文件调试
M文件的调试
可以在文件编辑器中进行
M语言的文件编辑器不仅仅是一个文件编辑器,还是
一个可视化的调试开发环境
可以在命令行中结合具体的命令进行
M文件调试
应用程序的错误
语法错误
包括词法或者文法的错误
运行时的错误
指程序运行过程中得到的结果不是用户需要的结果
程序的调试是在程序无法得到正确结果时进行程序修正的唯一手段
M文件是一种解释型语言,只有在运行过程中才能发现应用程序的错误
M文件调试
M语言文件编辑器提供Breakpoints菜单进行程序调试
M文件调试
Breakpoints菜单中的命令用来设置各种断点,只有设置了断点的应用程序才能进行调试
提供的自动断点
Stop if Error
Stop if Warning
Stop if NaN or Inf
Stop if All Errors
自动断点可以在程序中设置,当程序运行过程中发生了错误或警告,则程序运行中断,进入调试状态。