首页 > 其他分享 >数学建模之Matlab快速入门--全

数学建模之Matlab快速入门--全

时间:2024-08-24 15:26:39浏览次数:9  
标签:end -- structTemp 矩阵 建模 %% Matlab delta 100

前言

  • 本文是之前学Matlab时候做的笔记,很适合快速入门
  • 数学建模中matlab和python是最常用的两个软件,现在本人更喜欢python去做数学建模

文章目录

界面介绍与操作

在这里插入图片描述

  • 工具栏:快捷操作
  • 编码器:脚本代码窗口
  • 工作区:脚本变量窗口
  • 工作路径:当前文件索引

快捷操作

在这里插入图片描述

最常用的:

  • clear
  • clc
  • dbstop if error

数据类型

数值型

整型

  • (u)int8、(u)int16、(u)int32、(u)int64 (u):是无符号类型

    a = int8(8)
    
    a = uint8(8)
    

浮点型

默认情况下,MATLAB其所有算术计算符合IEEE标准的双浮点精度执行

  • single :单精度
  • double :双精度
%matlab还可以让字符转为ASCII值
s = 'wang yang'

b = double(s(1))    %S(1) 代表着 ‘w'

复型

  • z = a + bi
z = 5 + 3i

real(z)		% 实部
imag(z)		%虚部
abs(z)		%模
angle(z)	%arctan b/a

逻辑型

  • logical :matlab中 0 为假,1为真
  • 逻辑运算符的结果

字符型

a = [1:5];         %a为一个数值数组
b = num2str(a);    %该函数将a转化为字符串类型   
x1 = a*2;          %此处为a中的数值一次乘2

struct数组

注意:matlab中索引是从1开始的

%%
structTemp = struct('name',{'汪洋','王国森','施轶秋'},'age',{18,18,18})  //一一对应
structTemp.name(1)
structTemp.name(2)
structTemp.name(2)
structTemp.age(1)
structTemp.age(2)
structTemp.age(3)

structTmep

structTemp
%%
%%
my.name = "汪洋"
my.age = 18
my
%%

%删除  但是要在扩展库中下载
structTemp = struct('name',{'汪洋','王国森','施轶秋'},'age',{18,18,18})
field = {'name'}
structTemp = rmfield(structTemp,field)

structTemp

cell数组

*元胞数组*是一种包含名为*元胞*的索引数据容器的数据类型,其中的每个元胞都可以包含任意类型的数据。元胞数组通常包含文本列表、文本和数字的组合或者不同大小的数值数组。通过将索引括在圆括号 ()中可以引用元胞集。使用花括号{} 进行索引来访问元胞的内容。

  • 要用{}赋值
  • 使用"()"访问
%1、要维度一样
%2、要用{}
a = {1,2,3,4;'w','w','x','w'}; 
b = cell(3)
c = cell(5,2)

%使用"()"访问
%以下4种赋值方式是一样的
A(1,1)={2}
A(1,2)={[2]}
A{2,1}=2  
A{2,2}=[2]

函数句柄

日期和时间型

https://www.cnblogs.com/yymn/p/9170252.html

数据标准

  • realmax 数据最大值
  • realmin 数据最小值
  • 结果异常值:
    • nan
    • inf

变量储存

利用MAT文件可以把当前MATLAB工作空间中的变量保留下来
MAT文件是一种二进制格式文件,文件后缀.mat
变量写入文件与导入matlab通过save和load命令:
save 文件名 [变量名列表]
load 文件名 [变量名列表]

当然可以通过主窗口的界面操作进行保存与导入
注:
1.文件名不需要加引号,不需要带文件后缀.mat,可以带路径
2.变量名列表中变量的个数不限,省略则默认写入/导入所有的变量,多个变量名之间用空格隔开

save mydata a x  %%把a x存入mydata文件中,下次就可以使用
load mydata    %%将mydata文件中的内容

基本运算

%%
%基本运算
(1+sqrt(4))/2 %开平方根
8^(1/3) %开任意方根,注意优先级^大
power(8,1/3) %开任意方根,注意复数模式 等价于^  如下:
power(-8,0.3)^(1/0.3) %理论仍是-8,但结果已经变成复数  

log(1.5)  %以e为底的对数  
log10(1.5)  %以10为底的对数
log2(1.5)  %以2为底的对数
log1p(x)  %=log(x+1)   注意一下 : 比log精度更高,特别是x趋于0的时候  1
log(9)/log(3) %利用换底公式求任意

