Matlab - 定义数学函数



用syms或@(x(定义函数有什么区别?

例如:

syms f(t)
f(t) = 0.5*cos(280*pi * t) + 0.5 * sin(260*pi * t) + 0.5 * cos(300*pi * t); 

f = @ (t) 0.5*cos(280*pi * t) + 0.5 * sin(260*pi * t) + 0.5 * cos(300*pi * t); 

谢谢

符号函数

syms f(t)
f(t) = 0.5*cos(280*pi * t) + 0.5 * sin(260*pi * t) + 0.5 * cos(300*pi * t);

定义符号函数。这意味着使用该函数时不会损失精度。结果总是准确的

>> f(1)
ans =
1

此外,还可以对函数应用符号操作。例如,您可以计算其导数函数以及其他操作:

>> g = diff(f)
g(t) =
130*pi*cos(260*pi*t) - 140*pi*sin(280*pi*t) - 150*pi*sin(300*pi*t)

这是一个新的符号函数,可以正常使用:

>> g(1/260)
ans =
140*pi*sin(pi/13) - 130*pi + 150*pi*sin((2*pi)/13)

再次注意结果是如何准确的。如果要获取其数值(必然是近似值(,可以转换为double浮点表示形式:

>> double(g(1/260))
ans =
-84.154882885760415

或者,如果您需要更多小数,可以使用vpa

>> vpa(g(1/260), 50)
ans =
-84.154882885760413712114778738680201384788201830179

使用符号函数会产生效率成本:代码通常比标准函数慢。此外,它们仅限于数学运算,而标准函数可以做许多其他事情,例如处理文本或文件。

标准、数值函数

f = @ (t) 0.5*cos(280*pi * t) + 0.5 * sin(260*pi * t) + 0.5 * cos(300*pi * t);

定义一个标准的数值函数。更具体地说,它定义一个匿名函数,然后将f定义为该函数的句柄,结果f可用作函数名称。

您"只能"使用此函数来传递输入并获取输出作为结果。此外,使用默认的浮点double数据类型,您可能会遇到一些数值错误。例如,f(1)给出

>> f(1)
ans =
0.999999999999963

而不是确切的结果1.

与符号情况相反,Matlab 不知道如何计算其导数,因此在这种情况下,您必须以数字方式(使用有限差分(进行计算,这是一种近似值(因为使用有限差分和因为使用浮点值(:

>> t0 = 1/260;
>> h = 1e-9;
>> (f(t0+h)-f(t0))/h
ans =
-84.154498258826038

与符号函数相比,标准函数更快(并且不需要符号工具箱(,并且如上所述,不限于数学运算。

相关内容

  • 没有找到相关文章

最新更新