数学建模之MATLAB入门教程(上)

news2024/10/5 2:59:36

前言:

• MATLAB是美国Math  Works公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。
• MATLAB将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案。

• MATLAB作为线性系统的一种分析和仿真工具,是理工科大学生应该掌握的技术工具,它作为一种编程语言和可视化工具,可解决工程、科学计算和数学学科中许多问题.
• MATLAB建立在向量、数组和矩阵的基础上,使用方便,人机界面直观,输出结果可视化.
• 矩阵是MATLAB的核心(Matrix Laboratory)

 一、变量与函数

1、变量

MATLAB的命名规则:

(1)变量名必须是不含空格的单个词;
(2)变量名区分大小写;
(3)变量名最多不超过63个字符(6.5之前19个)
(4)变量名必须以字母打头,之后可以是任意字母、数字或下划线,变量名中不允许使用标点符号。

特殊变量取值
ans用于计算结果缺少变量名
pi圆周率
eps计算机的最小数,和1相加时产生一个比1大的数
flops浮点运算数
inf无穷大,比如1/0
NaN不定量,比如0/0
i,j虚数单位
nargin所用函数的输入变量数目
nargout所用函数的输出变量数目
realmin最小可用正实数
realmax最大可用正实数

注意:尽量避免给系统预定义的变量重新赋值! 

变量的查询:

•        显示工作空间中的所有变量    ----who

•        查看工作空间中变量的详细属性   ---whos

 2、数学运算符号及标点符号

+加法运算,适用于两个数或两个同阶矩阵相加
-减法运算
*乘法运算
.*点乘运算
/除法运算
./点除运算
^乘幂运算
.^点乘幂运算
\反斜杠表示左除

(1)MATLAB的每条命令后,若为逗号或无标点符号,则显示命令结果;若命令后为分号,则不显示结果。

(2)“%”后面的文字为注释。

(3)“...”表示续行。

3、数学函数 

函数名称函数名称
sin(x)正弦函数asin(x)反正弦函数
cos(x)余弦函数acos(x)反余弦函数
tan(x)正切函数atan(x)反正切函数
abs(x)绝对值max(x)最大值
min(x)最小值sum(x)元素的总和
sqrt(x)开平方exp(x)以e为底的指数
log(x)自然对数$log_{10}(x)$以10为底的对数
sign(x)符号函数fix(x)取整

4、M文件 

 MATLAB的内部函数是有限的,有时为了研究某个函数的各种形态,需要为MATLAB定义新函数,为此必须编写函数文件。函数文件的后缀名为M的文件,这类文件的第一行必须是以特殊字符function开始,格式为:

function  因变量名=函数名(自变量名)

函数值的获得必须通过具体的运算实现,并赋给因变量。 

M文件建立方法:1.在MATLAB中,点:File->New->M-file

                            2.在编辑窗口输入程序内容

                            3.点File->Save,存盘,M文件必须与函数名一致 

function f=fun(x)
f=100*(x(2)-x(1)^2)^2+(1-x(1))^2

 

二、数组

1、创建简单的数组

x=[a b c d e f]创建包含指定元素的行向量.

x=first:last

创建从first开始,加1计数,到last结束的行向量。

x=first:increment:last

创建从first开始,到increment计数,到last结束的行向量

x=linspace(first,last,n)

创建从first开始,到last结束,有n个元素的行向量

x=logspace(first,last,n)

创建从first开始,到last结束,有n个元素的对数分割行向量

2、数组元素的访问

(1)访问一个元素:x(i)表示访问数组x的第i个元素。

(2)访问一块元素:x(a:b:c)表示访问数组x的第a个元素开始,以步长b到第c个元素(但不超过c),b可以为负数,b缺省时为1.

(3)直接使用元素编址序号。x([a  b  c  d])表示提取数组x的第a、b、c、d个元素构成一个新的数组[x(a)  x(b)  x(c) x(d)].

3、数组的方向

前面的例子中的数组都是一行数列,时行向量分布的。称之为行向量。数组也可使列向量,它的数组操作和运算与行向量是一样的,唯一的区别是结果以列的形式显示。产生方法:

