matlab|那些你不得不知道的matlab小技巧(代码片段)

slandarer slandarer     2022-12-03     127

关键词:

1:预设符号变量类型

假设我们编写了如下代码:

syms x
f=x^3+x^2+9*x+9;
solve(f==0)
此时求解结果为:

ans =
-1
-3i
3i

但如果在求解前预设x为实数:

syms x
assume(x,'real')
f=x^3+x^2+9*x+9;
solve(f==0)

求解结果为:

ans =
-1

还有超多其他预设等你来研究:

Assume ‘x’ isSyntax
realassume(x,‘real’)
rationalassume(x,‘rational’)
positiveassume(x,‘positive’)
positive integerassume(x,‘positive’,‘integer’)
less than -1 or greater than 1assume(x<-1)
an integer from 2 through 10assume(in(x,‘integer’) & x>2 & x<10)
not an integerassume(~in(z,‘integer’))
not equal to 0assume(x ~= 0)
evenassume(x/2,‘integer’)
oddassume((x-1)/2,‘integer’)
from 0 through 2πassume(x>0 & x<2*pi)
a multiple of πassume(x/pi,‘integer’)

2:if 转 switch (逻辑值作为输入变量)

假如你编写了如下代码:

score=68
if 90<=score&&score<=100
    disp('优秀');
elseif 70<=score&&score<90
    disp('良好');
elseif 60<=score&&score<70
    disp('一般');
elseif score<60
    disp('不及格');
end

有个办法能够避免大量 if else

就是拿逻辑值作为输入使用 switch:

score=68
switch true
    case 90<=score&&score<=100
        disp('优秀');
    case 70<=score&&score<90
        disp('良好');
    case 60<=score&&score<70
        disp('一般');
    case score<60
        disp('不及格');
end

3:matlab 拟合曲线后转换成匿名函数

x=[2 2.5 3 3.5 4 4.5 5 5.5 6];
y=[41 38 34 32 29 28 25 22 20];
p=polyfit(x,y,3);
f=matlabFunction(poly2sym(p))

xx=2:.1:6;
plot(xx,f(xx),'LineWidth',2)
grid on

f =
包含以下值的 function_handle:
@(x)x.(-8.57e+2./5.4e+1)+x.2.*(2.56e+2./9.9e+1)-x.3.(5.8e+1./2.97e+2)+7.05e+2./1.1e+1

4:更快的查看每个模块包含的函数

如果没看过小刘老师这篇,我可能永远也不会点开这个小三角,这个三角也太细节了叭hiahiahia图片,点开后会出现一个像电子词典样子的help文档合集:

5:sub2ind及ind2sub

假设我们要把全零矩阵第(2,3)个元素及第(3,2)个元素变为1,如果编写了如下代码:

A=zeros(4,4);
A([2,3],[3,2])=1

A =
0 0 0 0
0 1 1 0
0 1 1 0
0 0 0 0

我们会发现不只改变了两个元素,但我们可以通过sub2ind函数将双变量索引改为单变量索引,例如([4,4]为矩阵尺寸):

A=zeros(4,4);
A(sub2ind([4,4],[2,3],[3,2]))=1

A =
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 0

ind2sub函数可以用来减少循环嵌套次数,举个简单的例子,假如编写了如下代码:

for i1=1:5
    for i2=1:3
        for i3=1:2
            disp([i1,i2,i3])
        end
    end
end

可以改写为如下代码(用处不多且需要注意顺序,远没上一条重要):

sz=[5,3,2];
for i=1:prod(sz)
    [i3,i2,i1]=ind2sub(sz(end:-1:1),i);
    disp([i1,i2,i3])
end

6:刷亮数据

不会有人还没点过这个小刷子叭:

点击后可以将部分数据刷亮,之后右键点击被刷亮的数据,可以把数据导出,换颜色,或者直接把数据删掉,交互式绘图大杀器有没有:

7:大小为0的矩阵

就比如我要创建一个[x1,y1;x2,y2;x3,y3;… …]这样的矩阵,每一轮往最后加入新点,但每次加入点的个数未知,要添加次数也未知,我们就不如创建一个0xn大小的矩阵不断的往后面增添新的元素:

