用matlab求极限,求导,积分,矩阵。。。
发布网友
发布时间:2022-04-22 07:30
我来回答
共1个回答
热心网友
时间:2022-06-17 18:06
% 这一类计算可以用matlab的符号计算实现.
% 首先是定义符号
syms x y z r a b c;
%%问题一:计算极限. 采用limit函数.
fprintf("---计算极限---\n")
fun1 = ((1+tan(x)) / (1+sin(x)))^(1/x^3);
fprintf("x ->0, fun1->%s\n", limit(fun1));
fun2 = x * y / sqrt(x^2 + y^2);
fprintf("(x, y)->0, fun2->%s\n", limit(limit(fun2, x, 0), y, 0));
%% 问题二:计算导数. 采用diff函数.
fprintf("---计算导数---")
f = exp(-2*x) * cos(3 * sqrt(x));
fprintf("\nf的导数:\n %s\n", diff(f, x));
%% 问题三: 计算积分. 采用int函数.
fprintf("---积分---");
fun1 = sin(x*y + z);
fprintf("\nfun1对z积分: %s\n", int(fun1, z));
fun2 = 1 / (3 + 2*x + x^2);
fprintf("fun2对x从0到1积分:%s\n", int(fun2, x, [0, 1]));
fun3 = 1 / (3 + 2*x + x^2);
fprintf("fun3对x从-inf到inf积分: %s\n", int(fun3, x, [-inf, inf]));
%% 计算Jacobi矩阵
% 需要知道(x, y, z)是行向量还是列向量.
% 假设是行向量.
fprintf("--jacobi--");
vector = [r*sin(a)*cos(b), r*sin(a)*sin(b), r*cos(a)];
fprintf("\nJacobi矩阵\n")
jacobi = [diff(vector, r);
diff(vector, a);
diff(vector, b)];
disp(jacobi)
% 如果是列向量, 只需要对jacobi做一个转置. jacobi=jacobi';
%% 问题五: 证明等式. 需要用simplify化简函数.
fprintf("--等式证明--")
left = int(x^3*cos(a*x)^2, x);
right = x^4/8 + (x^3/4/a - 3*x/8/a^3)*sin(2*a*x) + (3*x^2/8/a^2 - 3/16/a^4)*cos(2*a*x)+c;
% 只需证明两者的一阶导数相同即可 (因为积分允许差一个常数项)
fprintf("\n左右两边一阶导数的差为:%s\n", simplify(diff(left, x) - diff(right, x)));
-----------------------以下是在我matlab中的测试结果---------------------
% 9.5.0.944444 (R2018b)
---计算极限---
x ->0, fun1->exp(1/2)
(x, y)->0, fun2->0
---计算导数---
f的导数:
- 2*exp(-2*x)*cos(3*x^(1/2)) - (3*exp(-2*x)*sin(3*x^(1/2)))/(2*x^(1/2))
---积分---
fun1对z积分: -cos(z + x*y)
fun2对x从0到1积分:(2^(1/2)*atan(2^(1/2)/4))/2
fun3对x从-inf到inf积分: (2^(1/2)*pi)/2
--jacobi--
Jacobi矩阵
[ cos(b)*sin(a), sin(a)*sin(b), cos(a)]
[ r*cos(a)*cos(b), r*cos(a)*sin(b), -r*sin(a)]
[ -r*sin(a)*sin(b), r*cos(b)*sin(a), 0]
--等式证明--
左右两边一阶导数的差为:0