直接产生        例如        c=[1; 2; 3; 4]

转置产生        例如        b=[1  2  3  4];c=b'

说明:以空格或逗号分隔的元素指定的是不同列的元素,而以分号分隔的元素指定了不同行的元素。 

4、数组的运算 

(1)标量-数组运算

数组对标量的加、减、乘、除和平方运算,是指数组的每个元素对该标量施加相应的加、减、乘、除、平方运算。设:a=[$a_1$,$a_2$,...,$a_n$]

则:a+c=[ $a_1$+c,$a_2$+c,...,$a_n$+c]

       a.*c=[$a_1$*c,$a_2$*c,...,$a_n$*c]

       a.\c=[c/$a_1$,c/$a_2$,...,c/$a_n$](左除)

       a.^c=[$a_1$^c,$a_2$^c,...,$a_n$^c]

(2)数组-数组运算

当两个数组有相同为维数时,加、减、乘、除、幂运算可按元素对元素方式进行,不同大小或位数的数组是不能进行和运算的。

三、矩阵

1、矩阵的建立

矩阵用方括号“[ ]”括起来。逗号或空格用于分隔某一行的元素,分号用于区分不同的行。除了分号,在输入矩阵时,按Enter键也表示开始新一行。输入矩阵时,严格要求所有行有相同的列

例如:m=[1 2 3 4; 5 6 7 8; 9 10 11 12]

特殊矩阵的建立:

c=ones(m,n)        产生一个m行n列的元素全为1的矩阵

b=zeros(m,n)        产生一个m行n列的零矩阵

a=[  ]        产生一个空矩阵,当对一项操作无结果时,返回空矩阵,空矩阵的大小为零

d=eye(m,n)        产生一个m行n列的单位矩阵

2、矩阵中元素的操作 

(1)矩阵的第r行:A(r,:)

(2)矩阵的第r列:A(:,r)

(3)依次提取矩阵A的每一列,将A拉伸为一个列向量:A(:)

(4)取矩阵A的第i1~i2行、第j1~j2列构成新矩阵:A(i1:i2,j1:j2)

(5)以逆序提取矩阵A的第i1~i2行,构成新矩阵:A(i2:-1:i1,:) 

(6)删除A的第i1~i2行,构成新矩阵:A(i1:i2,:)=[  ] 

(7)将矩阵A和B拼接成新矩阵:[A  B]; [A;  B] 

3、矩阵的运算 

(1)标量-矩阵运算

标量-数组运算相同

(2)矩阵-矩阵运算

[1]元素对元素的运算,同数组-数组运算

[2]矩阵运算

方阵的行列式:det(A)

方阵的逆:inv(A)

方阵的特征值与特征向量:[V, D]=eig[A]

a=[1 2 3;4 5 6];
b=[1 2;1 2;1 2];
c1=a+a
c2=a*b
c=[2 7 3;3 9 4;1 5 3];
c3=det(c)
c4=inv(c)
[v,d]=eig(c)

符号计算之求极限

syms x
y1=(1+4*x)^(1/x);
y2=(exp(x)-1)/x;
limit(y1,x,0)
limit(y2,x,0)

求导数与偏导数

比如:3x^3+5x+1

syms x
f=2*x^3+5*x+1
diff(f,1)

求定积分与多重积分,比如:

syms x y
int(int(x^2+y^2+1,y,x,x+1),x,0,1)

常微分方程初值问题的数值解法

1、龙格-库塔法简介

2、龙格-库塔法的实现

基于龙格-库塔法,MATLAB提供了求常微分方程数值解的函数,一般调用格式为:

[t,y]=ode23('fname',tspan,y0)

[t,y]=ode45('fname',tspan,y0)

其中fname是定义f(t,y)的函数文件名,该函数文件必须返回一个列向量。tspan形式为[t0,tf],表示求解区间。y0是初始状态列向量。t和y分别给出时间向量和相应的状态向量。 

