
Matlab
matlab
__sai_
写作是为了对抗时间的流逝和遗忘。
展开
-
MATLAB GUI pcshow()错误:对象为空时,不允许进行属性赋值。请使用下标赋值创建数组元素。
MATLAB GUI pcshow()错误:对象为空时,不允许进行属性赋值。请使用下标赋值创建数组元素。的两种解决办法原创 2023-02-28 14:49:54 · 1091 阅读 · 0 评论 -
【matlab教程】22、将txt文件转化为矩阵数据,输出为excel表格
data=importdata('test.txt');xlswrite('test.xls',data);>> data=importdata('test.txt')data = 1 2 3 4>> xlswrite('test.xls',data);原创 2021-11-26 21:36:05 · 3147 阅读 · 0 评论 -
【matlab矩阵运算】06、matlab索引:位置索引、线性索引和逻辑索引
官网内容:数组索引1 位置索引1.1 (行号,列号)索引要访问矩阵中的某个元素,需依序指定该元素的行号和列号。>> AA = 1 2 3 4 5 6>> A(1,2)ans = 21.2 索引向量>> A([1 2],1)ans = 1 41.3 使用:生成索引向量:大大的妙,大大的方便!>> A=[1 2 3 4 5 6 7 8 9]原创 2021-11-19 17:41:56 · 26046 阅读 · 0 评论 -
【matlab矩阵运算】05、善用reshape之两个矩阵A和B你一行我一行插成新的矩阵D
reshape真是非常妙啊,比如我有一个需求,两个矩阵A和B你一行我一行插成新的矩阵D>> A=[11 12;21 22;31 32;41 42]A = 11 12 21 22 31 32 41 42>> B=[13 14;23 24;33 34;43 44]B = 13 14 23 24 33 34 43 44 >> DD =原创 2021-11-19 13:17:51 · 674 阅读 · 0 评论 -
【matlab矩阵运算】04、两个矩阵对应元素操作:点乘.* 点左除./ 点右除.\ 点幂.^
两个矩阵对应元素相乘:A.*B>> A=[ 1 2 3;4 5 6]A = 1 2 3 4 5 6>> B=[ 1 2 3;4 5 6]B = 1 2 3 4 5 6>> A.*Bans = 1 4 9 16 25 36原创 2021-11-19 13:05:21 · 14136 阅读 · 1 评论 -
【matlab矩阵运算】03、矩阵中间隔取某一行或某一列
比方说隔三个取一个点向量>> A=[ 1 2 3 4 5 6 7 8 9]A = 1 2 3 4 5 6 7 8 9>> A(1:3:end)ans = 1 4 7>> A((1:3:end)+1)ans = 2 5 8>> A((1:3:end)+2)ans = 3 6原创 2021-11-19 13:03:19 · 11074 阅读 · 0 评论 -
【matlab矩阵运算】02、矩阵A中减掉矩阵B所含行或者列
利用setdiff:C=setdiff(A,B,'rows','stable')>> A=[ 7 8 9;4 5 6;1 2 3]A = 7 8 9 4 5 6 1 2 3>> B=[4 5 6]B = 4 5 6%保持原顺序>> C=setdiff(A,B,'rows','stable')C = 7 8 9原创 2021-11-19 12:55:44 · 1817 阅读 · 2 评论 -
【matlab矩阵运算】01、把矩阵展开成向量
1 横向拉成向量>> A=[1 2 3;4 5 6]A = 1 2 3 4 5 6>> B=A'B = 1 4 2 5 3 6>> C=B(:)C = 1 2 3 4 5 62 纵向拉成向量>> A=[1 2 3;4 5 6]A = 1原创 2021-11-19 12:48:16 · 5862 阅读 · 1 评论 -
【matlab教程】21、matlab优化一:将对单个元素的操作转换成矩阵之间的运算
matlab优化的一个方向就是将对单个元素的操作转换成矩阵之间的运算,因为matlab的老本行就是矩阵运算,特别快下面两段代码,第一段都是对元素的操作第二段痛定思痛改成矩阵之间的运算,速度提升很快function [ divided_vertices ,divided_faces,divided_curv,divided_density] = subdivide_mesh( vertices,faces,curv,density ,threshold )%SUBDIVIDE_MESH 将曲面简单细原创 2021-11-18 22:55:41 · 1043 阅读 · 0 评论 -
【matlab技巧】01、命令行窗口上翻指令时首部匹配
有时候想往上翻翻指令,但是历史指令太多了,翻着费劲,怎么办?先输入想要指令的一部分再按⬆matlab就只会在匹配的里面找指令试了下好像不能模糊匹配?如果可以模糊匹配再更新原创 2021-11-14 22:06:58 · 349 阅读 · 0 评论 -
【matlab教程】20、简单网格细分
问题matlab处理网格时,有时需要将网格细分思路参考:https://hanspond.github.io/2018/11/27/%E7%AE%80%E5%8D%95%E7%BD%91%E6%A0%BC%E7%BB%86%E5%88%86%201to4%20Mesh%20Subdivision/index.html将每一个面的每一条边取中点并连接,形成新的三角形,原来一个面细分成四个面原博主的代码只适合封闭曲面的细分,如果曲面是不封闭的,则拓扑结构会乱,如:代码:%% created by原创 2021-11-12 09:56:04 · 4045 阅读 · 0 评论 -
【matlab教程】19、读入obj时,点集有冗余,给点集去重,并保留拓扑结构
问题obj文件是由点和面构成,有时候读入或者处理的时候,点数量是面数量的三倍,如图:点集是面集的三倍,每个面的三个点都存起来了,导致有很多点的冗余,比如图里只有六个点,但是点集却有12个点解决用到unique函数的[C,ia,ic] = unique(A,'rows')>> v=[0 0 0;0 2 0;1 1 0; 0 2 0;0 4 0;0 3 0;1 1 0;0 2 0;0 3 0;1 1 0;0 3 0;2 2 0]v = 0 0 0原创 2021-11-08 21:46:41 · 398 阅读 · 0 评论 -
【matlab教程】18、删除变量
问题在c里是局部变量的变量,在matlab里就变成了全局变量,如:test.mfor m=1:2 n=m;end>> testn = 2这样会引来一些麻烦,如:test.mfor m=1:2 k=zeros(1,m); n(1,:)=k;end>> test赋值具有的非单一 rhs 维度多于非单一下标数出错 test (line 3) n(1,:)=k; >> 解决方法1:clea原创 2021-11-08 11:24:47 · 12719 阅读 · 0 评论 -
【matlab教程】17、求二维数组中的最大值、最小值及它们的位置
求二维数组中的最大值:max(max(A))求最大值的位置:[x y]=find(A==max(max(A)))求二维数组中的最小值:min(min(A))求最小值的位置:[x y]=find(A==min(min(A)))求二维数组中每列的最大值:max(A)求二维数组中每行的最大值:max(A,[],2)>> A=[1 3 6; 4 3 5]A = 1 3 6 4 3 5>> maxA=max(max(A)原创 2021-11-08 10:57:48 · 11969 阅读 · 0 评论 -
【matlab教程】16、曲线上等弧长取点
搜索如何在曲线上等弧长取点时搜到两篇相关论文:《等弧长原则的nurbs曲线离散算法》《三维参数曲线的离散算法》但是我自己的方法够用了,就没有细读适用范围步长较小,在所需步长范围内曲线可以近似为直线如果步长较大,可以使用小步长,得到所有点之后再间隔取点效果图算法思想从起始点开始以当前点为圆心,步长为半径,画圆,圆与曲线的交点就是要求的等弧长点交点设为当前点,重复上一步,循环到结束点代码function [ arch_x ] = x_on_arch( x_start,x_end,p原创 2021-11-04 19:53:43 · 5694 阅读 · 7 评论 -
【matlab教程】15、判断点是否在直线构成的封闭区域中
我的需求是判断几个垂直于xoy面的曲面的某一侧,然后搜到这个函数:inpolygon:判断点是否在直线构成的封闭区域中正好我的曲面与z无关(与xoy面垂直),正好它们可以构成封闭区域,正好我需求的尺度下它们可以近似为直线,matlab牛逼!用法in = inpolygon(xq,yq,xv,yv)[in,on] = inpolygon(xq,yq,xv,yv)xq yq是待判断的点集的坐标>> rng defaultxq = randn(250,1);yq = randn(2原创 2021-11-03 22:42:26 · 4151 阅读 · 0 评论 -
【matlab教程】14、元胞实现三维动态数组
我的需求是一个可以动态改变大小的三维数组,但是matlab要求三维数组每页大小必须相等(类比二维数组每行的列数必须相等),于是需求不能实现,决定用cell来代替1 元胞示例例:我要存五个二维数组:[1 2;3 4]、[1 2 3 ;4 5 6]、[1 2 3 4;5 6 7 8]、[1 2 3 4 5;6 7 8 9 0]、[1;2]>> c=cell(1,5)c = 1×5 cell 数组 [] [] [] [] []>> a原创 2021-11-03 21:08:59 · 1850 阅读 · 0 评论 -
【matlab教程】13、将工作区变量整个或部分保存到文件中以及从文件中加载
有时候前一天好不容易跑出来的变量需要存起来方便第二天接着用整个保存与加载>> save('画出中垂线前所有数据.mat');>> load('画出中垂线前所有数据.mat');加载特定变量load('画出中垂线前所有数据.mat','y')加载和保存部分变量matfile...原创 2021-11-03 09:48:39 · 1741 阅读 · 0 评论 -
【matlab教程】12、已知函数表达式画函数图
1 plotx = 0:pi/100:2*pi;y = sin(x);plot(x,y)2 fplot用红色r画[a,b]区间内的sin(x)后两个参数可以省略fplot(@(x) sin(x), [a b],'r')画一次函数fplot(@(x) (k*x-k*x0+y0),[137 149],'b')原创 2021-11-02 21:53:26 · 4850 阅读 · 0 评论 -
【matlab教程】11、动态数组
横着加:>> a=[];>> for m=1:10 a=[a m]; end>> aa = 1 2 3 4 5 6 7 8 9 10竖着加:>> a=[];>> for m=1:10 a=[a;m]; end>> aa = 1 2 3 4 5 6 7原创 2021-11-02 16:14:28 · 2482 阅读 · 0 评论 -
【matlab教程】10、求两个曲线的交点or解方程组
两者思想是一样的解方程组例如:求解 二元二次方程组(多元高次方程组一样的哈)x^2+3 * y+1=0y^2+4 * x+1=0>> syms x y;>> [x,y]=solve([x^2+3 * y+1==0,y^2+4 * x+1==0]);>> x=vpa(x,4) x = -2.988 -0.2824 1.635 + 3.029i 1.635 - 3.029i >> y=vpa(y,4)原创 2021-11-02 16:11:50 · 6754 阅读 · 0 评论 -
【matlab教程】09、函数已知y值求x,或已知x值求y
数据x、y两组数据,三次拟合得到拟合系数pp = polyfit(x,y,3);已知x值求yy=polyval(p,x);已知y值求x1 min方法有点蠢,但勉强能用。先把x生成线性间距列,再从这些列对应的y值里找最接近已知y值的值,比方说已知y=0,求xx=linspace(1,800,800);y=polyval(p,x);>> min(abs(y-0))ans = 0.7526>> [~,ind]=min(abs(y-0))ind原创 2021-11-01 17:49:30 · 35004 阅读 · 0 评论 -
【matlab教程】08、计算已知表达式的函数的曲线长度
曲线长度计算公式:diff:求一元函数的倒数,用法:diff(3*sin(x)+4*x^2); % 求y=3* sin(x)+4*x ^2的导数power:求幂,用法:power(5,2); %5的2次方int:求积分,用法:F = int(f,a,b); %求f在a,b之间的积分用int算出来之后是个sym类型的数据,要转成具体数值需要:subs:将sym转成分数eval:计算 MATLAB 表达式例如:求sin(x)在[0,pi]的线积分:%求倒数>> y1=diff(s原创 2021-11-01 12:53:27 · 2066 阅读 · 0 评论 -
【matlab问题及原因】散点图映射到灰度图,imshow()出来图是倒的
问题我有一个散点图,想投影到灰度图显示出来,结果imshow()出来图是倒的代码如下:x = linspace(0,3*pi,200);y = cos(x) + rand(1,200); figure;scatter(x,y);pic=zeros(150,200);[x_nml,PSX] = mapminmax(x,1,200) ;x_nml_rnd=round(x_nml);[y_nml,PSX] = mapminmax(y,1,150) ;y_nml_rnd=round(y_n原创 2021-11-01 10:48:16 · 757 阅读 · 0 评论 -
【matlab教程】07、资源共享网站 file exchange
地址:https://ww2.mathworks.cn/matlabcentral/fileexchange/里面可能会有用得上的函数,比如我想找读obj的函数 readobj下载-解压-把函数放入自己的代码文件夹中就行原创 2021-10-28 16:06:36 · 6856 阅读 · 0 评论 -
【matlab教程】06、函数和变量的几种命名法
文章目录1 小驼峰命名法2 大驼峰命名法3 下划线命名法4 匈牙利命名法常用的函数命名法有四种:小驼峰命名法、大驼峰命名法、下划线命名法、匈牙利命名法1 小驼峰命名法当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母,例如:myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。2 大驼峰命名法当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时,所原创 2021-10-28 10:56:05 · 4269 阅读 · 0 评论 -
【matlab教程】05、为自定义函数添加函数说明
函数文件由函数声明行、H1行、在线帮助文本区、编写和修改记录、函数主体等几个部分组成。注意:1.在线帮助文档区必须在H1行下一行,中间不能空行。在线帮助文档区中每行前面都要有注释号%,空行也要有2.H1简要说明该函数的功能3.在线帮助文档区写明输入代表的是什么、输出代表的是什么。如果函数有不同的调用形式则要说明每个调用的方式的功能示例:<pre class="matlab-code">function [ p ] = arch( obj_filename )% arch 求牙齿原创 2021-10-27 21:21:39 · 1229 阅读 · 0 评论 -
【matlab教程】04、矩阵提取满足条件的行或列
1 find案例:X是3*n阶矩阵,是三维坐标,求三维坐标中z>15的点X = 35 1 6 3 32 7 31 9 2 8 28 33 30 5 34 4 36 29>> find(X(:,3)>15)ans = 4 5 6>> Y=X(find(X(:,3)>15),:)Y原创 2021-10-27 20:09:03 · 17292 阅读 · 0 评论 -
【matlab教程】03、矩阵A(1,:)与A(:,1)的区别
A(k,:)第k行A(:,k)第k列>> A=[1,2,3;4,5,6]A = 1 2 3 4 5 6 >> A(1,:)ans = 1 2 3>> A(2,:)ans = 4 5 6>> A(:,1)ans = 1 4>> A(:,2)ans = 2原创 2021-10-27 19:53:59 · 2874 阅读 · 1 评论 -
【matlab教程】02、拼接矩阵或向量
竖着拼用;,横着拼用,示例:1.向量>> a=[1,2,3];>> b=[4,5,6];>> c=[a;b]c = 1 2 3 4 5 6>> d=[a,b]d = 1 2 3 4 5 62.矩阵>> e=[1 2;3 4];>> f=[5 6;7 8];>> g=[e;f]g =原创 2021-10-27 10:11:17 · 15947 阅读 · 0 评论 -
【matlab教程】01、matlab计算代码运行时间的三种方法
目录1 tic toc1.1 用法1.2 特点2 clock+etime2.1 用法2.2 特点3 profile探查函数参考: https://zhuanlan.zhihu.com/p/22762787.1 tic toc1.1 用法tic代码段toc结果:1.2 特点1.可在程序中设置多段tic toc,如:tic代码段1toc tic代码段2toc tic代码段3toc结果:2.每个tic toc不能嵌套,不然toc会就近匹配tic,如:原创 2021-04-08 12:07:40 · 1549 阅读 · 1 评论