exp(2)  %以e为底的指数
expm1(2)  % = exp(x)-1  e^x 的泰勒级数展开
pow2(10)  %以2为底的指数
nextpow2(20) %寻找最大的n,使得2^(n-1)小于该值  注意一下

sin(pi/6) %正弦
cos(pi/6) %余弦
sinpi(1/6) %=sin(1/6*pi)
cospi(1/6) %=cos(1/6*pi)
tan(pi/4) %正切

asin(1/2) %反正弦,弧度制
acos(1/2) %反余弦,弧度制
atan(1) %反正切,弧度制
asind(1/2) %反正弦,角度制
acosd(1/2) %反余弦,角度制
atand(1) %反正切,角度制
atan2(1,-1) %四象限反正切

mod(17,4) %求余数
rem(17,4) %求与被除数符号相同余数

sign(-1) %符号函数

fix(1.1072)  %向正去穷取整数
floor(1.1072)  %向负无穷取整数
ceil(1.1072)	%比他大的最近一个整数
round(1.1072)	%四舍五入
roundn(1.1072,-2)	%按小数位置四舍五入
%%
%整体运算
max([1,2,3,4,5]) %最大值
min([1,2,3,4,5]) %最小值
mean([1,2,3,4,5]) %平均值
median([1,2,3,4,5]) %中位数
prod([1,2,3,4,5]) %求积
sum([1,2,3,4,5]) %最和
var([1,2,3,4,5]) %方差
std([1,2,3,4,5]) %标准差
cov([1,2,3,4,5],[5,4,3,2,1]) %协方差

%%
%生成随机数
rand() %生成0-1均匀分布的的随机数
randi(100) %生成0到100均匀分布随机数,注意辨别参数的意义
randn(1)%生成正态分布的的随机数
sprand(10,10,0.5)%稀疏均匀分布随机矩阵   最后一个参数表示的是密度  注意一下:稀疏矩阵0是不显示的
sprandn(10,10,0.5) %稀疏正态分布随机矩阵
rng('default') %随机种子

矩阵基础

矩阵是matlab的核心

向量、矩阵

  • 向量可以理解为一维数组,也可以看作是矩阵的特殊形式
  • 矩阵可以理解为二维数组

向量

命名规范:

起始数据 : 数据间隔(可省略,默认为1) : 结束数据

%%
1 : 100(等价于1:1:100)		  %范围为1到100,间隔为1,1×100的向量
1 : 2 : 100					%范围为1到100,间隔为2, 1×50的向量
100 : -1 : 1				%范围为100到1,间隔为-1, 1×100的向量
1 : 1 : 100.7				%范围为1到100(≤100.7的最大数),1×100的向量
%%

矩阵

  • 采用逗号或空格来分割行元素
  • 采取分号或者换行来分隔列元素
  • 注意维数
zeros(m,n) / (m)			%创建m*n的零矩阵
ones(m,n)					%创建m*n的一矩阵(全是一) 
eye(m,n)					%创建m*n的(伪)单位矩阵
magic(m)					%创建m的换方阵,行列相等
rand(m,n)/randn(m,n)		%创建m*n的随机矩阵,rand是0-1的范围,randn是m-n的范围
meshgrid(L,N)				%创建基矩阵
repmat(A,m,n)				%将A扩大m*n倍
reshape( Matrix_in , m , n) %扩充矩阵,注意不能改矩阵的元素

%%
meshgrid(坐标)
m=1:5;
n=2:7;
[A,B]=meshgrid(m,n)

A =

     1     2     3     4     5
     1     2     3     4     5
     1     2     3     4     5
     1     2     3     4     5
     1     2     3     4     5
     1     2     3     4     5
B =

     2     2     2     2     2
     3     3     3     3     3
     4     4     4     4     4
     5     5     5     5     5
     6     6     6     6     6
     7     7     7     7     7

%%

矩阵运算

  • 矩阵相乘 A*B
  • 矩阵右除 A/B等价于A与B的逆乘
  • 矩阵左除 A\B等价于A的逆乘与B
  • 矩阵数乘 A.*B 矩阵中元素两两相乘
  • 矩阵右除 A./B
  • 矩阵左除 A.\B
  • 对于数+/-矩阵,相当于每个元素都加或者减一

