数学建模学习(1):Matlab函数

news2024/11/26 2:24:00

逻辑基础

1.逻辑变量

Logical类型: true(真值); false(假值)

a=true
b=false

 

 2.逻辑判定

数字逻辑:

 常用的特殊逻辑:

 3.逻辑运算

 交叉知识-扩充优先级

优先级

符号

1(最高)

括号( )

2

转置 ’ ;次幂 ^

3

一元运算符 + - ~

4

乘除 * / \

5

加减 + -

6

冒号表达式  :

7

二元比较逻辑  >  >=  <  <=  ~=

8

逻辑与 &

9

逻辑或 |

10

标量逻辑与 &&

11(最低)

标量逻辑或 ||

记不住优先级顺序时,老老实实加括号才是最好的选择

结构基础

1.算法需求

算法五特性
(1)有穷性。有穷性是指算法需在有穷步骤、有穷时间内结束。
(2)确定性。确定性是指每个步骤都有确切的意义,相同的输入有相同的输出。
(3)有效性。有效性是指可通过已实现的运算在有限次完成,或叫可行性。
(4)输入。
(5)输出。

 2.分支语句

 分支语句的作用:判断当前的情况来决定下一步的工作
 一般情形:MATLAB提供了if-else-end结构和switch-case-otherwise结构来实现分支功能。
 特殊情形:try-catch结构是分支选择结构的一种特殊形式。如果程序的bugs在try语句块中,那么程序将会执行catch语句块。try-catch语句可以用于捕捉错误。

问:为什么try-catch应用较少?

在当前Matlab的脚本高debug运行模式下,采用dbstop if error等语句更加简洁,当针对特殊异常捕获时才会使用try-catch。

if-else-end

 

注意elseif不能写为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

通过switch_expression获取要判断的值,从不同的case中选择满足的值。

otherwise不需要提供判断条件,当其他分支均不满足时被执行。

*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

3.循环语句

 循环语句的作用:对重复性工作进行执行,并提供起始和结束的标志
 MATLAB提供了for结构和while结构来实现分支功能。

-for语句循环的特点是判断条件通常是对循环次数的判断,一般循环次数预先设定好;
-while语句直接将逻辑判断语句作为控制条件

原则上while的适用范围更广一些。但在一般操作中for循环的应用更加广泛。

for循环

 

 

index在values中按顺序进行取值,value一般是行向量形式,一般采用冒号表达式进行生成

*当value为矩阵形式,则将矩阵按照列进行切割,每个value取矩阵的一列


 

s=10;

H=zeros(s);

for ii=1:s

for jj = 1:s

H(ii,jj) = 1/(ii+jj-1);

end

end

 while循环

通过expression来判断下一次循环是否被进行

一般情况下,应在循环结构中对expression进行更新

具体案例:计算10!

n=10;
f=n;
while n>1
    n=n-1;
    f=f*n;
end

4.组合控制

除了在判断中对代码下一步进行控制,还具有三种特殊控制符

 

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

 

*交叉知识-循环体与矩阵

Matlab具有非常优异的矩阵运算优势,能用矩阵运算则用矩阵

1.尽量避免对矩阵元素进行循环遍历操作

2.循环体中的参量应提前预留空间,避免在循环中新建空间

x=sin(0:0.001:1e5);
tic
for ii=2:(length(x)-1)
    y(ii-1)=(x(ii-1)+x(ii+1))/2;
end
toc
%时间已过 9.541004 秒。
x=sin(0:0.001:1e5);
tic
y=zeros(1,length(x)-2);
for ii=2:(length(x)-1)
    y(ii-1)=(x(ii-1)+x(ii+1))/2;
end
toc
%时间已过 0.695248 秒。

*交叉知识-多线程

 自定义函数

1.M-File

尽管完全在MATLAB命令行中进行许多有用的计算,但迟早需要编写M文件。它们是其他编程语言中程序、函数、子程序和过程的等价物。将一系列命令收集到一个M文件中会带来很多可能性,包括
• 通过编辑文件而不是重新键入一长串命令来实现算法,
• 对数值实验进行永久记录,
• 建立日后可重复使用的公用设施,
• 与他人交换M文件。

M-File的两种主要形式
• 脚本:可直接运行、编辑、调试的一组代码
• 函数:进行特定输入/输出的一组代码

2.函数格式

基本格式:

function[输出形参表: output1, ...,outptn] = 函数名(输入形参表: input1, ... , inputn)

函数体代码部分

end

函数需存为m文件,命名默认为函数名。
*不要随意改动文件名字,否则将产生调用问题。

具体案例:获取数列最大值

