我正在尝试为任何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
但是这段代码似乎被打破了,我无法弄清楚原因。关于如何改进的任何建议?
答案 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);