其他运算:(运行规则和矩阵运算相同)

  • inv(A) 矩阵求逆
  • pinv(A) 矩阵求伪逆 逆不唯一,对于非方阵来说,A * B * A ≈ A满足这个就行
  • A’ 矩阵转置
  • det(A) 矩阵行列式
  • trace(A) 行列式的迹
  • eig(A) 特征向量和特征值 [X,Y] = eig(A)
  • lu(A) [L, U, P] = lu(A); L是一个下三角矩阵,U是一个上三角矩阵,P是一个置换矩阵,使得PA = LU
  • qr(A) [Q, R] = qr(A); Q是一个正交矩阵,R是一个上三角矩阵,使得A = QR

矩阵大小和向量大小

在这里插入图片描述

冒号运算符号(遍历矩阵)

  • 注意下标是从1开始的

在这里插入图片描述

  • 注意的是:matlab中永远是行为先

稀疏矩阵

采用三元组的方式存储,不储存0

  • sparse(m,n)
  • 可以强制转换矩阵为稀疏矩阵

逻辑基础

logical,真为1,0为假

符号功能
==判断是否相等
~=判断是否不等
<判断是否小于
<=判断是否小于等于
>判断是否大于
>=判断是否大于等于
符号功能
isnan( )判断是否非数
isinf( )判断是否无穷大
isempty( )判断是否为空
isreal( )判断是否为实数(甄别复数)

在这里插入图片描述

标量和矢量:

  • 标量:固定的,如:x= 5
  • 矢量:矢量(Vector)在MATLAB中则用于表示一系列相关的数值,它被定义为一维数组或序列,可以是行向量或列向量。

优先级

优先级符号
1(最高)括号( )
2转置 ’ ;次幂 ^
3一元运算符 + - ~
4乘除 * / \
5加减 + -
6冒号表达式 :
7二元比较逻辑 > >= < <= ~=
8逻辑与 &
9逻辑或 |
10标量逻辑与 &&
11(最低)标量逻辑或 ||
  • 只要记住:()优先级是最高的就可以了

结构基础

if-else-end

在这里插入图片描述

注意点

  • endif不能写成else if
  • 记得要写end
a=1;b=2;c=1;
delta=b^2-4*a*c;
if delta>0
    x(1)=(-b+sqrt(delta))/2/a;
    x(2)=(-b-sqrt(delta))/2/a;
elseif delta==0
    x=(-b+sqrt(delta))/2/a;
else
    x=[];
end

switch-case-otherwise

在这里插入图片描述

注意点:

  • otherwise不需要提供判断条件,当其他分支均不满足条件时候被执行
  • break别忘了
  • switch不能指定范围
a=1;b=2;c=1;
delta=b^2-4*a*c;
switch sign(delta)
    case 1
    x(1)=(-b+sqrt(delta))/2/a;
    x(2)=(-b-sqrt(delta))/2/a;
    case 0
    x=(-b+sqrt(delta))/2/a;
    otherwise
    x=[];
end

for

在这里插入图片描述

注意点

  • index在values中按顺序进行取值,value一般是行向量,一般采用冒泡表达式
  • 当value值为矩阵时候,按照列进行切割,每次value取矩阵的一列
  • 别忘了end
s=10;
H = zeros(s);
for i = 1:s
    for j = 1:s
        H(ii,jj) = 1/(ii+jj-1);
    end
end

parfor

  • 只要记得他是用来加速for循环的

在这里插入图片描述

while

在这里插入图片描述

  • 注意别忘了end
%% while
n = 10;
f = n;
while n > 1
    n = n-1;
    f = f*n;
end

%注意:n的更新条件

break、continue、return

  • break 跳出循环体
  • continue 跳出本次循环
  • return 跳出函数体,matlab一般很少使用
%% break
limit = 0.8; s = 0;
while 1
    tmp = rand;
    if tmp > limit
        break
    end
    s = s + tmp;
end

%% continue
limit = 0.8; s = 0;
while 1
    tmp = rand;
    if tmp > limit
        continue
    end
    s = s + tmp;
end

函数

在这里插入图片描述

  • 函数需要存m文件(在保存的时候选择函数),默认函数名就是文件名字
  • 不要睡意改变文件名字,否则调用容易出问题
  • 如果matlab里面有这个函数,就不要去实现
%如:自定义文件
function [aa,bb] = m_max(a,b)
%UNTITLED 此处提供此函数的摘要
%   此处提供详细说明
if a > b
    aa = a
    bb = b
else
    aa = b
    bb = a
end

nargin

在这里插入图片描述

function c = addme(a,b)
%     switch nargin
%         case 2
%             c = a + b;
%         case 1
%             c = a + a;
%         otherwise
%             c = 0;
%     end
    if nargin<2
        b=1;
    end
    c=a+b;
end

~

