本文仅供学习和复习使用。 题目源于岑冠军老师,答案参考自相关课件,另外借以markdown排版成此文。由于本人水平有限且时间不够充裕,故难免有错漏或不当之处,如有建议或批评还请联系[email protected],谢谢!
@Copyright 华南农业大学 数学与信息学院 数学系 主讲与制作:岑冠军
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
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)
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
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)
% 函数 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)
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)
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
% (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
clearvars
% (1)
figure;
fplot(@(x) 3.*x + sin(x) - exp(x), [-3, 3]); % 通过函数绘图来查看函数零点所处的位置
title('8\_(1)');
grid on
% 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