function yp=fun(t,y)
yp=(y^2-t-2)/4/(t+1);
t0=0;tf=10;
y0=2;
[t,y]=ode23('fun',[t0,tf],y0);
y1=sqrt(t+1)+1;
t'
y'
y1'

控制流

MATLAB提供三种决策或控制流决策:for循环、while循环、if-else-end结果

这些结构包含大量的MATLAB命令,故经常出现在MATLAB程序中,而不是直接加在MATLAB提示符下。

for循环:允许一组命令以固定的和预定次数重复

for        x=array

        {commands}

end 

在for和end语句之间的命令串{commands}按数组(array)中的每一列执行一次。在每一次迭代中,x被指定为数组的下一列,即在第n次循环中,x=array(:,n)

for n=1:10
    x(n)=sin(n*pi/10);
end
x

 while循环:与for循环以固定次数求一组命令相反,while循环以不定的次数求一组语句的值

 while        (expression)

                        {commands}

                end

例        设银行年利率为11.25%。将10000元存入银行,问多长时间会连本带利的翻一翻?

money=10000
years=0
while money<20000
    years=years+1
    money=money*(1+11.25/100)
end

 if-else-end结构:

if        (expression)

                        {commands}

                end

四、MATLAB作图 

 1、曲线图

 MATLAB作图是通过描点、连线来实现的,故在画一个曲线图形之前,必须先取得该图形上的一系列的点的坐标(即横坐标与纵坐标),然后将该点集的坐标传给MATLAB函数画图。

命令为:

plot(X,Y,S)

X,Y是向量,分别表示该点集的横坐标和纵坐标

.y        黄色        .        点        -        连线

.m        洋红        o        圈        :        短虚线

.c        蓝绿色        x  x-符号

-.        长短线        r        红色

+        加号        --        长虚线

plot(X,Y)——画实线

例如        在[0,2pi]用红线画sinx,绿圈画cosx

 2、符号函数(显函数、隐函数和参数方程)画图

(1)ezplot(‘f(x)’,[a,b])表示在a<x<b绘制显函数f=f(x)的函数图

ezplot('f(x,y)',[xmin,xmax,ymin,ymax])表示在区间xmin<x<xmax和ymin<y<ymax绘制隐函数f(x,y)=0的函数图

ezplot('x(t)','y(t)',[tmin,tmax])表示在区间tmin<t<tmax绘制参数方程x=x(t),y=y(t)的函数图

例        在[0,2pi]上画x=cos^3t,y=sin^3t星形图

 例        在[-2,0.5],[0,2]上画隐函数e^x+sin(xy)=0的图

 (2)fplot('fun',lims),fplot(@(x)fun,lims)

表示绘制字符串fun指定的函数在lims[xmin,xmax]的图形

注意:

[1]        fun必须是M文件的函数名或独立变量为x的字符串。

[2]        fplot函数不能换参数方程和音函数图形,但在一个图上可以花多个图形。

2、空间曲线

plot3(x,y,z,s) 

例        在区间[0,10pi]画出参数曲线 x=sint,y=cost,z=t

 3、空间曲面

(1)surf(x,y,z)画出数据点(x,y,z)表示的曲面

例        画出z=(x+y)^2的图形

4、处理图形 

例        在区间[0,2*pi]画出sin(x)的图形,并家住图例“自变量X”“函数Y”、“示意图”,并加格栅 

gtext('string')

例        在区间[0,2*pi]画sin(x),并标注"sinx","cos(x)"

 图形保持

(1)hold on        保持当前图形,一边继续画图到当前图上

         hold off       释放当前图形窗口

例        将y=sin(x),y=cos(x)分别用电荷线画在同一个屏幕上

(2)割窗口 

例        将屏幕分为四块,并画出y=sin(x),z=cos(x),a=sin(x)*cos(x),b=sin(x)/cos(x) 

 由于内容过多,剩下的我们后面再赘述!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1792744.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入分析 Android BroadcastReceiver (一)

