【实验】实验五 MATLAB高等数学运算20211125

本文仅供学习和复习使用。 题目源于岑冠军老师,答案参考自相关课件,另外借以markdown排版成此文。由于本人水平有限且时间不够充裕,故难免有错漏或不当之处,如有建议或批评还请联系[email protected],谢谢!

目录

  • 实验五 MATLAB高等数学运算
    • 一、实验目的
    • 二、实验原理
    • 三、实验内容
    • 函数文件

实验五 MATLAB高等数学运算

@Copyright 华南农业大学 数学与信息学院 数学系 主讲与制作:岑冠军


一、实验目的

  • 掌握基于MATLAB的线性大数及矩阵相关计算;
  • 熟悉MATLAB符号计算与数值计算相关函数;
  • 掌握符号极限、导数、积分、常微分方程的解,以及数值导数、积分和常微分方程的解;
  • 掌握非线性方程及方程组的符号解与数值解。

二、实验原理

  • 线性代数计算:\,null,rref,rank,det,eig,inv等相关函数;
  • 符号计算:sym,syms,limit,diff,int,dsolve,solve;
  • 数值计算:diff,integeral,integeral2,ode45,fzero,fsolve。

三、实验内容

  1. 求方程组 [ 2 − 1 − 1 1 1 1 − 2 1 4 − 6 2 − 2 3 6 − 9 7 ] [ x 1 x 2 x 3 x 4 ] = [ 2 4 4 9 ] \begin{bmatrix} 2 & -1 & -1 & 1\\ 1 & 1 & -2 & 1\\ 4 & -6 & 2 & -2\\ 3 & 6 & -9 & 7 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ x_3 \\ x_4 \end{bmatrix} = \begin{bmatrix} 2 \\ 4 \\ 4 \\ 9 \end{bmatrix} 2143116612291127x1x2x3x4=2449的解。
format rat % 将数据显示格式定为分数型
% A1 x = b
A1 = [2, -1, -1, 1; 1, 1, -2, 1; 4, -6, 2, -2; 3, 6, -9, 7];
b = [2; 4; 4; 9];
fprintf("系数矩阵的秩为 %d\n增广矩阵的秩为 %d", rank(A1), rank([A1 b]));
% 发现解存在,且有无穷多解,故需计算齐次线性方程组的基础解系和特解
% 关于 null() 请参考 https://ww2.mathworks.cn/help/matlab/ref/null.html
null(A1, 'r') % 返回零空间的有理基,即计算齐次方程的基础解系
A1 \ b % 计算特解(提示有误差,但非常小,这里可以不理会)
% rref([A1 b]) % 尝试化为行阶梯型验证特解是否可靠
clearvars
  1. 求下列极限:
    (1) lim ⁡ n → ∞ ( n + n − n ) \lim_{n \to \infty} (\sqrt{n + \sqrt{n}} - \sqrt{n}) limn(n+n n )
    (2) lim ⁡ x → ∞ ( 1 − 2 x ) 3 x \lim_{x \to \infty} (1 - \frac{2}{x})^{3x} limx(1x2)3x
    (3) lim ⁡ x → 0 sin ⁡ ( x ) x 3 + 3 x \lim_{x \to 0} \frac{\sin(x)}{x^3 + 3x} limx0x3+3xsin(x)
syms n x; % 定义符号变量
% (1)
% limit() 的第一个参数是一个含符号变量的表达式(注意这个式子不同于等式)
% 关于 limit() 请参考 https://ww2.mathworks.cn/help/matlab/ref/limit.html
limit(sqrt(n + sqrt(n)) - sqrt(n), n, inf)
% (2)
limit((1-2/x)^(3*x), x, inf)
% (3)
limit(sin(x) / (x^3 + 3*x), x, 0)
clearvars
  1. 求下列导数:
    (1) d d x x 10 + 1 0 x + log ⁡ x ( 10 ) \frac{d}{dx} x^{10} + 10^x + \log_x(10) dxdx10+10x+logx(10)
    (2) d 2 d x 2 ln ⁡ ( 1 + x ) \frac{d^2}{dx^2} \ln(1+x) dx2d2ln(1+x) x = 1 x=1 x=1时的值。
