若要获得更好的阅读体验,请前往 链接。
求点赞 求点赞 求点赞。
1(课本习题1)
求下列多项式的所有根,并验算:
(1) x 2 + x + 1 x^{2} + x + 1 x2+x+1;
(2) 3 x 5 − 4 x 3 + 2 x − 1 3x^{5} - 4x^{3} + 2x - 1 3x5−4x3+2x−1;
(3) 5 x 23 − 6 x 7 + 8 x 6 − 5 x 2 5x^{23} - 6x^{7} + 8x^{6} - 5x^{2} 5x23−6x7+8x6−5x2;
(4) ( 2 x + 3 ) 3 − 4 (2x + 3)^{3} - 4 (2x+3)3−4 (提示: 先用conv展开)
代码:
function verify_roots(p, r, tol)
% p: 多项式的系数向量,r: roots 函数的输出
% tol: 误差容限
all_passed = true;
for i = 1:length(r)
if abs(polyval(p, r(i))) > tol
fprintf('根 %f + %fi 可能不准确\n', real(r(i)), imag(r(i)));
all_passed = false;
end
end
if all_passed
fprintf('所有的根都已经通过验证,求根正确。\n');
end
end
% 1.1
tol = 1e-6; % 定义容差
p = [1 1 1];
r = roots(p)
verify_roots(p, r, tol)
% 1.2
p = [3 0 -4 0 2 -1];
r = roots(p)
verify_roots(p, r, tol)
% 1.3
p = zeros(1,24);
p([1 17 18 22]) = [5 -6 8 -5];
r = roots(p)
verify_roots(p, r, tol)
% 1.4
p1 = [2 3];
p2 = conv(p1,p1);
p3 = conv(p1,p2);
p3(end) = p3(end)-4;
r = roots(p3)
verify_roots(p3, r, tol)
输出:
ans =
-0.5000 + 0.8660i
-0.5000 - 0.8660i
所有的根都已经通过验证,求根正确。
ans =
-0.9479 + 0.3845i
-0.9479 - 0.3845i
1.0000 + 0.0000i
0.4479 + 0.3435i
0.4479 - 0.3435i
所有的根都已经通过验证,求根正确。
ans =
0.0000 + 0.0000i
0.0000 + 0.0000i
0.9768 + 0.0000i
0.9388 + 0.2682i
0.9388 - 0.2682i
0.8554 + 0.5363i
0.8554 - 0.5363i
0.6615 + 0.8064i
0.6615 - 0.8064i
0.3516 + 0.9878i
0.3516 - 0.9878i
-0.0345 + 1.0150i
-0.0345 - 1.0150i
-0.4609 + 0.9458i
-0.4609 - 0.9458i
-0.1150 + 0.8340i
-0.1150 - 0.8340i
-0.7821 + 0.7376i
-0.7821 - 0.7376i
-0.9859 + 0.4106i
-0.9859 - 0.4106i
-1.0416 + 0.0000i
-0.7927 + 0.0000i
所有的根都已经通过验证,求根正确。
ans =
-1.8969 + 0.6874i
-1.8969 - 0.6874i
-0.7063 + 0.0000i
所有的根都已经通过验证,求根正确。
2(课本习题2)
求方程 x ln ( x 2 − 1 + x ) − x 2 − 1 − 0.5 x = 0 x\ln{\left( \sqrt{x^{2} - 1} + x \right) - \sqrt{x^{2} - 1} - 0.5x = 0} xln(x2−1+x)−x2−1−0.5x=0的正根。
代码:
Fun = @(x) x*log(sqrt(x^2-1)+x)-sqrt(x^2-1)-0.5*x;
% 使用fzero函数找到函数的零点
fzero(Fun,2)
输出:
ans = 2.1155
3(课本习题4)
(超越方程)超越方程的解有时是很复杂的,作出 f ( x ) = x sin 1 x f(x) = x\sin\frac{1}{x} f(x)=xsinx1在[-0.1,
0.1]内的图,可见x=0附近 f ( x ) = 0 f(x) = 0 f(x)=0有无穷多个解,并设法求出它们的近似解,是计算结果误差不超过0.01.
代码:
Fun = @(x) x.*sin(1/x);
% 使用fplot函数绘制函数图像
fplot(Fun, [-0.1 0.1]