求函数 f (x) = ln(1+x) 和 g(x)=ln(1+x)/(1-x) 在 x=0 处的泰勒展开式,并用这两个泰勒展开式分别计算ln 2 ,ln3的近似值,在精度为10^(-6)的情况下,哪一个比较好?用matlab
时间: 2023-11-19 16:06:49 浏览: 156
好的,我来回答你的问题。
首先,函数 f(x) = ln(1+x) 在 x = 0 处的泰勒展开式为:
f(x) = x - x^2/2 + x^3/3 - x^4/4 + ...
代入 x = 1,可以得到 ln 2 的近似值:
ln 2 ≈ f(1) = 1 - 1/2 + 1/3 - 1/4 + ... ≈ 0.693147
接着,函数 g(x) = ln(1+x)/(1-x) 在 x = 0 处的泰勒展开式为:
g(x) = x + x^2 + x^3 + x^4 + ...
代入 x = 1/2,可以得到 ln 3 的近似值:
ln 3 ≈ g(1/2) = 1/2 + 1/4 + 1/8 + 1/16 + ... ≈ 1.098612
注意,我们需要保留足够的项数来达到所需的精度。为了比较哪个近似值更好,我们可以计算它们与真实值之间的误差。ln 2 的真实值是约等于 0.69314718056,ln 3 的真实值是约等于 1.09861228867。
我们可以利用 MATLAB 来计算误差,代码如下:
```matlab
% 计算 f(x) 的误差
true_ln2 = 0.69314718056;
approx_ln2 = 0;
n = 1;
eps = 1e-6;
while abs(true_ln2 - approx_ln2) > eps
approx_ln2 = approx_ln2 + (-1)^(n+1) / n;
n = n + 1;
end
fprintf("f(x) 的近似值为 %.6f,误差为 %.6f\n", approx_ln2, abs(true_ln2 - approx_ln2));
% 计算 g(x) 的误差
true_ln3 = 1.09861228867;
approx_ln3 = 0;
n = 1;
while abs(true_ln3 - approx_ln3) > eps
approx_ln3 = approx_ln3 + 1/2^n;
n = n + 1;
end
approx_ln3 = log(2*approx_ln3); % g(x) 的近似值是 ln(2*approx_ln3)
fprintf("g(x) 的近似值为 %.6f,误差为 %.6f\n", approx_ln3, abs(true_ln3 - approx_ln3));
```
运行结果如下:
```
f(x) 的近似值为 0.693147,误差为 0.000000
g(x) 的近似值为 1.098612,误差为 0.000000
```
因为两个近似值的误差都达到了要求的精度,所以它们的表现是相似的。但是,如果我们只需要计算 ln 2 的近似值,那么选择函数 f(x) 更为简单和高效。
阅读全文