matlab对符号函数赋值——subs inline @

matlab里面的符号函数通常指的是用syms创建出来一个变量,然后对这些变量进行的运算。比如:

syms x
y=x.^2

matlab可以比较方便地对一个符号函数求导或者积分,傅里叶变换拉普拉斯变换等。但是经过运算完成后有时候是需要把运算得到的结果转化回矩阵进行后续的操作的,这个时候就需要通过一个矩阵对符号函数赋值从而达到转化出来一个新的矩阵。

subs

这个函数常用的情况下有三个参数,用比较通俗的数学语言来说,就是函数、自变量、一个数字(你要把哪个数字赋值给这个符号函数)。

当然除了数字还可以是字符,如果格式匹配的话,上面只是举个例子。

具体调用的时候就是像下面这样

y1=subs(y,x,10);

这就是将10赋值给符号函数的一种情形,同样也可以用矩阵进行赋值,这样就可以还原出这个符号函数对应的矩阵。

t=0:0.01:10;
y1=subs(y,x,t);

 

inline

这个函数据说是可以使用,不过在matlab 2017a的版本上调用的时候出现了下面的情况

它说未来会删除,但是毕竟现在还是没有删除的嘛,那么就强行调用一下……

结果……结果……

matlab对符号函数赋值——subs inline @_第1张图片

命令行窗口打印出了无数的东西……没错,,一包辣条都吃完了程序居然还没有跑完,就这么一句。所以只好点上面的停止调试按钮……路过的大神万望指点,或者matlab2017以上真的已经不能用了。

@

@不是一个函数,而是matlab里面的一种操作,叫做定义匿名函数。

matlab对符号函数赋值——subs inline @_第2张图片

命令行里面写下这样的函数会看到这样的结果,嗯,这是一个函数的句柄。

调用的时候就像这样

matlab对符号函数赋值——subs inline @_第3张图片

 

这给人一种怎样的感觉?我们平时辛辛苦苦写好的函数通常都要生成.m文件,留着以后使用,毕竟只使用一次的函数略微淡化了函数存在的价值。

但是这个函数呢,这个函数是一个句柄,定义好了之后它是当前变量空间里面的一个变量,可以通过圆括号给它赋值获得回传的结果。然后,当matlab关闭了之后,这样定义好了的一个变量就不再存在了。

这样看起来,平常使用的函数像是家庭保姆,而匿名函数像是临时找来的保洁阿姨。但是匿名函数有它本身的优点,最显而易见的就是方便。其它优点以后补充。。。

然而,,它并不能解决在开头提到的那个问题。比如定义了一个这样的匿名函数

其中y就是上面定义过的y。然后调用匿名函数

matlab对符号函数赋值——subs inline @_第4张图片

这印证了我们对于匿名函数的误会。它内部的函数结构是需要在定义函数的时候当场指定的,里面的x指的就是赤裸裸的后面的x,y里面蕴含的x它是不会管的。所以我们最开始那种思路,先对符号函数进行某些运算,最后再通过匿名函数转换,这种思路是行不通的。

 

所以,最后似乎只有subs可以解决问题,不过匿名函数的潜在功能更强大,只不过在这个问题上并不如subs优越

 

你可能感兴趣的:(matlab对符号函数赋值——subs inline @)