[問題]如何傳送字串(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