作者incessantgas (我要吃好料)
看板MATLAB
标题[问题]如何传送字串(String)进入function
时间Mon Apr 22 00:22:56 2019
我有两个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吗?谢谢。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 74.77.73.213
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1555863778.A.77B.html
1F:→ name0625: B的档名是Amat吗? 04/23 00:04
2F:→ incessantgas: 是的 04/24 04:13
3F:→ incessantgas: sorry忘记说清楚~ 04/24 04:14
4F:→ name0625: 那我不太懂你的问题在哪耶,function都设好了,你是想 04/24 09:46
5F:→ name0625: 为什麽阿? 04/24 09:46
6F:→ name0625: 问什麽啊? 04/24 09:46
7F:→ incessantgas: 我的问题出在A.m档案里指定的x传入Amax.m(也就是B.m 04/25 00:37
8F:→ incessantgas: )之後没办法被当成矩阵里面的element. 04/25 00:37
9F:→ incessantgas: 谢谢 04/25 00:38
10F:推 profyang: 看不懂你问题 都写好了传进去不就好了 你可不可以贴一下 04/25 08:48
11F:→ profyang: error code? 04/25 08:48
12F:推 profyang: 你x传进B之後写a=x(1);b=x(2);b=x(3);之类的就好了啊? 04/25 08:50
13F:→ incessantgas: 在B.m这个程序当中会先读入data,才会有变数a,b and 04/25 11:08
14F:→ incessantgas: c,然後才可以做矩阵运算X1。也就是说在A.m里面没 04/25 11:08
15F:→ incessantgas: 有任何data,A.m只负责指定需要进入矩阵运算的变数 04/25 11:08
16F:→ incessantgas: 。我要做的事情其实是在A.m当中指定多个矩阵,例如[ 04/25 11:08
17F:→ incessantgas: a c]或是[a b c d e],然後进入B.m去做运算然後得 04/25 11:08
18F:→ incessantgas: 到结果输出report。在A.m中指定x=[a b c]会得到错误 04/25 11:08
19F:→ incessantgas: 讯息 "Cannot find an exact (case-sensitive) matc 04/25 11:08
20F:→ incessantgas: h for 'a'",若写成x='a b c'则不会有错误讯息,但 04/25 11:08
21F:→ incessantgas: 是这样一来x就变成char,传入B.m还是char而不是变 04/25 11:08
22F:→ incessantgas: 数,这样就无法做运算了。 04/25 11:08
23F:→ incessantgas: 希望这次有把问题讲清楚QQ 04/25 11:10
24F:→ name0625: 好像看懂你想干嘛了,你是想用x指定xls的某些数值运算 04/25 19:24
25F:→ name0625: ,再存成y指定的栏位这样? 04/25 19:24
26F:→ name0625: 用eval试试? 04/25 19:24
27F:推 profyang: 还是看不懂 所以你直接把x当input进去会有什麽问题?你B 04/25 22:36
28F:→ profyang: 里面不就是用x去做矩阵运算? 04/25 22:36
29F:→ profyang: 你的a b c是在A.m中算出或填入的一些已知矩阵? 04/25 22:37
30F:→ profyang: 那就要看你在B.m中的x大矩阵到底跟a b c这些小矩阵什麽 04/25 22:38
31F:→ profyang: 关系吧 如果维度正确才是像你这样直接串起来 04/25 22:39
32F:推 profyang: 另外 除非真的非不得已不然还是不要用eval 正常来说没有 04/25 22:42
33F:→ profyang: 非得要用eval的情况 04/25 22:43
34F:→ name0625: 因为他的B档案才读取xls抓数据,看起来是这样 04/26 00:14
35F:→ name0625: 我猜啦 04/26 00:15
36F:→ name0625: 不过应该可以xls读取完处理成cell吧? 04/26 00:20
37F:→ name0625: 版本新一点还有readcell可以用 04/26 00:22
39F:→ name0625: html 04/26 00:23
40F:→ name0625: 或是readmatrix 04/26 00:24
41F:→ name0625: 这样就可以改成指定index避免eval了 04/26 00:25
42F:→ incessantgas: 先谢过p大和n大热心指教~~ 04/26 03:18
43F:→ incessantgas: @p大: a, b, c要在B.m当中才会从excel读进去。基本 04/26 03:19
44F:→ incessantgas: 上A.m只是指定矩阵x要包含a,b,c而已。A.m本身没有 04/26 03:19
45F:→ incessantgas: 任何其他资料或是变数。 04/26 03:19
46F:→ incessantgas: @n大:readcell也许是个好主意,只是不知道why我的 04/26 03:20
47F:→ incessantgas: matlab没有这功能(R2018a)。另外可否详述一下所谓 04/26 03:20
48F:→ incessantgas: "xls读取完处理成cell"是甚麽意思?是指储存成cell 04/26 03:22
49F:→ incessantgas: 型态吗? 04/26 03:22
50F:推 profyang: 通常这样我会从B中定义x和a,b,c的关系 因为没必要从外部 04/26 07:55
51F:→ profyang: 指定他们的关系 在B.m中搞定就好 不过你如果硬要的话不 04/26 07:56
52F:→ profyang: 是有function handle这种东西吗? f=@(a,b,c) [a,b,c] 04/26 07:56
53F:→ profyang: 传f进去B.m 然後在B.m中就x=f(a,b,c)就好了 04/26 07:56
54F:→ profyang: 另外2019a才有readcell 在之前版本用[~,~,raw]=xlsread 04/26 07:57
55F:→ name0625: 对啊,像profyang那样的用法就存成cell了,可以避免eva 04/26 10:05
56F:→ name0625: l,不然eval用下去,隔一阵子很容易看不懂当初在干嘛 04/26 10:05
57F:→ incessantgas: 小弟不才,今天才知道有handle这招,用handle我的 04/26 23:54
58F:→ incessantgas: 问题就解决了!!谢谢p大和n大的热心解惑 04/26 23:54