你如何创建一个符号函数,它接受一个向量输入?

96(30天)
我想创建一个符号函数1 x3向量的输入,并返回3 *向量。超级简单的想法,想不出来。我得到错误的“错误使用symfun / subsref(第141行)象征性功能预计3输入和收到1。”
=符号(“一个”3 [1]);
f (a) = 3 *;
一个= (1 2 3);
b =双(f (A))

接受的答案

卡兰吉尔
卡兰吉尔 2016年10月20日
你几乎是正确的!事实上,你只需要 删除 一行代码。不申报”“1 x3向量因为默认“a”可以是任何东西。删除这条线,宣布“f (a)”:
信谊f (a)
f (a) = 3 *;
一个= (1 2 3);
b =双(f (A))
b =
3 6 9
至少,我认为这是你想要做什么。
3评论

登录置评。

更多的答案(2)

沃尔特·罗伯森
沃尔特·罗伯森 2016年10月19日
=符号(“一个”3 [1]);
创建 一个 作为一个向量的三个符号名称
f (a) = 3 *;
你通过在向量函数定义的三个符号名称,但是你把它作为如果你通过了一个变量。
信谊f (a)
f (a) = 3 *;
双(f (A))
4评论
沃尔特·罗伯森
沃尔特·罗伯森 2016年10月21日
我的调查显示
如上所述f (variable1的操作,)=公式
是处理
如上所述f = symfun(公式(variable1的操作,])
在这里,公式是 执行 和变量 执行 。每个部分的执行是一个象征性的表达(类符号)。
每个符号都有属性,其中一个是一个字符串。纯符号变量的字符串变量的名称。字符串表达式和函数,是一种特殊形式,这是一个临时变量的名字存在于MuPAD引擎和已分配表达式。
现在,subsref()类符号被视为标准索引,所以如果你有一个符号 f 在一方面, f () 总是被视为一个索引。如果你有一个符号,某种程度上定义为一个MuPAD proc,和你想调用一个函数是指,您需要使用函数宏指令(),就像我上面显示。
symfun略有不同。symfun存储引用的构造函数公式,并存储的变量名称列表的参数,并返回一个symfun对象。subsref()类symfun检查()的索引方式,当它发现,抓住这个公式,记得潜艇()所提供的值变量,f(值)- >潜艇(stored_formula (f), stored_variables (f),值)。标准的评价发生后潜艇,所以持有水平()可能会迷路:
> >符号(“持有(持有(持有(b))))
持有(持有(b))
> >潜艇(信谊(“持有(持有(持有(b)))),“b”,9)
(9)
symfun subsref()类
函数宏指令(symengine stored_formula (f),值)
函数宏指令(symenginefp::适用的stored_formula (f),值)
函数宏指令(symengine [“x - >”stored_formula (f)]”,值)
目前我不确定为什么这似乎对我如此重要,但它很难使用symfun()来创建有用的延迟评价。

登录置评。


丹尼尔·科莫
丹尼尔·科莫 2019年2月5日
编辑:丹尼尔·科莫 2019年2月6日
有一个干净的方法做同样的事情但是等功能呢
x =符号(“x”[1,2]);
Ffun (x) = (x (1) ^ 2 + (2) ^ 2 - 1;sin(π* x (1) / 2) + x (2) ^ 3];
这里的问题是,Ffun希望两个变量和不接受一个向量
x0 = (1 - 2);
我发现的唯一方法就是潜艇的使用功能,但当你需要良好的等待时间变得不切实际。
潜艇(Ffun x, x0);
8的评论
沃尔特·罗伯森
沃尔特·罗伯森 2019年2月7日
调用matlabFunction ()“var”选项。通过一系列细胞“var”选项。细胞内的数组,每个变量的名字你提到在一个向量将捆绑在一起成一个单一的输入参数与其他名字相同的向量的变量名。如果名称是一个行向量的向量MATLAB将vectorize基于列相应的输入,这是适合使用的优化功能,比如fminsearch和使用fsolve ()。如果名称是一个列向量的向量然后MATLAB将vectorize基于相应的行,这是适合使用ode功能衍生品的论点。如果你通过一个二维数组的名字,然后用MATLAB不会vectorize和将使用线性索引退出输入参数的适当的位置。
看看这是如何工作的,比较
x =符号(“x”2 [3]);
matlabFunction (x * x ',“var”,{x})
matlabFunction (x * x ',“var”{重塑(x 1 [])})
matlabFunction (x * x ',“var”,{重塑(x, [], 1)})

登录置评。

社区寻宝

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

开始狩猎!