% (1)
syms x
% 关于 diff() 请参考 https://ww2.mathworks.cn/help/matlab/ref/diff.html
% 换底公式 \log_x(a) = \frac{1}{\log_a(x)}
diff(x^10 + 10^x + 1/log10(x))
% (2)
syms f(x) % 定义随 x 变化的符号变量 f ,以便后续求 x=1 时的值
f(x) = log(1+x);
f2 = diff(f, x, 2); % 二阶导
f2(1) % 求当 x=1 时的值
clearvars
  1. 求下列积分的符号解:
    (1) ∫ cos ⁡ ( 2 x ) cos ⁡ ( 3 x ) d x \int \cos(2x) \cos(3x) dx cos(2x)cos(3x)dx
    (2) ∫ − a a ( x 2 arctan ⁡ x x 4 + 1 − sin ⁡ ( x 2 ) 2 ) d x \int_{-a}^{a} \left(\frac{x^2 \arctan x}{x^4 + 1} - \sin(\frac{x}{2})^2\right) dx aa(x4+1x2arctanxsin(2x)2)dx
    (3) ∫ 1 4 [ ∫ y 2 ( x 2 + y 2 ) d x ] d y \int_1^4 \left[\int_{\sqrt{y}}^2 (x^2 + y^2) dx\right] dy 14[y 2(x2+y2)dx]dy
syms x y a
% (1)
% 函数 int() 若给定区间参数 [x1 x2] 则返回定积分,若未给定则返回不定积分(符号的形式)
% 关于 int() 请参考 https://ww2.mathworks.cn/help/matlab/ref/int.html
int(cos(2*x)*cos(3*x))
% (2)
int((x^2 * atan(x) / (x^4 + 1)) - (sin(x/2))^2, x, [-a a])
% (3)
int(int((x^2 + y^2), x, [sqrt(y) 2]), y, [1 4])
clearvars
  1. 求下列定积分的数值解:
    (1) ∫ 0 π sin ⁡ 3 ( x ) − sin ⁡ 5 ( x ) d x \int_0^\pi \sqrt{\sin^3(x) - \sin^5(x)} dx 0πsin3(x)sin5(x) dx
    (2) ∫ 1 3 d x [ ∫ x − 1 2 e y 2 d y ] \int_1^3dx [\int_{x-1}^2 e^{y^2} dy] 13dx[x12ey2dy]
% (1)
% 函数 integral() 可直接计算数值解,当然也可以采用 int() 计算
% 不同的是 int() 需要表达式,而 integral() 需要函数句柄
% 关于 integral() 请参考 https://ww2.mathworks.cn/help/matlab/ref/integral.html
integral(@(x) sqrt((sin(x)).^3 - (sin(x)).^5), 0, pi)
% (2)
% 本题给出使用 int() 的方式,不过建议使用 integral2()
% 关于 integral2() 请参考 https://ww2.mathworks.cn/help/matlab/ref/integral2.html
% 这里的 @(y) exp(y.^2) 实际上创造了一个关于 y 的函数句柄,而表达式的符号变量为 x
% syms x
% int(int(@(y) exp(y.^2), x-1, 2), 1, 3)
ymin = @(x) x-1;
integral2(@(x, y) exp(y.^2), 1, 3, ymin, 2)
clearvars
  1. 求下列微分方程的符号解:
    (1) d d x y + y x = sin ⁡ ( x ) x , y ( π ) = 1 \frac{d}{dx} y + \frac{y}{x} = \frac{\sin(x)}{x}, y(\pi) = 1 dxdy+xy=xsin(x),y(π)=1
    (2) y ′ ′ + y ′ 2 = 1 , y ( 0 ) = 1 , y ′ ( 0 ) = 2 y^{\prime \prime} + y^{\prime 2} = 1, y(0) = 1, y^\prime(0) = 2 y+y2=1,y(0)=1,y(0)=2
% (1)
syms y(x)
% 关于 dsolve() 请参考 https://ww2.mathworks.cn/help/symbolic/dsolve.html
eq1 = ( diff(y, x) + y/x == sin(x) / x ); % 定义一个微分方程
cond1 = ( y(pi) == 1 ); % 给出初值条件
dsolve(eq1, cond1) % 注意第一个参数 eq1 不同于前面的表达式和函数句柄,而是用 == 表示的等式
% (2)
syms g(x)
eq2 = ( diff(y, x, 2) + diff(y, x)^2 == 1 );
cond2 = ( y(0) == 1 ); % 初值条件 1