% 创建02列矩阵
P=zeros(0,2);
% 循环随机5-10之间的随机轮
for i=1:randi([5,10],[1,1]) 
    % 每次随机增加2-5行随机数
    P=[P;rand(randi([2,5],[1,1]),2)]
end

8:任意进制相互转换

就是先转成十进制,再转换为其他进制:

% 12进制转16进制
bs1=12;
bs2=16;
% 原字符
baseStr='1B';

% 转换
decStr=base2dec(baseStr,bs1);
result=dec2base(decStr,bs2)
% result='17'

因此有更简单的RGB颜色、16进制码相互转换函数:

RGB值转16进制码函数:

function HEX=RGB2HEX(RGB)
    hexVec=dec2base(RGB,16)';
    HEX=['#',hexVec(:)'];
end

调用:

hex=RGB2HEX([251,255,250])
% hex = '#FBFFFA' 

16进制码转RGB值函数:

function RGB=HEX2RGB(HEX)
    hexVec=reshape(HEX(2:end),2,[])';
    RGB=base2dec(hexVec,16)';
end

调用:

rgb=HEX2RGB('#FBFFFA')
% rgb = [251,255,250]

9:虚平面绘图

MATLAB 支持虚平面绘图,就是实部对应X轴坐标,虚部对应Y轴坐标,使用虚平面绘图可以只使用一个数组便绘制隐函数,举个例子,使用虚平面绘图绘制圆形:

t=0:pi/100:2*pi;
plot(exp(t.*1i))

10:MATLAB高精度计算

一般MATLAB中如果两个数的数值相差小于eps,则认为数值相同,例如以下两个判断MATLAB都会认为是对的:

1==1+eps/2
1==1+1e-20

ans =
logical
1
ans =
logical
1

eps的数值为2.2204e-16,只要我们将精度设置的更高就不会出现上述问题,例如:

digits(50)
logical(vpa(1)==vpa(1)+vpa(1e-20))

ans =
logical
0

再比如,我想显示圆周率的前100位小数:

digits(100)
pi100=vpa(pi)

pi100=3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068

matlab|那些你不得不知道的matlab小技巧(代码片段)

1:预设符号变量类型假设我们编写了如下代码:symsxf=x^3+x^2+9*x+9;solve(f==0)此时求解结果为:ans=-1-3i3i但如果在求解前预设x为实数:symsxassume(x,'real')f=x^3+x^2+9*x 查看详情

matlab|那些你不得不知道的matlab小技巧(代码片段)

嗨嗨嗨第四期来啦:1:将小数转化为分数并提取分子和分母a=2065/2013;b=split(rats(a),'/')c=str2num(b1)d=str2num(b2)b=2×1cell数组’2065’'2013’ \\,c=2065 \\,d=20132:元胞与数组转化2.1࿱ 查看详情

matlab|那些你不得不知道的matlab小技巧(代码片段)

嗨嗨嗨第四期来啦:1:将小数转化为分数并提取分子和分母a=2065/2013;b=split(rats(a),'/')c=str2num(b1)d=str2num(b2)b=2×1cell数组’2065’'2013’ \\,c=2065 \\,d=20132:元胞与数组转化2.1࿱ 查看详情

matlab|那些你不得不知道的matlab小技巧(代码片段)

1:实时脚本控件实时脚本应该大部分人都会用了,但是实时脚本控件应该用的人还不多,怎么说呢,应该算一个更方便调整参数的模块叭。点击图示按钮即可插入各种类型的控件:插入之后双击控件即可设置其属... 查看详情

matlab|那些你不得不知道的matlab小技巧(代码片段)

1:预设符号变量类型假设我们编写了如下代码:symsxf=x^3+x^2+9*x+9;solve(f==0)此时求解结果为:ans=-1-3i3i但如果在求解前预设x为实数:symsxassume(x,'real')f=x^3+x^2+9*x+9;solve(f==0)... 查看详情

网页搜索(百度谷歌)你不得不知道的十个小技巧(代码片段)

网页搜索(百度谷歌)你不得不知道的十个小技巧百度搜索广告多,谷歌搜索搜不到东西,这时候,你得问问自己——你,用对姿势了么?文章目录网页搜索(百度谷歌)你不得不知道的十个小... 查看详情

不得不知的idea实用小技巧(代码片段)

前言人人都说IDEA好,但你知道他的强大之处在哪儿么?今天就来看看,增进日常开发效率的IDEA小技巧。代码编辑复制&粘贴我们知道,最常用的复制粘贴是通过Ctrl+C/V,但如果要针对复制历史进行粘贴... 查看详情

为什么同样的算法,你的程序却一直超时?算法竞赛你不得不知道的小技巧(代码片段)

...同样的算法,你的程序却一直超时?算法竞赛你不得不知道的小技巧  大家好,我是亓官劼(qíguānjié),在【亓官劼】公众号、CSDN、GitHub、B站、华为开发者论坛等平台分享一些技术博文,主要包... 查看详情

那些你不得不知道的网络协议——dhcpdhcp中继vrrp(代码片段)

文章目录前言一、DHCP1.概述2.优点3.工作原理4.配置方法二、DHCP中继1.应用场景2.工作原理3.配置DHCP中继服务器三、VRRP1.概述2.选举机制3.项目详情前言随着网络规模的扩大和网络复杂度的提高,网络配置越来越复杂,计算... 查看详情

软件测试的那些不得不注意特殊字符你都知道吗?

软件测试中不得不注意的特殊字符:“%”符,它在数据库中为通配符,如果客户在搜索框中输入“%”,而程序未对输入的字符进行转义,在系统将解释为一个通配符,列出所有结果,而不是只含... 查看详情

matlab编程的时候有必须要写的东西吗?比如end那些

function后要加end的。一般在一个语句块结束时候要加end。matlab把每个;结束的叫一个语句,但是有的时候几个语句是一个快,比如if后面跟几个语句,像这种情况就要加end了,要不matlab怎么知道if后要执行多少语句。function的定义... 查看详情

记录一个小技巧

新手在刚安装完成MATLAB之后,可能会想要更改自己的默认工作文件夹,有时候设置预设路径后并不起作用,这个时候可以试下下面这个方法。1.右键点击matlab快捷方式,更改起始位置为你想要作为默认的工作文件夹路径,然后点... 查看详情

必看!macos进阶不得不知的实用小技巧

不知道大家对使用苹果电脑的体验如何?您充分利用您的mac了吗?其实macOS上存在着许多快捷方式和技巧可以帮助简化我们的工作流程,提高效率,但是在日常生活中经常被人们忽略或者遗忘。以下是macdown小编整理的一些macOS实... 查看详情

小技巧一些matlab中常用的快捷键使用总结

....Ctrl+t取消注释,并且对多行有效;3.ctrl+i让matlab帮你自动对齐程序;4.使用Ctrl+C可以中止正在运行的程序;5.m脚本文件快速执行:按F5;6.ctrl+ 查看详情

小技巧matlab中进行并行运算仿真加快仿真速度(代码片段)

...xff0c;我们学习了如何统计程序运行的时间。【小技巧】在matlab中如何精确统计一段程序的运行时间_fpga和matlab的博客-CSDN博客_matlab执行一条指令的时间我们先执行如下的程序:clc;clear;closeall;idx=0;tic;forj=1:1:100000000ifmod(j,10... 查看详情

关于网站那些不得不说的小秘密

在互联网高速发展的今天,“网站”这个词频繁地出现在我们的生活中,那么网站是什么呢?其实网站就是向互联网外界展示我们的一种工具。生活中,我们为了向别人展示自己的魅力,所以每天都立志做一个精致的猪猪女孩,... 查看详情

你应该知道的springbootmongodbjpa那些小tip.

官方文档https://docs.spring.io/spring-data/data-mongodb/docs/current/reference/html/index.html查询:***************************************************************************mongoTemple查询和修改@AutowiredMongoT 查看详情

matlab|两个较新版本中的坐标区域小技巧(代码片段)

两天不见甚是想念,有的朋友已经注意到我的某乎账号名称已经由hikari同步为slandarer希望大家看到不要惊讶哈,今天带来俩关于坐标区域的小细节,仅仅是小细节,拿来干啥用就看各位的脑洞了。子图自动最优排... 查看详情