>> int('x')
未定义与 'char' 类型的输入参数相对应的函数 'int'。
% int的这种语法在较新的版本中被删除了(在2013b时会报错,提示函数即将删除),
可以在被积表达式外面加个sym,强制调用符号数学工具箱中的int函数
>> int(sym('x'))
ans =
x^2/2
>> syms a t % 定义符号变量
>> g = a * cos(pi * t);
>> int(sym(g))
ans =
(a*sin(pi*t))/pi
>> g = sin(n * t);
>> int(sym(g)) % 默认t为变量
ans =
-cos(n*t)/n
>> int(sym(g), n) % 选n为变量
ans =
-cos(n*t)/t
>>
>> syms n
>> g = 'sin(n * t)'; % 字符向量
>> int(sym(g), n)
警告: Support of character vectors will be removed in a future release.
Character vectors can be used only for variable names and numbers.
Instead, to create symbolic
expressions first create symbolic variables using 'syms'.
To evaluate character vectors
and strings representing symbolic expressions, use 'str2sym'.
% 字符向量的支持将在未来版本中删除
> In sym>convertExpression (line 1581)
In sym>convertChar (line 1486)
In sym>tomupad (line 1236)
In sym (line 215)
ans =
-cos(n*t)/t
>> syms n
>> g = sin(n * t); % 修改之后即可
>> int(sym(g), n)
ans =
-cos(n*t)/t
>> syms b x
>> f = b ^ x;
>> F = int(sym(f))
F =
b^x/log(b)
>> subs(F, {
b, x}, {
2, 4})
ans =
16/log(2)
% 通过调用 subs 命令,使用给定的值我们可以计算表达式的数值。
要在一个命令中用数代替符号变量,
我们要把被代替的符号列表和用来代替的数值列表都用花括号括起来
>> format short
>> 16/log(2)
ans =
23.0831
>> syms x
>> f = x ^ 5 * cos(9 * x);
>> int(sym(f))
ans =
(40*cos(9*x))/177147 + (40*x*sin(9*x))/19683 - (20*x^2*cos(9*x))/2187 + (5*x^4*cos(9*x))/81 - (20*x^3*sin(9*x))/729 + (x^5*sin(9*x))/9
>> F = int(sym(f));
>> pretty(F)
% 使用“pretty”命令,让matlab以比较适合人阅读的格式显示答案
2 4 3
cos(9 x) 40 x sin(9 x) 40 x cos(9 x) 20 x cos(9 x) 5 x sin(9 x) 20
----------- + ------------- - -------------- + ------------- - --------------
177147 19683 2187 81 729
5
x sin(9 x)
+ -----------
9
>> f = x ^ 2 * cos(x);
>> int(sym(f), -6, 6)
ans =
24*cos(6) + 68*sin(6)
>> double(24*cos(6) + 68*sin(6)) % 计算具体数据
ans =
4.0438
>> syms x
>> f = exp ^ (-x ^ 2) * sin(x); % 格式错误
错误使用 exp
输入参数的数目不足。
>> f = exp(-x ^ 2) * sin(x);
>> int(sym(f), 0, inf)
ans =
-(pi^(1/2)*erf(1i/2)*exp(-1/4)*1i)/2
>> double(-(pi^(1/2)*erf(1i/2)*exp(-1/4)*1i)/2)
错误使用 erf
输入必须为实数完全数。
% erf为误差函数,得到求解的表达式,是一个存在误差的表达式
>> a = int(sym(f), 0, inf)
a =
-(pi^(1/2)*erf(1i/2)*exp(-1/4)*1i)/2
>> double(a)
ans =
0.4244
>> syms x
>> f = pi * (exp(-x)) ^ 2;
>> a = int(sym(f), 1, 2)
a =
(pi*exp(-4)*(exp(2) - 1))/2
>> double(a)
ans =
0.1838
>> syms x
>> f = sin(x) / x;
>> a = int(sym(f), -20, 20)
a =
2*sinint(20)
>> double(a)
ans =
3.0965
>> c = int(sym(f ^ 2), -20, 20)
c =
2*sinint(40) - sin(20)^2/10
>> double(c)
ans =
3.0906
>> b = int(sym(f ^ 2), -inf, inf)
b =
pi
>> d = int(sym(f), -inf, inf)
d =
pi
>> syms x y z
>> f = x * y ^ 2 * z ^ 5;
>> F = int(sym(int(sym(int(sym(f), x), y), z)))
错误使用 sym (line 240)
Second argument must be assumption or size vector.
>> F = int(int(int(sym(f),x), y), z)
F =
(x^2*y^3*z^6)/36
>> f = x ^ 2 * y;
>> F = int(int(sym(f), x, 2, 4), y, 1, 2)
F =
28
>> syms r a h
>> v = int(int(int(sym(r), 0, 3.5), 0, 2* pi), 0, 5)
v =
(245*pi)/4
>> double(v)
ans =
192.4226
>>
>> x = linspace(0, 2, 10);
>> y = x.^2;
>> f = trapz(x, y)
f =
2.6831
>> re = abs((8 / 3 - f) / (8 / 3)) % re为相对误差,relatice error
re =
0.0062
>> x = linspace(0, 2, 20);
>> y = x.^2;
>> f = trapz(x, y)
f =
2.6704
>> re = abs((8 / 3 - f) / (8 / 3))
re =
0.0014
>>
>> syms x
>> y = exp(-x ^ 2);
>> a = int(sym(y), -2, 2) % 积分精确值
a =
pi^(1/2)*erf(2)
>> double(a)
ans =
1.7642
>> x = linspace(-2, 2, 200);
>> y = exp(-x.^2);
>> a1 = trapz(x, y) % 梯形区域积分值
a1 =
1.7642 % double长度不够,a和a1显示数值一样
>> format long % 改用format long
>> a = pi^(1/2)*erf(2)
a =
1.764162781524843
>> a1 = trapz(x, y)
a1 =
1.764157848476206
>> re = abs((a - a1) / a) % 相对误差
re =
2.796254794950795e-06
>> clear x y % 删除变量x, y
>> syms x
>> y = exp(-x ^ 2);
>> a2 = int(sym(y), -inf, inf)
a2 =
pi^(1/2)
>> format long
>> a2 = pi^(1/2)
a2 =
1.772453850905516
>> syms x
>> y = exp(-x ^ 2);
>> a = quad(y, 0, 1 / 8)
错误使用 fcnchk (line 106)
如果 FUN 为 MATLAB 对象,则它必须具有 feval 方法。
出错 quad (line 57)
f = fcnchk(funfcn);
>> a1 = quad(sym(y), 0, 1 / 8)
错误使用 fcnchk (line 106)
如果 FUN 为 MATLAB 对象,则它必须具有 feval 方法。
出错 quad (line 57)
f = fcnchk(funfcn);
后来百度到quad是数值积分函数,要求第一个参数为函数句柄,而不是符号变量,进行了如下尝试
>> f = @(x)(exp(-x ^ 2))
f =
包含以下值的 function_handle:
@(x)(exp(-x^2))
>> a = quad(f, 0, 1 / 8)
错误使用 ^
一个参数必须为方阵,另一个必须为标量。请使用 POWER (.^) 执行按元素求幂。
出错 @(x)(exp(-x^2))
出错 quad (line 67)
y = f(x, varargin{
:});
>> f = @(x)(exp(-x.^2)) % 修改成点幂后不报错,但答案不一致
f =
包含以下值的 function_handle:
@(x)(exp(-x.^2))
>> a = quad(f, 0, 1 / 8)
a =
0.124351998772160
>> y = exp(-x ^ 2); % 尝试另一种方法,答案同上
>> g = matlabFunction(y)
g =
包含以下值的 function_handle:
@(x)exp(-x.^2)
>> a = quad(g, 0, 1 / 8)
a =
0.124351998772160