matlab:创建一个符号向量

标签 matlab symbolic-math

我正在尝试使用 matlab 中的符号工具箱创建一个函数。 我在创建符号向量(不是符号变量向量)时遇到了问题。 你们知道一种无需在路径中创建和编辑类似文本的 matlab 函数文件即可执行此操作的方法吗?

  • *创建符号变量后,我使用“matlabFunction”创建并保存函数。

例子:

功能:

function f=test1(x,a) {
   f=x(1)/a(1)+x(2)/a(2);
}

代码:

a = sym('a', [1 2]);
x = sym('x', [1 2]);
% f(x, a) = sym('f(x, a)');
r=x(1)/a(1)+x(2)/a(2);
% f(x,a)=r;
% handle=matlabFunction(f(x,a),'file','test1');
handle=matlabFunction(r,'file','test1');
  • 问题是上面看到的代码创建了一个带有一组输入参数 (x1, x2, a1, a2) 而不是 (x,a) 的函数,我不能改变输入参数的形式,它必须统一。
  • 实际上,我正在尝试编写一个函数来创建指定次数的多项式并将其保存到路径中,以便我可以对其使用“eval”(不支持多值),但它可能会有用了解更多。

最佳答案

尝试:

>> x = sym('x',[1 2])
x =
[ x1, x2]

>> x(1)
ans =
x1

>> x(2)
ans =
x2

>> whos x
  Name      Size            Bytes  Class    Attributes

  x         1x2               112  sym      

这类似于写作:

>> syms a1 a2
>> a = [a1 a2]

编辑:

首先我们从符号变量构建一个表达式:

a = sym('a', [1 2]);
x = sym('x', [1 2]);
expr = x(1)/a(1)+x(2)/a(2);

接下来我们将其转换为常规 MATLAB 函数:

fh = matlabFunction(expr, 'file','test1', 'vars',{a,x});

生成的函数是:

function expr = test1(in1,in2)
    a1 = in1(:,1);
    a2 = in1(:,2);
    x1 = in2(:,1);
    x2 = in2(:,2);
    expr = x1./a1+x2./a2;
end

最初我想用正则表达式来修复生成的函数句柄。这是一个更肮脏的 hack,所以我建议改用以前的方法:

% convert to a function handle as string
fh = matlabFunction(expr);
str = char(fh);

% separate the header from the body of the function handle
T = regexp(char(fh), '@\((.*)\)(.*)', 'tokens', 'once');
[args,body] = deal(T{:});

% extract the name of the unique arguments (without the index number)
args = regexp(args, '(\w+)\d+', 'tokens');
args = unique([args{:}], 'stable');

% convert arguments from: x1 into x(1)
r = sprintf('%s|', args{:}); r = r(1:end-1);
body = regexprep(body, ['(' r ')(\d+)'], '$1($2)');

% build the arguments list of the new function: @(a,b,c)
head = sprintf('%s,', args{:}); head = head(1:end-1);

% put things back together to form a function handle
f = str2func(['@(' head ') ' body])

生成的函数句柄:

>> f
f = 
    @(a,x)x(1)./a(1)+x(2)./a(2)

关于matlab:创建一个符号向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18655454/

相关文章:

matlab - spy 与颜色 Matlab

python - 如何在 SymPy 中扩展矩阵表达式?

python - 为什么 SymPy 1.1.1 在计算这个基本积分时返回错误?

具有用户功能的数据库上的 Matlab parfor

MATLAB:散点图 - 根据位置具有不同形状的点

matlab - 在 matlab 中连接多个混合数字类型值时强制数组保持类型 'double'

matlab - 符号向量的点积

matlab - 在Matlab中将符号分解的输出转换为矩阵表示

matlab - 为什么 MATLAB 无法检查此三角表达式的相等性

matlab - 如何在MATLAB中找到两个凸包之间的最近点?