如何将符号变量的矩阵和向量转化为一个匿名函数(matlabFunction) ?
12个视图(30天)
显示旧的评论
假设我有以下几点:
信谊x y
Vec_sym = [1 / x, x / (x ^ 2 + y ^ 2), y / x);% 1 x3符号向量
Matrix_sym = [1 / x, x / (x ^ 2 + y ^ 2), y / x;
2 / x, x / (2 * x ^ 2 + y ^ 2), y / (6 * x);
9 / x, 4 * x / (x ^ 2 + y ^ 2 * 2), 2 * y / x];% 3 x3符号矩阵
Vec_func = matlabFunction (Vec_sym);%转换成matlabFunction
Matrix_func = matlabFunction (Matrix_sym);%转换成matlabFunction
“Vec_func”或“Matrix_func”的输出总是1 x1 matlabFunction,我不希望。我怎么能修改这个代码通过输入以下,我得到:
Vec_func (1, 1) = (1, 0.5, 1);
Matrix_func (1, - 1) = [1, 0.5, 1;
2、0.333、0.167;
9日,1.333,2]%请忽略小数点后的精度
我想把这个函数在ode求解器,ans使用“潜艇”和其他符号运营商花费大量的时间,这是痛苦的。注意变量x, y ode代码中更改/更新,以上只是一个简化的例子,我有一个在真实场景,说10 x1向量和5 x5矩阵。提前谢谢,作为“matlabFunctions”的文档没有帮助我。
接受的答案
史蒂文的主
2018年2月2日
你混淆两种不同的大小。的输出
matlabFunction
是一个函数处理。种基本函数处理数组是不允许的。但事实上Vec_func和Matrix_func标量函数处理
无关紧要的
在这种情况下。你不感兴趣的大小
函数处理
的大小,你感兴趣
数组函数句柄返回时调用
。
那
可以种基本,为您的特定函数处理这些数组是种基本。
信谊x y
Vec_sym = [1 / x, x / (x ^ 2 + y ^ 2), y / x);% 1 x3符号向量
Matrix_sym = [1 / x, x / (x ^ 2 + y ^ 2), y / x;
2 / x, x / (2 * x ^ 2 + y ^ 2), y / (6 * x);
9 / x, 4 * x / (x ^ 2 + y ^ 2 * 2), 2 * y / x];% 3 x3符号矩阵
Vec_func = matlabFunction (Vec_sym);%转换成matlabFunction
Matrix_func = matlabFunction (Matrix_sym);%转换成matlabFunction
szVec =大小(Vec_func)
szMat =大小(Matrix_func)
这段代码显示(在
格式紧凑
,摆脱一些空白行):
szVec =
1
szMat =
1
当你
评估
Vec_func Matrix_func ?
> > Vec_func (1, 1)
ans =
1.0000 0.5000 1.0000
> > Matrix_func (1, 1)
ans =
1.0000 0.5000 1.0000
2.0000 0.3333 0.1667
9.0000 1.3333 2.0000
更多的答案(2)
Torsten
2017年5月23日
我想知道你为什么不只是定义
Vec_func = @ (x, y) [1 / x, x / (x ^ 2 + y ^ 2), y / x);
Matrix_func = @ (x, y) [1 / x, x / (x ^ 2 + y ^ 2), y / x;2 / x, x / (2 * x ^ 2 + y ^ 2), y / (6 * x);9 / x, 4 * x / (x ^ 2 + y ^ 2 * 2), 2 * y / x];
我认为“matlabFunction”的问题是当x和y是向量,而不是标量。
然后你的(3 x3)对象变成3 x (3 * N)对象- MATLAB不想处理。
最好的祝愿
Torsten。