今天,帮网友解决了一个Matlab通过xlsread函数读取excel表格,并生成特定形式矩阵的问题。需要解决的具体问题为:有网友问了个关于如何使用Matlab读取excel表格,并按照一定的方式来生成一个新的矩阵。大致上,要读取一个excel表格中的三列数据,并用这三列数据中的前两列中的元素值来规定目标矩阵得第几行第几列,第三列数据来表示这矩阵的第几行几列的元素值。
嗯,听起来有点绕,我是很长时间都没反应过来到底要干啥。直到对方给我发来一张图片,我才理解了其中的意思。咱们不去管对方这么做的意义,直接给代码就行了。
数据大概是十行三列的数据,要生成十行十列的矩阵,下面开始正文解答:
下图为对方跟我解释的具体要求:
比如,第一列的第一个数为0,第二列的第一个数为3,第三列的第一个数为15.97。那么,A03=9*15.97/100。依次类推,当然前两列数字都是0-9的自然数。不然,也没法实现。
直接上代码:
clc clear all i=xlsread('data.xlsx','sheet1','A2:A11'); i=xlsread('data.xlsx','sheet1','B2:B11'); i=xlsread('data.xlsx','sheet1','C2:C11'); A=zeros(10,10); i=i+1; j=j+1; for k=1:10 A(i(k),j(k))=9*x(k)/100; end
到此,就实现了对方的要求。接着,对方说需要让A51=A15,类似这个样子,我还以为是转置。最后才发现是下面这句话的意思:
这里实现了将x的第k个值运算赋值给了A的i(k)行j(k)列,对方又需要同时赋值给i(k)列j(k)行。
此外,需要将A矩阵中没赋值,即为0的地方,需要赋值为1e20。
下面是,最终实现的代码:
clc clear all i=xlsread('data.xlsx','sheet1','A2:A11'); i=xlsread('data.xlsx','sheet1','B2:B11'); i=xlsread('data.xlsx','sheet1','C2:C11'); A=zeros(10,10); A(:,:)=1e20; i=i+1; j=j+1; for k=1:10 A(i(k),j(k))=9*x(k)/100; A(j(k),i(k))=9*x(k)/100; end
到此,也算解决了对方的问题,哈。
这里说一下为啥 i=i+1,j=j+1:这是因为对方的i跟j数据中都是0-9的自然数,而Matlab中的元素位置必须用正整数表示,所以就都加了1,即元素范围变成1-10,对应正好可以表示10*10矩阵的元素位置。
最后,希望本文这种思路可以帮到各位。
原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/1515.html