my_max.m
function [maxval]= my_max(L)
    maxval=L(1);
    for ii=2:length(L)
        if maxval<L(ii)
            maxval=L(ii);
        end
    end
end

如果Matlab有该功能的函数,应避免自己重新实现

3.输入输出

如需要默认输入值,则需要通过输入参量进行控制

nargin : 输入参量的个数

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

仅输入一个变量,第二个变量默认为1

function c = addme(a,b)
    if nargin==1
        b=1;
    end
    c=a+b;
end

代入变量时,排序靠前的参量先被赋值

忽略不想要的输出

~表达式

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

为节省空间可以修改为:

通过~表达式可以选择自己需要的输出,节省内存空间

特殊形式

1.函数句柄

采用@来创建函数句柄,从而调用函数或将函数作为变量

fun1=@opme;
[a,b]=fun1(1,1)
a =
     0
b =
     2

采用@来创建匿名函数,减少M文件的创建

fun2=@(x,y)(x+y);%定义匿名函数
fun2(1,1);%调用匿名函数

3.符号运算式

采用syms构建函数

x1,x2保留符号特性

syms x1 x2
f=x1*x2;
subs(f,[x1,x2],[4,5])

x1,x2不保留符号特性

syms x1 x2
f=x1*x2;
x1=4;x2=5;
subs(f)
eval(f)

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

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

相关文章

svo1论文

SVO: Fast Semi-Direct Monocular Visual Odometry 摘要 我们提出了一种半直接单目视觉测距算法&#xff0c;该算法精确、鲁棒且比当前算法更快最先进的方法。半直接方法为运动估计技术消除了需要高成本的特征提取和鲁棒匹配。我们的算法可直接在像素强度上处理&#xff0c;以…

【C++初阶】---C++入门篇

文章目录 前言&#x1f31f;一、C历史介绍&#x1f31f;二、命名空间&#x1f30f;2.1.C与C对比&#x1f30f;2.2.命名空间的引入&#x1f30f;2.3.命名空间定义&#x1f30f;2.4.命名空间的使用&#x1f30f;2.5.对上述C与C对比中的第二个不同点的解释&#xff1a; &#x1f3…

基于有序模式的度量对多变量时间序列进行非线性分析研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 基于有序模式的度量&#xff08;Ordinal Pattern-based Measures&#xff09;是一种用于多变量时间序列非线性分析的方法。它可以通过分析时间…

【C++】医学影像PACS管理系统源码支持三维图像后处理和重建

前言&#xff1a;随着计算机科学与医疗设备的迅猛发展&#xff0c;数字化图像技术与现代通讯及计算机技术相结合&#xff0c;形成了PACS (picture archiving and communication system影像储存与传输系统)。它将医学图像资料转化为数字信息通过高速计算机设备及通讯网络&#x…

剑指offer51.数组中的逆序对

用类似于归并排序的方法解决这道题&#xff0c;把数组分成左右两个数组&#xff0c;然后归并排序&#xff0c;在排序的过程中统计逆序对的个数 class Solution {int[] nums, tmp;public int reversePairs(int[] nums) {this.nums nums;tmp new int[nums.length];return merge…

C# List 详解五

目录 26.GetType() 27.IndexOf(T) 28.IndexOf(T, Int32) 29.IndexOf(T, Int32, Int32) 30.Insert(Int32, T) 31.InsertRange(Int32, IEnumerable) 32.LastIndexOf(T) 33.LastIndexOf(T, Int32) 34.LastIndexOf(T, Int32, Int32) …

阿里云效搭建github的前端流水线

先构建一个vue项目&#xff0c;新建一个node模板&#xff0c;配置流水线源&#xff0c;按照说明一步步配置就可以了&#xff0c;最好开始webhook 复制webhook地址&#xff0c;添加入github仓库的settings的webhooks中&#xff0c;Content type设置为json 流水线源设置好了之后…

什么是HTTP 500错误,怎么解决

目录 什么是HTTP 500 HTTP 500错误的常见原因&#xff1a; 如何修复HTTP 500 总结 什么是HTTP 500 错误 HTTP 500内部服务器错误是指在客户端发出请求后&#xff0c;服务器在处理请求过程中发生了未知的问题&#xff0c;导致服务器无法完成请求。HTTP 500错误是一个通用的服…

毕业!第六章 贪心(一、二)——区间问题,Huffman树,不等式与推公式

文章目录 区间问题905. 区间选点908. 最大不相交区间数量906. 区间分组907. 区间覆盖 Huffman树148. 合并果子 排序不等式913. 排队打水 绝对值不等式104. 货仓选址 推公式125. 耍杂技的牛 6.18~7.22完成算法基础的学习&#xff0c;剩下时间用来暴刷《算法竞赛指南》以巩固基础…

