如何将符号变量的矩阵和向量转化为一个匿名函数(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”的文档没有帮助我。
1评论
Torsten
Torsten 2017年5月23日
使用“文件”选项的“matlabFunction”可能会有所帮助。
最好的祝愿
Torsten。

登录置评。

接受的答案

史蒂文的主
史蒂文的主 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
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。
2的评论
Punnag Chatterjee
Punnag Chatterjee 2018年2月2日
嗨,矩阵提供的问题就是一个例子。我处理的是一种更大的矩阵的大小,说,250 x3,我更新的ode求解器进行求解。有办法自动化这个过程写作的表达式如下所示,建议Torsten ?
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];

登录置评。


社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!