Matlab中的ln(x)的泰勒级数

时间:2017-12-08 20:09:58

标签: matlab

我正在尝试为任何x值计算ln(x)的泰勒序列。

到目前为止我所拥有的是:

 clear
 clc
 n = input('Enter number of iiterations (n): ' );
 x = input('enter value of x (x): ');
 y = zeros(1,n);
 for i = 0:n
  y(i+1)=sum + (-1)^(n+1)*(x-1)^n/n;
end

但是这段代码似乎被打破了,我无法弄清楚原因。关于如何改进的任何建议?

3 个答案:

答案 0 :(得分:2)

除了@farbiondriven

提供的for-loop答案之外,这是一个单行内容

0<x<1

sumLn = @(x, n)(sum(((-1).^(0:n-1)).*((x-1).^(1:n))./(1:n)));
sumLn(0.5,10)

ans =

   -0.6931

>> log(0.5)

ans =

   -0.6931

x>0.5

sumLn = @(x, n)(sum( ((x-1)/x).^(1:n) ./ (1:n) ));
sumLn(2,10)

ans =

    0.6931


log(2) =

    0.6931

注意:此公式中的变量x具有此link中提到的界限。

答案 1 :(得分:1)

试试这个:

clear
clc

n = input('Enter number of iterations (n): ' );
x = input('enter value of x with abs value < 1 (x): ');
y = zeros(1,n+1);

y(1)=0;

for i = 1:n
    y(i+1)= y(i) + ((-1)^(i+1)*(x-1)^i/i);
end


txt = sprintf('The output is: %f', y(n+1))

答案 2 :(得分:1)

我建议使用内置功能,希望有一个功能。 taylor(f,var)近似于 f ,其中f的泰勒级数展开为var = 0时的五阶。

指定扩展点:

x = 1找到这些函数的泰勒级数展开式。默认扩展点为 0 。要指定其他扩展点,请使用'ExpansionPoint'

syms x
taylor(log(x), x, 'ExpansionPoint', 1)
ans =
x - (x - 1)^2/2 + (x - 1)^3/3 - (x - 1)^4/4 + (x - 1)^5/5 - 1

指定截断顺序:

默认截断顺序为6.

syms x
f = log(x);
t6 = taylor(f, x);

使用'Order'控制截断顺序。例如,近似于订单8的相同表达式。

syms x
taylor(log(x), x, 'ExpansionPoint', 1, 'Order', 8);