【数学建模】Matlab 编程

news2024/11/15 7:29:43

        MATLAB是美国MathWorks公司自20世纪80年代中期推出的数学软件,具有优秀的数值计算能力和卓越的数据可视化。由于Maltab编程方便,有大量内部函数和工具箱可以使用,作图也
十分方便,因此在数学实验和数学建模竞赛中,我们常使用Matlab作为我们的编程工具。

1. 常用函数介绍

(1) 三角函数
sin-----正弦           sinh-----双曲正弦        asin-----反正弦        asinh----反双曲正弦
cos-----余弦          cosh-----双曲余弦        acos-----反余弦        acosh----反双曲余弦
tan-----正切          tanh-----双曲正切        atan-----反正切        atanh----反双曲正切

(2) 指数函数与对数函数
exp-------指数        log--------e为底的对数         log10-----常用对数      sqrt-----平方根
与复数有关的函数
abs------模或绝对值      angle-----幅角          conj-----复共轭
imag----虚部          real------实部

(3) 含入函数及其它数值函数
fix-------向0舍入      floor----向负无穷舍入        ceil-------向正无穷舍入
round---四舍五入      rem(a,b)---计算a/b的余数

如fix(2.3)=2   floor(2.3)=2   ceil(2.3)=3   round(2.3)=2

如fix(-2.3)=-2   floor(-2.3)=-3   ceil(-2.3)=-2   round(-2.3)=-2
 

(4) 有关向量的函数

min(x): 向量x的元素的最小值               max(x): 向量x的元素的最大值
mean(x): 向量x的元素的平均值            median(x): 向量x的元素的中位数
std(x): 向量x的元素的标准差                 diff(x): 向量x的相邻元素的差
sort(x): 对向量x的元素进行排序            length(x): 向量x的元素个数
norm(x): 向量x的Euclidean长度            sum(x): 向量x的元素总和
prod(x): 向量x的元素连乘积                  cumsum(x): 向量x的累计元素总和
dot(x, y): 向量x和y的内积                      cross(x, y): 向量x和y的外积
cumprod(x): 向量x的累计元素总乘积

2. 矩阵常见计算

(1) 矩阵输入
最简单的方法是把矩阵的元素直接排列在方括号中。每行内的元素间用空格或逗号隔开,行与行之间用分号隔开。
如:

A = [1 4 7
       3 6 9
       6 7 4]

输入为

A=[1,4,7;3,6,9;6,7,4]
A=[1,4,7;
   3,6,9;          
   6,7,4]

输出结果为: 
1 4 7
3 6 9
6 7 4

(2) 矩阵的转置

矩阵的转置用符号'来表示。

如:

A=[1,4,7;3,6,9;6,7,4];
B=A'

也可直接转置:

B=[1,4,7;3,6,9;6,7,4]'

则显示为:

B=
1 3 6
4 6 7
7 9 4


(3) 矩阵的加减
矩阵的加减使用的是“+”“-”运算符。进行矩阵加减运算必须是同型矩阵
如:

A=[1,3,6;  
   4,5,7;
   7,8,9];
B=[3,5,7;  
   2,4,6;
   1,3,9];
C=A+B     

显示结果为:
C = 4 8 13
       6 9 13
       8 11 18

(4) 矩阵乘法

矩阵乘法用符号*表示。要求前一矩阵列数与后一矩阵行数相同。
如:

A=[1,4,7;  
   2,5,8];
B=[4,5,9;  
   1,7,8;
   3,2,1];
C=A*B     

结果为:
C = 29 47 48
       37 61 66

(5) 矩阵与数的乘法
如:

A=[1,5,8;
   2,6,9];
B=3*A

结果为:
B = 3 15 24
       6 18 27

(5) 矩阵的行列式

求方阵A行列式,用det(A)表示
如:

A=[1.3,6;
   2,5,8;
   3,9,11];
Z=det(A)

则结果为:

Z=7

(6) 矩阵求逆

非奇异矩阵A求逆用inv(A)表示。
如:

A=[1,3,6;
   2,5,8;
   3,9,11];
Z=inv(A)

结果为:
Z =-2.4286   3.0000   -0.8571
      0.2857  -1.0000   0.5714
      0.4286   0              -0.1429