文章目录 深入分析 Android BroadcastReceiver (一)1. Android BroadcastReceiver 设计说明1.1 BroadcastReceiver 的主要用途 2. BroadcastReceiver 的工作机制2.1 注册 BroadcastReceiver2.1.1 静态注册2.1.2 动态注册 3. BroadcastReceiver 的生命周期4. 实现和使用 Broadca…

【面试笔记】嵌入式软件工程师,汽车电子软件相关

文章目录 1. C语言基础1.1 const1.2 static1.3 回调函数的用法1.4 宏定义1.5 编译、链接过程1.6 堆与栈的区别&#xff1f;1.7 简单的字符串算法题&#xff0c;C语言实现1.7.1 给定一个字符串&#xff0c;按顺序筛选出不重复的字符组成字符串&#xff0c;输出该字符串1.7.2 给定…

三相五柱变压器饱和Simulink仿真

此示例说明了三相五柱变压器的饱和情况&#xff0c;并将专用电力系统模型与基于 Simscape 的物理模型进行了比较。 顶部电路使用 SimPowerSytems 模块来实现连接到 315 kV 电网的 300 MVA、315 kV/120 kV/25 kV、Yg/Yg/D 变压器。在不平衡电压条件下&#xff0c;与三柱变压器相…

opencv进阶 ——(十一)基于RMBG实现生活照生成寸照

实现步骤 1、检测人脸&#xff0c;可以使用opencv自带的级联分类器或者dlib实现人脸检测 2、放大人脸范围&#xff0c;调整到正常寸照尺寸 3、基于RMGB算法得到人像掩码 4、生成尺寸相同的纯色背景与当前人像进行ALPHA融合即可 alpha融合实现 void alphaBlend(cv::Mat&…

Python SMTP配置示例中如何处理发送失败?

Python SMTP的加密方式怎么设置&#xff1f;如何设置SMTP服务器&#xff1f; 在Python中&#xff0c;SMTP常被用于发送电子邮件。然而&#xff0c;SMTP配置和使用过程中&#xff0c;难免会遇到发送失败的情况。Aok将探讨在Python SMTP配置示例中如何处理这些发送失败的情况&am…

Redis实战篇——搭建主从复制

Redis实战篇——搭建主从复制 1.Redis主从1.1.主从集群结构1.2.搭建主从集群1.2.1.启动多个Redis实例1.2.2.建立集群1.2.3.测试 1.Redis主从 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离…

探索 LLM 预训练的挑战,GPU 集群架构实战

万卡 GPU 集群实战&#xff1a;探索 LLM 预训练的挑战 一、背景 在过往的文章中&#xff0c;我们详细阐述了LLM预训练的数据集、清洗流程、索引格式&#xff0c;以及微调、推理和RAG技术&#xff0c;并介绍了GPU及万卡集群的构建。然而&#xff0c;LLM预训练的具体细节尚待进一…

安卓Zygote进程详解

目录 一、概述二、Zygote如何被启动的&#xff1f;2.1 init.zygote64_32.rc2.2 Zygote进程在什么时候会被重启2.3 Zygote 启动后做了什么2.4 Zygote启动相关主要函数 三、Zygote进程启动源码分析3.1 Nativate-C世界的Zygote启动要代码调用流程3.1.1 [app_main.cpp] main()3.1.2…

0605-JavaSE-单例模式-饿懒汉模式

​​​​​​​ 不能放在方法里面&#xff08;因为每个线程调用都会在方法里面实例化一个locker对象&#xff0c;但不属于同一个对象&#xff09;&#xff0c;然后要用static修饰成静态变量才会起到效果 //单例设计模式 //饿汉模式&#xff1a;在加载类的时候就已经开始创建 /…

Python3数据类型(新)详细介绍

文章目录 数据类型类型查看同时多个变量赋值标准数据类型1.数字(Number)2.字符串3.bool(布尔类型)4.元组元组的运算 运算运算* 运算元组的删除 5.列表(List)查找列表修改列表列表的切片列表是可以修改的列表的追加列表的插入列表的连接列表的删除列表的清空列表的复制 6.字典查…