% 定义 y^{\prime} 以表示 y^{\prime}(0)=2 的初值条件
g(x) = diff(y, x);
cond3 = ( g(0) == 2 ); % 初值条件 2

dsolve(eq2, cond2, cond3)
clearvars
  1. 求下列微分方程的数值解并绘出求解区间的图,并与符号解对比:
    (1) d d x y + y cot ⁡ x = 5 e cos ⁡ x , y ( π 2 ) = − 4 \frac{d}{dx} y + y \cot x = 5 e^{\cos x}, y\left(\frac{\pi}{2} \right) = -4 dxdy+ycotx=5ecosx,y(2π)=4,求解区间 [ π 2 , π ] [\frac{\pi}{2}, \pi] [2π,π]
    (2) x 2 y ′ ′ + 4 x y ′ + 2 y = 0 , y ( 1 ) = 2 , y ′ ( 1 ) = − 3 x^2 y{\prime \prime} + 4 x y^\prime + 2 y = 0, y(1) = 2, y^\prime(1) = -3 x2y+4xy+2y=0,y(1)=2,y(1)=3(本小题选做) 。
% (1)
figure;
% 关于 ode45() 请参考 https://ww2.mathworks.cn/help/matlab/ref/ode45.html
% 通过给定函数句柄、求解区间、初值条件求解,返回一系列 (x,y) 坐标
[x, y] = ode45(@(x, y) 5.*exp(cos(x)) - y.*cot(x), [pi/2 pi-0.1], -4);
plot(x, y, '-o');
title('7\_(1)');
grid on

【实验】实验五 MATLAB高等数学运算20211125_第1张图片

% (2)
figure;
% 关于 ode45 请参考 https://ww2.mathworks.cn/help/matlab/ref/ode45.html
% 本题需要将原方程降阶
% 令 y = y_1 ,则
% y_1^\prime = y_2
% y_2^\prime = - (4xy_2 + 2y_1) / x^2
% 写成参数要求的函数句柄为
% function dydx = eqy(x, y)
%     dydx = [y(2); - (4.*x.*y(2) + 2.*y(1)) / x^2];
% end
[x, y] = ode45(@eqy, [1 20], [2; -3]);
plot(x, y(:, 1), '-o', x, y(:, 2), '-o');
legend('y_1', 'y_2');
title('7\_(2)');
grid on

【实验】实验五 MATLAB高等数学运算20211125_第2张图片

clearvars
  1. 求下列方程或者方程组的数值解:
    (1) 3 x + sin ⁡ x − e x = 0 3 x + \sin x - e^x = 0 3x+sinxex=0
    (2) [ x 1 + 2 x 2 − 3 = 0 2 x 1 2 + x 2 2 − 5 = 0 ] \begin{bmatrix} x_1 + 2x_2 - 3 = 0\\ 2x_1^2 + x_2^2 - 5 = 0 \end{bmatrix} [x1+2x23=02x12+x225=0]
% (1)
figure;
fplot(@(x) 3.*x + sin(x) - exp(x), [-3, 3]);  % 通过函数绘图来查看函数零点所处的位置
title('8\_(1)');
grid on

【实验】实验五 MATLAB高等数学运算20211125_第3张图片

% fzero() 需要给定某个点以搜索非线性函数附近的零点,此即画图之故
% 关于 fzero() 请参考 https://ww2.mathworks.cn/help/matlab/ref/fzero.html
fzero(@(x) 3.*x+sin(x)-exp(x), 0), fzero(@(x) 3.*x+sin(x)-exp(x), 2)
% (2)
% 将待求解方程组类似向量来定义
% function E = linEqs(x)
%     E(1) = x(1) + 2.*(x(2)) - 3;
%     E(2) = 2.*(x(1)).^2 + (x(2)).^2 - 5;
% end
% 关于 fsolve() 请参考 https://ww2.mathworks.cn/help/optim/ug/fsolve.html
fsolve(@linEqs, [1, 2])

函数文件

function dydx = eqy(x, y)
    dydx = [y(2); (-2.*y(1) - 4.*x.*y(2)) / x^2];
end
function E = linEqs(x)
    E(1) = x(1) + 2.*(x(2)) - 3;
    E(2) = 2.*(x(1)).^2 + (x(2)).^2 - 5;
end

你可能感兴趣的:(MATLAB,matlab)