function [c1,c2] = opem(a,b)
	if nargin < 2
		b  = 1;
	end
		c1 = a + b;
		c2 = a - b;
end

%%
如果不想c1,可以这样写 [~,c2]
%%

函数查询

https://blog.csdn.net/ywsydwsbn/article/details/123857932?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169478642516800226595731%2522%252C%2522scm%2522%253A%252220140713.130102334

  • 不会的函数,直接bing、百度等

特殊形式

函数句柄

%创建函数句柄
fun1 = @open
[a,b] = fun(1,1)

%fun2 = @(x,y)(x+y)
%输出  ans = 2

evel

在这里插入图片描述

标签:end,--,structTemp,矩阵,建模,%%,Matlab,delta,100
From: https://blog.csdn.net/weixin_74085818/article/details/141500020

相关文章

  • 联合权值
    [NOIP2014提高组]联合权值题目描述无向连通图\(G\)有\(n\)个点,\(n-1\)条边。点从\(1\)到\(n\)依次编号,编号为\(i\)的点的权值为\(W_i\),每条边的长度均为\(1\)。图上两点\((u,v)\)的距离定义为\(u\)点到\(v\)点的最短距离。对于图\(G\)上的点对\((u,v......
  • 蔡英丽医生:帕金森、头疼、失眠…迷雾重重?一文带你全面了解
    我们的大脑需要氧气和营养物质才能维持其复杂的神经活动和生理功能,正如身体其他器官依赖这些要素才能正常运作一样。为了确保大脑的健康运作,它依赖着充足的血液流动。当大脑的血液供应、神经递质平衡或特定区域的神经元功能出现问题时,就可能导致一系列神经系统疾病,如帕金森病、......
  • “健康每一步,中医护航行”——全民步数健康周
    随着现代生活节奏的加快,人们越来越重视健康生活方式的培养。为了响应国家“全民健身”的号召,提高公众的健康意识和参与度,我们特别策划了“全民步数健康周”主题活动。本次活动旨在通过微信步数挑战的形式,鼓励大家走出家门,增加日常运动量,同时结合全科室中医线上问诊服务,为参与者......
  • ​‌黑悟空​攻略
    ‌翎羽山庄‌是天下3游戏中的一个门派,以其远程射手的身份和几乎完美的技能组合著称,包括速度、射程、杀伤力和控制力。翎羽山庄的玩家在战场和野外都是敌人闻风丧胆的存在,尤其在群战中,翎羽山庄拥有最强的点杀能力和多样的控制骚扰能力。合理利用射程优势,翎羽山庄的最佳输出距离......
  • 微信公众号开发|接入
    服务器地址配置服务器可以使用内网穿透(教程在上一篇文章)或者买一个接入https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.htmlpackagecom.example.springboot.controller;importorg.springframework.web.bind.annotation.Ge......
  • Eagle 4.0:强大插件加持的素材收集管理工具
    期待很久的全新 Eagle 4.0 现已正式推出了!Eagle是一款Win/Mac双平台素材收集管理工具,它可以帮你高效整理电脑中的图片、字体、视频、音频等各种素材,是众多设计师、美图收集爱好者的信赖之选。4.0版是一次全面的革新,从全新的插件系统到实用的 AI工具,再到重新设计......
  • 一个可以搜索页面内超链接的HTML页面
    页面效果如上,含有标题,搜索框和一些超链接,在搜索框输入一些文字可以在下方显示含有这些文字的超链接。这里的搜索不仅可以中文,还可以是英文,数字HTML代码如下<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=d......
  • 用C#写一个随机音乐播放器
    form1中namespce里的代码如下publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidbutton1_Click(objectsender,EventArgse){stringfolder=textBox1.Text;stringfolderPath......
  • Python爬虫案例二:获取虎牙主播图片(动态网站)
    爬虫流程:优先假设是JSON数据,抓包方式只能翻页JSON数据HTML数据1.异步数据(即先返回HTML,再返回目标的数据,只是触发了JSON请求),不在HTML中2.不能刷新网页,直接翻页测试链接:https://live.huya.com/源代码: importrequests,json,osclassTwo(object):def__ini......
  • 豆瓣评分8.6!Python社区出版的Python故事教程,太强了!
    Python是活力四射的语言,是不断发展中的语言。就连使用Python多年的行者也不敢说对Python的方方面面都了解并可以自由运用,想必读者可能更加无法快速掌握所有重点技巧了。今天给小伙伴们分享的这份手册是用互动的开发故事来探讨Pyfhonic开发的故事书籍,是一本Python语言详解......