[问题]如何传送字串(String)进入function

楼主: incessantgas (我要吃好料)   2019-04-22 00:22:56
我有两个m file,A.m 和 B.m。A要用来给参数,B是function.
A.m
x=[a b c];
y={'desc1' 'desc2' 'desc3'};
Amax(x,y);
B.m
function Amat(x,y)
dataset = xlsread('sale.xls');
x1=x'*x;
xlswrite('result.xls',y);
end
说明:
1. B file 会读入data,总共有10个变量,但我们只要取用a, b and c 3个即可。
2. A file 指定x(matrix with a, b and c)和y(char)做为变量的名称(for export)。
请问一下有人知道要如何在A给出x matrix传送到B吗?谢谢。
作者: name0625 (lawpy)   2019-04-23 00:04:00
B的档名是Amat吗?
楼主: incessantgas (我要吃好料)   2019-04-24 04:13:00
是的sorry忘记说清楚~
作者: name0625 (lawpy)   2019-04-24 09:46:00
那我不太懂你的问题在哪耶,function都设好了,你是想为什么阿?问什么啊?
楼主: incessantgas (我要吃好料)   2019-04-25 00:37:00
我的问题出在A.m档案里指定的x传入Amax.m(也就是B.m)之后没办法被当成矩阵里面的element.谢谢
作者: profyang (prof)   2019-04-25 08:48:00
看不懂你问题 都写好了传进去不就好了 你可不可以贴一下error code?你x传进B之后写a=x(1);b=x(2);b=x(3);之类的就好了啊?
楼主: incessantgas (我要吃好料)   2019-04-25 11:08:00
在B.m这个程序当中会先读入data,才会有变量a,b andc,然后才可以做矩阵运算X1。也就是说在A.m里面没有任何data,A.m只负责指定需要进入矩阵运算的变量。我要做的事情其实是在A.m当中指定多个矩阵,例如[a c]或是[a b c d e],然后进入B.m去做运算然后得到结果输出report。在A.m中指定x=[a b c]会得到错误讯息 "Cannot find an exact (case-sensitive) match for 'a'",若写成x='a b c'则不会有错误讯息,但是这样一来x就变成char,传入B.m还是char而不是变量,这样就无法做运算了。希望这次有把问题讲清楚QQ
作者: name0625 (lawpy)   2019-04-25 19:24:00
好像看懂你想干嘛了,你是想用x指定xls的某些数值运算,再存成y指定的字段这样?用eval试试?
作者: profyang (prof)   2019-04-25 22:36:00
还是看不懂 所以你直接把x当input进去会有什么问题?你B里面不就是用x去做矩阵运算?你的a b c是在A.m中算出或填入的一些已知矩阵?那就要看你在B.m中的x大矩阵到底跟a b c这些小矩阵什么关系吧 如果维度正确才是像你这样直接串起来另外 除非真的非不得已不然还是不要用eval 正常来说没有非得要用eval的情况
作者: name0625 (lawpy)   2019-04-26 00:14:00
因为他的B档案才读取xls抓数据,看起来是这样我猜啦不过应该可以xls读取完处理成cell吧?版本新一点还有readcell可以用https://www.mathworks.com/help/matlab/ref/readcell.html或是readmatrix这样就可以改成指定index避免eval了
楼主: incessantgas (我要吃好料)   2019-04-26 03:18:00
先谢过p大和n大热心指教~~@p大: a, b, c要在B.m当中才会从excel读进去。基本上A.m只是指定矩阵x要包含a,b,c而已。A.m本身没有任何其他资料或是变量。@n大:readcell也许是个好主意,只是不知道why我的matlab没有这功能(R2018a)。另外可否详述一下所谓"xls读取完处理成cell"是什么意思?是指储存成cell型态吗?
作者: profyang (prof)   2019-04-26 07:55:00
通常这样我会从B中定义x和a,b,c的关系 因为没必要从外部指定他们的关系 在B.m中搞定就好 不过你如果硬要的话不是有function handle这种东西吗? [email protected](a,b,c) [a,b,c]传f进去B.m 然后在B.m中就x=f(a,b,c)就好了另外2019a才有readcell 在之前版本用[~,~,raw]=xlsread
作者: name0625 (lawpy)   2019-04-26 10:05:00
对啊,像profyang那样的用法就存成cell了,可以避免eval,不然eval用下去,隔一阵子很容易看不懂当初在干嘛
楼主: incessantgas (我要吃好料)   2019-04-26 23:54:00
小弟不才,今天才知道有handle这招,用handle我的问题就解决了!!谢谢p大和n大的热心解惑

Links booklink

Contact Us: admin [ a t ] ucptt.com