Vue3项目(vben框架)打包时报错:JavaScript heap out of memory

我用的方法二 方法三解决了问题&#xff0c;方法二中将内存设置为了16g&#xff0c;方法三中内存设置16g也就是LIMIT16384 异常 FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory 原因 JavaScript 内存不足&#xff0c;指的就是Node,N…

Python爬虫学习笔记(十三)————CrawlSpider

目录 1.CrawlSpider介绍 2.使用方法 &#xff08;1&#xff09;提取链接 &#xff08;2&#xff09;模拟使用 &#xff08;3&#xff09;提取连接 &#xff08;4&#xff09;注意事项 3.运行原理 4.Mysql 5.pymysql的使用步骤 6.数据入库 &#xff08;1&#xff09;s…

uniapp使用

scroll-view封装tab组件 一个灵活的组件&#xff0c;可以自定义配置&#xff0c;&#xff0c;会设置一个 defaultConfig 去接收父组件传递的值去设置样式&#xff1a;比如 文字的颜色&#xff0c;激活文字的颜色&#xff0c;滑块的颜色&#xff0c;宽度&#xff0c;等滑块会跟着…

学习day51

几个注意点&#xff1a; 1.关于组件名&#xff1a; 一个单词组成&#xff1a; 第一种写法&#xff08;首字母小写&#xff09;&#xff1a;school 第二种写法&#xff08;首字母大写&#xff09;&#xff1a;School 多个单词组陈&#xff1a; 第一种写法&#xff08;kebab-case…

基础算法(三)

目录 一、双指针算法 二、位运算 三、区间合并 一、双指针算法 双指针算法模板: for(int i 0,j 0;i < n;i) {while(j < i && check(i,j)) j;//每道题的具体逻辑 } 1.1两个指针指向两个队列1.2两个指针指向一个队列 案例习题: 分割字符串 #include<…

【C语言】自定义类型:结构体,枚举,联合

目录 前言&#xff1a;一.结构体1.结构体的声明2.结构体特殊的声明3.结构体的自引用4.结构体变量的定义和初始化5.结构体内存对齐6.修改默认对齐数7.结构体传参 二.位段1.什么是位段2.位段的内存分配 三.枚举1.枚举的定义2.枚举的优点 四.联合&#xff08;共用体&#xff09;1.…

php使用PDO_sqlsrv

php拓展下载&#xff1a;Microsoft Drivers for PHP 发行说明 - PHP drivers for SQL Server | Microsoft Learn 参考文章&#xff1a;php7.3.4 pdo方式连接sqlserver 设置方法_pdo sqlserver_黑贝是条狗的博客-CSDN博客 php5.6.9安装sqlsrv扩展&#xff08;windows&#xff0…

BEVDet 论文解读

BEVDet: High-Performance Multi-Camera 3D Object Detection in Bird-Eye-View 作者单位 PhiGent Robotics 目的 2D 的视觉感知在过去的几年里有了急速的发展&#xff0c;涌现出一些优秀的范式工作&#xff0c;这些工作有较高的性能&#xff0c;可扩展性&#xff0c;以及多…

【前端设计】使用Verdi查看波形时鼠标遮住了parameter值怎么整

盆友&#xff0c;你们在使用Verdi的时候&#xff0c;有没有遇到过鼠标遮挡着了parameter数值的场景&#xff1f;就跟下面这个示意图一样&#xff1a; 最可恨的是这个参数值他会跟着你的鼠标走&#xff0c;你想把鼠标移开看看看这个例化值到底是多大吧&#xff0c;这个数他跟着你…

云原生基础设施实践:NebulaGraph 的 KubeBlocks 集成故事

像是 NebulaGraph 这类基础设施上云&#xff0c;通用的方法一般是将线下物理机替换成云端的虚拟资源&#xff0c;依托各大云服务厂商实现“服务上云”。但还有一种选择&#xff0c;就是依托云数据基础设施&#xff0c;将数据库产品变成为云生态的一环&#xff0c;不只是提供自身…

直播回顾 | SDS 容灾方案,让制品数据更安全

7 月 18 日&#xff0c;腾讯云 CODING 与 XSKY星辰天合联合举办了主题为“SDS 容灾方案&#xff0c;让制品数据更安全”的线上研讨会。 来自腾讯云 CODING 的高级解决方案架构师陈钧桐和 XSKY星辰天合金融行业解决方案专家战策&#xff0c;分享了制品管理的困境与需求、腾讯云…