如果验证,可计算C=A*Z

C= 1.0000    0             -0.0000

     -0.0000   1.0000     -0.0000

     0              0              1.0000

利用逆矩阵可以解方程组。

如:AX=b

A=[1,3,6;2,5,8;3,9,11];
b=[3,6,7]'
X=inv(A)*b

结果为:
X = 4.7143
    -1.1429
     0.2857

或用X=A\b也可求解。
 

X=A\b还可以求解齐次方程组。

下面进行函数拟合:如因变量y与自变量x之间存在关系: y = a + b * e^(-x)
观测数据对为:
x    0.0   0.3   0.8   1.1   1.6   2.3
y   0.82  0.72  0.63  0.60  0.55  0.50

由此可建立齐次方程组  AX = Y 其中 X=\binom{a}{b}

即:

\begin{pmatrix} 1 & e^{0} \\ 1 & e^{-0.3} \\ 1 & e^{-0.8} \\ 1 & e^{-1.1} \\ 1 & e^{-1.6} \\ 1 & e^{-2.3} \end{pmatrix} \begin{pmatrix} a \\ b \end{pmatrix} = \begin{pmatrix} 0.82 \\ 0.72 \\ 0.63 \\ 0.60 \\ 0.55 \\ 0.5 \end{pmatrix}

可建立Matlab的m文件

