Task 14 :积分微分

INT命令

在这里插入图片描述

>> 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
>> 

Task 14 :积分微分_第1张图片

数值积分

在这里插入图片描述
Task 14 :积分微分_第2张图片

>> 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
>> 

Task 14 :积分微分_第3张图片

>> 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

正交积分

Task 14 :积分微分_第4张图片
Task 14 :积分微分_第5张图片
Task 14 :积分微分_第6张图片
教材答案如上,但因版本不一,调试多次仍有错误

>> 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

你可能感兴趣的:(Task 14 :积分微分)