创建常规DLL的动态链接库

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 【例9.3】创建一个MFC 常规DLL的动态链接库Areadll&#xff0c;在该动态链接库中添加一个导出类CArea&#xff0c;通过该类获取正方形和圆的面积。 (1) 使用“MFC动态链接…

水泵选型指南

在现代暖通空调&#xff08;HVAC&#xff09;系统中&#xff0c;冷冻水泵是关键组件之一&#xff0c;它在提供冷却和空调效果方面起着至关重要的作用。选择合适的冷冻水泵不仅可以提高系统效率&#xff0c;还能节省能源和维护成本。本文将介绍冷冻水泵选型的关键因素和步骤。 …

深度学习之非极大值抑制NMS介绍

1. 基本介绍 非极大值抑制&#xff08;Non-Maximum Suppression&#xff0c;NMS&#xff09;是深度学习中一种常用的目标检测算法&#xff0c;用于在检测结果中去除冗余的边界框。 在目标检测任务中&#xff0c;通常会使用候选框&#xff08;bounding boxes&#xff09;来表示可…

wincc7.5在现有Report中增加页面

已有报告&#xff0c;页面是3页&#xff0c;需要新加1页数据。 在布局文件中&#xff0c;看到有3个项&#xff0c;这个版本的Wincc就是这种布置&#xff1a; 需要在报告内容中加入新内容&#xff0c;分页依据内容上下间的缝隙&#xff08;gap &#xff09;。 这里插入嵌入la…

SwiftUI中Menu和ControlGroup的使用

本篇文章主要介绍一下Menu组件和ControlGroup组件的使用。Menu组件是在iOS 14&#xff08;tvOS 17&#xff09;推出的一个组件&#xff0c;点击后提供一个可选择的操作列表。ControlGroup组件是一个容器视图&#xff0c;以视觉上适当的方式为给定的上下文显示语义相关的控件&am…

【设计模式深度剖析】【3】【行为型】【职责链模式】| 以购物中心客户服务流程为例加深理解

&#x1f448;️上一篇:命令模式 设计模式-专栏&#x1f448;️ 文章目录 职责链模式定义英文原话直译如何理解呢&#xff1f; 职责链模式的角色1. Handler&#xff08;抽象处理者&#xff09;2. ConcreteHandler&#xff08;具体处理者&#xff09;3. Client&#xff08;客户…

Go微服务: 基于rocketmq:server和rocketmq:broker搭建RocketMQ环境,以及生产消息和延迟消费消息的实现

RocketMQ 的搭建 1 ) 配置 docker-compose.yaml 文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports:- 9876:9876volumes:- ./logs:/opt/logs- ./store:/opt/storenetworks:rmq:aliases:- rmqnamesrvrmqbroker:image: fo…

使用System-Verilog实现FPGA基于DE2-115开发板驱动HC_SR04超声波测距模块|集成蜂鸣器,led和vga提示功能

文章目录 前言一、SystemVerilog——下一代硬件设计语言1.1 语言基础2.2 面向对象编程1.3 接口&#xff08;Interfaces&#xff09;1.4 程序包&#xff08;Packages&#xff09;1.5 数据结构1.6 随机化&#xff08;Randomization&#xff09;1.7 并发性和时序控制1.8 功能增强1…

小程序丨最大填表限制如何开启?

老师在新建填表时&#xff0c;希望设置最大数量限制&#xff0c;若填表达到限制&#xff0c;后续的学生将不能继续提交填表。 通过开启【表格最大限制】功能即可实现&#xff0c;下面就来教大家如何制作吧。 &#x1f50e;如何开启表格最大限制功能&#xff1f; 按照常规流程…

Mac OS 用户开启 8080 端口

开启端口 sudo vim /etc/pf.conf # 开放对应端口 pass out proto tcp from any to any port 8080 # 刷新配置文件 sudo pfctl -f /etc/pf.conf sudo pfctl -e获取本机ip地址 ifconfig en0 | grep inet | grep -v inet6 | awk {print $2}访问指定端口