t=[0.0  0.3  0.8  1.1  1.6  2.3]'
Y=[0.82  0.72  0.63  0.60  0.55  0.5]'
A=[ones(size(t)),exp(-t)]
X=inv(A'*A)*A'*Y
%X=A\Y

可得结果为:
X = 0.4760  0.3413 即a=0.4760, b=0.3413

函数拟合为 y = 0.476 + 0.3413 * e^(-x)

Matlab的M文件如下

t=[0.0  0.3  0.8  1.1  1.6  2.3]'
Y=[0.82  0.72  0.63  0.60  0.55  0.5]'
A=[ones(size(t)),exp(-t)]
x=A\Y
n=500; %数据点数
tt=zeros(n,1);
yy=zeros(n,1);
dt=2.3/n;
for i=1:n
    tt(i)=i*dt;
    yy(i)=x(1)+x(2)*exp(-tt(i));
end
plot(t,y,'*b',tt,yy,'r')

(7) 矩阵特征值

如果A为方阵,满足AX = λX 的λ称为A的特征值,X称为A的特征向量。计算A的特征值用eig(A)表示。

A=[1,3,6;2,5,8;3,6,8];
Z=eig(A)

结果为:
Z = 15.2382
     -1.3365
      0.0982
 

3. 函数作图

(1) 二维平面曲线作图函数 plot(x,y,'s')
其中x和y是长度相同的向量,s表示线型和颜色。如果作多条曲线在同一图上,则用函数
plot(x1,y1,'s1',x2,y2,'s2',...,xn,yn,'sn')

如将 sin(x)和cos(x)同时作在一张图上,区间取[0,2π],程序如下:

x=0:0.1:2*pi;
y1=sin(x);
y2=cos(x);
plot(x,y1,'r',x,y2,'b');

(2) 多窗口作图

将屏幕分为几个窗口分别作图,subplot(m,n,k) 表示将窗口分为 m × n 个,当前图在第k个窗口完成。如在第一个窗口作 y=sin(x),第二个窗口作 y=cos(x),第三个窗口作 y=√x, 第四个窗口作 y=ln(x)。程序如下:

x1=0:0.1:2*pi; y1=sin(x1);
x2=-pi:0.1:pi; y2=cos(x2);
x3=0:0.1:10; y3=sqrt(x3);
x4=2:0.1:10; y4=log(x4);

subplot(2,2,1); plot(x1,y1); title('y=sin(x)'); grid on
subplot(2,2,2); plot(x2,y2); title('y=cos(x)'); grid on
subplot(2,2,3); plot(x3,y3); title('y=sqrt(x)');grid on
subplot(2,2,4); plot(x4,y4); title('y=ln(x)'); grid on

(3) 直方图作图 hist

二维直方图,可以显示出数据的分布。

用法:count = hist(X) 把向量x中的元素放入等距的10个条形中,且返回每一个条形中的元素个数。

          count = hist(X,center) 参量X为向量,把X中元素放到 m (m=length(center)) 个由center中元素指定的位置为中心的直方图中。

          count = hist(X,number) 参量number为标量,用于指定条形的数目。

          [count,center] = hist(X) 返回向量X中包含频率计数的count与条形的位置向量center,可以用命令bar(center,count)画出条形直方图。

如作1000个服从正态N(10,25)数据的直方图,程序如下:

X=normrnd(10,5,1000,1);
hist(X);

采用下面的程序也可以:

X=normrnd(10,5,1000,1);
[count,center]=hist(X);
bar(center,count);


(4) 二维图形注释命令 grid

功能:给图形的坐标轴增加分隔线。该命令会对当前坐标轴的属性有影响。

用法:grid on 给当前的坐标轴增加分隔线。
           grid off 从当前的坐标轴中去掉分隔线。
           grid 转换分隔线的显示与否的状态。
           grid(axes_handle,on|off) 对指定的坐标轴

           axes_handle是否显示分隔线。

(5) 空间曲线作图

Matlab提供了三维曲线作图函数plot3。调用格式:plot3(x,y,z,'s'),其中x,y和z是长度相同的向量,s表示线型和颜色。作空间螺旋线:

t=0:0.01:8*pi;
x=cos(t);
y=sin(t);
z=t;
plot3(x,y,z,'r');

(6) 三维曲面作图

命令1 mesh
功能:生成由X,Y和Z指定的网线面
用法:mesh(X,Y,Z) 画出三维网格图

如作z=cosx.siny曲面图,程序如下:

[X,Y] = meshgrid(-3:0.1:3,-4:0.1:4);
Z=cos(X).*sin(Y);
mesh(X,Y,Z);
xlabel('x');
ylabel('y');
zlabel('z');

 4. 基本语句

(1) for语句

   for x=a:d:b
       (command)
   end

a为起始点,b为终止点,d为区间间隔。循环体内为执行语句。

求1+3+5+.....99。for语句程序 s=0;

for i=1:2:99
    s=s+i;
end
s

结果为2500

(2) while 语句

while expression
    (command)
end

用while语句实现如下:

s=0; i=1;
while i<100
    s=s+i;   i=i+2;
end
s

(3) if-else-end语句

该语句通常有三种形式
单分支

if expression
    (command) 
end     

双分支

if expression
    (command1)  
else
    (command2)   
end

多分支

if expression
    (command1)
elseif expression2
    (command2)
...
else
    (commandn)
end

如用该语句求1到100中被3整除余1的数和为s1,被3整除余2的数和为s2,被3整除的数和为s3。程序如下:

s1=0;s2=0; s3=0;
for i=1:100
   if(mod(i,3)==1) s1=s1+i;
   elseif (mod(i,3)==2) s2=s2+i;
   else s3=s3+i;  end
end
fprintf('s1=%3d s2=%3d s3=%3d\n',s1,s2,s3);

结果如下:
s1=1717  s2=1650  s3=1683

5. M文件

Matlab中M文件有两种。脚本M文件和函数M文件。

建立M文件的方法是:在Matlab的窗口中单击File➔New➔M-File。打开M-File窗口,在该窗口中输入程序。再以.m为扩展名存储。要运行M文件,F5或在命令窗口中输入该文件名,按确定键就可以了。

当我们要编写一个函数便于主程序调用时,该函数通过写为M文件。这种M文件称为函数M文件。函数M文件是文件名后缀为m的文件,这类文件的第一个非注释行必须以一个特殊字符function开始,格式为:function 函变量名=函数名(自变量名)


函数M文件和脚本M文件主要有以下差异:

(1) 函数M文件的文件名必须与函数名相同,脚本M文件则可以任意取合法的文件名。

(2) 脚本M文件没有输入参数与输出参数,而函数M文件有输入与输出参数,对函数进行调用时,可以按少于函数M文件规定的输入与输出变量个数,但不能多于函数M文件规定的输入与输出变量个数。

(3) 脚本M文件运行产生的所有变量都是全局变量,而函数M文件的所有变量除特别声明外都是局部变量。

如计算函数 z = (x^2 - 2x) * e^(-x^2 - y^2 - xy) 在(0.1,0.2)处的函数值。

编写M文件fun.m

function z=fun(x)
z=(x(1)^2-x(1)*2)*exp(-(x(1)^2-x(2)^2-x(1)*x(2)));
return;

在命令窗口中输入
>>x=[0.1,0.2]
>>z=fun(x)

得到结果为:
z=-0.1772

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

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

相关文章

揭秘紧固件分销网络:如何成为结构安全和社会进步的关键支点?

全球产品分销的历史源远流长&#xff0c;早在国际贸易初期就已形成。在紧固件行业中&#xff0c;随着各行业对紧固件需求的不断增长&#xff0c;市场呈现出积极的发展趋势。紧固件在结构、机械、设备及其他众多组件中扮演着至关重要的角色&#xff0c;确保了整个系统的高效运行…

电子家谱族谱在线制作小程序开发

电子家谱族谱在线制作小程序开发 电子家谱在线制作小程序通常会提供一系列的功能来帮助用户创建和维护家谱。这里是一个基于市场上常见的家谱制作小程序的功能列表示例&#xff1a; 基本信息录入&#xff1a; 用户注册与登录个人信息录入&#xff08;姓名、性别、出生日期、照…

隐藏你的环境文件!否则你的云存储数据可能会被盗并被勒索

网络犯罪分子正在侵入组织的云存储容器&#xff0c;窃取其敏感数据&#xff0c;并且在一些情况下&#xff0c;受害组织还会向他们支付费用&#xff0c;以确保他们不泄露或出售被盗数据。 研究人员表示&#xff1a;“此次活动背后的攻击者可能利用了广泛的自动化技术来成功且快…

车载网络测试实操源码_使用CAPL脚本对CAN总线上的错误帧进行实时监控

系列文章目录 车载网络测试实操源码_使用CAPL脚本解析hex、S19、vbf文件 车载网络测试实操源码_使用CAPL脚本对CAN报文的Counter、CRC、周期、错误帧进行实时监控 车载网络测试实操源码_使用CAPL脚本模拟发送符合协议要求(Counter和CRC)的CAN报文 车载网络测试实操源码_使用CA…

企业办公室电脑监控软件有什么好用的推荐(闭眼也可入手)

“工欲善其事&#xff0c;必先利其器。” 在今日之商业战场&#xff0c;企业之兴衰&#xff0c;不仅关乎战略眼光与市场布局&#xff0c;更在于内部管理之精细与效率。 信息技术的飞速发展&#xff0c;企业办公室电脑监控软件应运而生&#xff0c;成为了现代企业管理的得力助…

OpenCV Python 图像处理入门

OpenCV入门 OpenCV&#xff1a;轻量、高效、开源。最广泛使用的计算机视觉工具。 下面涉及图片的读取&#xff0c;RGB彩色通道&#xff0c;区域裁剪&#xff0c;绘制图形和文字&#xff0c;均值滤波&#xff0c;特征提取&#xff0c;模板匹配&#xff0c;梯度算法&#xff0c…

黑马Java零基础视频教程精华部分_19_lambda表达式

系列文章目录 文章目录 系列文章目录一、函数式编程二、Lambda表达式的标准格式三、Lambda表达式的省略写法 一、函数式编程 函数式编程(Functional programming)是一种思想特点。 之前的面向对象:先找对象&#xff0c;让对象做事情。如下图所示&#xff0c;这样会有点小麻烦。…

(一)基于自组织结构的多目标粒子群优化算法(SMOPSO)的无人机三维路径规划(MATLAB代码)

一、无人机多目标优化模型 无人机三维路径规划是无人机在执行任务过程中的非常关键的环节&#xff0c;无人机三维路径规划的主要目的是在满足任务需求和自主飞行约束的基础上&#xff0c;计算出发点和目标点之间的最佳航路。 1.1路径成本 无人机三维路径规划的首要目标是寻找…

理解Pytorch中的collate_fn函数

PyTorch中的DataLoader是最常用的类之一&#xff0c;这个类有很多参数&#xff08;14 个&#xff09;&#xff0c;但大多数情况下&#xff0c;你可能只会使用其中的三个&#xff1a;dataset、shuffle 和 batch_size。其中collate_fn是比较少用的函数&#xff0c;这对初学者来说…

2024年国家数据局第一批20个“数据要素×”典型案例解析

国家数据局首批20个“数据要素”典型案例解析 1、简介1.1 背景简介1.2 典型案例分类 2、案例解析2.1 工业制造领域案例1&#xff1a;数据要素驱动适应多式联运需求的运输装备协同制造案例2&#xff1a;打造工业数据空间 赋能产业链上下游发展 2.2 现代农业领域案例3&#xff1a…

07一阶电路和二阶电路的时域分析

一阶电路和二阶电路的时域分析 时域分析、频域分析、复频域分析本应该在信号与系统&#xff0c;或者数字信号处理这一章节里面进行处理的。 但在电路理论中也有这些知识&#xff0c;那就要好好掌握一下&#xff0c;打个底。详细细致的部分放到信号与系统里面去掌握

Spring Web MVC入门(中)

1. 请求 访问不同的路径, 就是发送不同的请求. 在发送请求时, 可能会带⼀些参数, 所以学习Spring的请求, 主要 是学习如何传递参数到后端以及后端如何接收. 传递参数, 咱们主要是使⽤浏览器和Postman来模拟&#xff1b; 1.1 传递单个参数 接收单个参数&#xff0c;在Spring MV…

七段S型加减速算法原理及其多种形状仿真

1、基本7段S型&#xff1a; 七段S型加减速的位置、速度、加速度、加加速度曲线如下图所示。 加加速度&#xff1a; 加速度&#xff1a; 速度&#xff1a; 位置&#xff1a; 以上是7段S型加减速的最基本公式&#xff0c;在实际应用中还需要考虑到起始和终止速度大于匀速速度的情…

【JavaSE】解读Java中的toString方法

前言&#xff1a; 在Java中&#xff0c;toString方法来自java.lang.Object 类&#xff0c;然后所有对象都继承该Object 类。默认情况下&#xff0c;它的作用是返回对象的字符串表示形式。在实际开发中&#xff0c;重写 toString() 方法可以帮助我们以更易读的形式输出对象信息&…

Verilog基础:模块端口(port)定义的语法(2001标准)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 Verilog中的端口定义有两种风格&#xff0c;一种是Verilog Standard 1995风格&#xff0c;一种是Verilog Standard 2001风格&#xff0c;本文将对Verilog Standar…

C语言基础11指针

指针的引入 为函数修改实参提供支持。 为动态内存管理提供支持。 为动态数据结构提供支持。 为内存访问提供另一种途径。 指针概述 内存地址&#xff1a; 系统为了内存管理的方便&#xff0c;将内存划分为一个个的内存单元&#xff08; 1 个内存单元占 1 个字节&#xff09…

自动控制——状态观测器

自动控制——状态观测器 引言 在自动控制系统中&#xff0c;准确地了解系统的状态对实现高性能控制至关重要。然而&#xff0c;在许多实际应用中&#xff0c;我们无法直接测量系统的所有状态变量。这时&#xff0c;状态观测器&#xff08;State Observer&#xff09;就发挥了…

【LeetCode面试150】——209长度最小的子数组

博客昵称&#xff1a;沈小农学编程 作者简介&#xff1a;一名在读硕士&#xff0c;定期更新相关算法面试题&#xff0c;欢迎关注小弟&#xff01; PS&#xff1a;哈喽&#xff01;各位CSDN的uu们&#xff0c;我是你的小弟沈小农&#xff0c;希望我的文章能帮助到你。欢迎大家在…

轻松上手MYSQL:精通正则表达式,数据匹配不再难!

&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 ✨欢迎加入探索MYSQL正则表达式函数之旅✨ &#x1f44b; 大家好&#xff01;文本学习…

【Cesium】Cesium图层请求完成的回调

有一个业务需要用到cesium图层请求完成的回调&#xff0c;翻了好久的文档终于给我找到&#x1f336;️。 是Cesium.ImageryProvider类的一个属性readyPromise 效果如下&#xff1a; Cesium图层请求完成的回调 完整代码如下&#xff1a; <html lang"en"><h…