定义符号表达式,首先我们应该创建符号变了,用 syms 声明,如:
syms x y
这样就定义了两个符号变量 x、y
最简单的定义函数的方式就是下面的这个形式:
y = x^2 + sin(x) + cos(x);
那么问题来了,如果我要计算这个函数在 x = 2 时候的值就需要用下面的代码:
sol = subs(y, x, 2);
这个 subs 函数是将旧符号用新符号进行替换。新符号可以是数字,就像上面一样,可以得到结果。
另一种十分相近的形式如下:
syms x y
y(x) = x^2 + sin(x) + cos(x);
sol = y(2);
如上的定义方式,可以直接得出函数值。
在定义了一次 y(x) 之后,后面的函数即使不加 (x) 也可以,如下:
syms y x
y(x) = x^2 + sin(x) + cos(x);
y = diff(y, x, 2);
sol = y(5);
即使一开始没有写 (x),但是后面也可以加上,如下:
% 其实可以不定义 y
syms x
y = x^2 + sin(x) + cos(x);
y(x) = diff(y, x, 2);
sol = y(5);
在后面解微分方程的时候,我们要建立等式,这个时候在定义变量的时候就必须要加 (),如下:
syms y(x)
cond = y(0) == 1;
如上,在解方程的时候,我们没有机会定义函数,要用到 y(0) ,所以定义的时候,必须定义成上面的形式。
但是要注意,一旦定义了函数,就必须带 (x),下面代码会报错
% 以下代码报错
syms y(x)
y = x^2;
sol = y(5);
还有一种定义方法,其实不是严格的符号表达式,但是形式上很像,交匿名函数。
y = @(x) x^2;
sol = y(5);
如上,根本就没有定义符号变量,因为这是一个匿名函数,地位相当于 function 开头的函数文件。
x 是输入的变量,计算结果是输出的变量,所以上面的代码相当于:
sol = test(5);
function y = test(x)
y = x^2;
end
关于函数句柄的知识在这里:
https://limfx.pro/readarticle/72eadcf9-be25-4908-8685-d6497bbc183f/false
因为是函数句柄,所以上面这个表达式不能进行任何运算,比如 y = y + y 都会报错。
本文章使用limfx的vsocde插件快速发布