交互计算函数极限
calculating the function limit interatively
如何在Matlab中交互计算一个函数的极限,接近给定的极限值?闭合精度为10^(-7)
我想应该使用泰勒公式,但不知道如何应用它。
函数本身是:
限制为 88。
换句话说,赋值是将极限表示为具有指定变量的系列,计算它们 step-by-step,以 10^(-7) 精度接近极限值。
任务示例代码:
syms x;
F=log(1+sin(x))/(sin(4*x));
a=limit(F,x,0);
disp(a)
sum=taylor(F,x,0,'Order',7);
disp(sum)
disp (subs(sum,x,0))
使用符号工具箱时,使用 MATLAB 计算它非常容易。 limit
函数就是你所需要的:
syms x
limit((x^2-9*x-10)/(sqrt(x+6)-4),x,10)
ans =
88
如果你想手工计算,你不需要泰勒级数,你需要 L'Hopital 规则,其中规定
(图片来源:维基百科)
这导致
要在 MATLAB 中进行计算,您可以使用 diff
函数求导并执行类似
的操作
syms x
f(x) = x^2-9*x-10;
g(x) = sqrt(x+6)-4;
r(x) = diff(f(x)) / diff(g(x));
r(10)
ans =
88
好吧,因为我们使用的是 MATLAB,所以我们当然可以只使用泰勒级数展开,让 MATLAB 来完成这项工作。 MATLAB 有一个 taylor
函数可以创建泰勒展开式。由于泰勒展开正好在展开点附近,误差增大,离该点越远,展开点最好用10
。
syms x
t(x) = taylor((x^2-9*x-10)/(sqrt(x+6)-4),x,10,'Order',6);
t(10)
ans =
88
好的,既然我知道你在追求什么,你也许可以做的是使用那个 taylor
命令并扩展一个离你想要计算极限的地方很远的点。如果我们将扩展点设置为您想要评估极限的位置,无论您选择什么阶多项式,您都会得到正确的结果,这就是我假设您不想要的结果。
从较远的扩展点开始,然后不断增加泰勒级数多项式的阶数,直到获得所需的精度。你不要选择离太太远的扩展点,否则你永远得不到正确答案。因此,我将在 x = 7
.
展开
像这样:
true_val = 88; %// Define true value
syms x;
f = (x^2-9*x-10)/(sqrt(x+6)-4); %// Define function
order = 2; %// Start with second order
format long g; %// For better formatting
while true %// Keep iterating...
% // Get Taylor polynomial centered at x = 7 of the current order
pol = taylor(f, x, 7, 'Order', order);
%// Evaluate the Taylor series
val = double(subs(pol, x, 10));
%// Show the results
disp(['Order: ' num2str(order)]);
disp('Result');
disp(val);
%// Check to see if we have at least 1e-7 accuracy then break out if yes
if abs(true_val - val) < 1e-7
break;
end
%// Increment the order by 1
order = order + 1;
end
这是我得到的:
Order: 2
Result
86.9892652074553
Order: 3
Result
88.0453290425764
Order: 4
Result
87.9954798755339
Order: 5
Result
88.0005926106152
Order: 6
Result
87.9999105029301
Order: 7
Result
88.0000147335223
Order: 8
Result
87.999997429935
Order: 9
Result
88.0000004672668
Order: 10
Result
87.9999999123696
如何在Matlab中交互计算一个函数的极限,接近给定的极限值?闭合精度为10^(-7)
我想应该使用泰勒公式,但不知道如何应用它。
函数本身是:
限制为 88。 换句话说,赋值是将极限表示为具有指定变量的系列,计算它们 step-by-step,以 10^(-7) 精度接近极限值。
任务示例代码:
syms x;
F=log(1+sin(x))/(sin(4*x));
a=limit(F,x,0);
disp(a)
sum=taylor(F,x,0,'Order',7);
disp(sum)
disp (subs(sum,x,0))
使用符号工具箱时,使用 MATLAB 计算它非常容易。 limit
函数就是你所需要的:
syms x
limit((x^2-9*x-10)/(sqrt(x+6)-4),x,10)
ans =
88
如果你想手工计算,你不需要泰勒级数,你需要 L'Hopital 规则,其中规定
这导致
要在 MATLAB 中进行计算,您可以使用 diff
函数求导并执行类似
syms x
f(x) = x^2-9*x-10;
g(x) = sqrt(x+6)-4;
r(x) = diff(f(x)) / diff(g(x));
r(10)
ans =
88
好吧,因为我们使用的是 MATLAB,所以我们当然可以只使用泰勒级数展开,让 MATLAB 来完成这项工作。 MATLAB 有一个 taylor
函数可以创建泰勒展开式。由于泰勒展开正好在展开点附近,误差增大,离该点越远,展开点最好用10
。
syms x
t(x) = taylor((x^2-9*x-10)/(sqrt(x+6)-4),x,10,'Order',6);
t(10)
ans =
88
好的,既然我知道你在追求什么,你也许可以做的是使用那个 taylor
命令并扩展一个离你想要计算极限的地方很远的点。如果我们将扩展点设置为您想要评估极限的位置,无论您选择什么阶多项式,您都会得到正确的结果,这就是我假设您不想要的结果。
从较远的扩展点开始,然后不断增加泰勒级数多项式的阶数,直到获得所需的精度。你不要选择离太太远的扩展点,否则你永远得不到正确答案。因此,我将在 x = 7
.
像这样:
true_val = 88; %// Define true value
syms x;
f = (x^2-9*x-10)/(sqrt(x+6)-4); %// Define function
order = 2; %// Start with second order
format long g; %// For better formatting
while true %// Keep iterating...
% // Get Taylor polynomial centered at x = 7 of the current order
pol = taylor(f, x, 7, 'Order', order);
%// Evaluate the Taylor series
val = double(subs(pol, x, 10));
%// Show the results
disp(['Order: ' num2str(order)]);
disp('Result');
disp(val);
%// Check to see if we have at least 1e-7 accuracy then break out if yes
if abs(true_val - val) < 1e-7
break;
end
%// Increment the order by 1
order = order + 1;
end
这是我得到的:
Order: 2
Result
86.9892652074553
Order: 3
Result
88.0453290425764
Order: 4
Result
87.9954798755339
Order: 5
Result
88.0005926106152
Order: 6
Result
87.9999105029301
Order: 7
Result
88.0000147335223
Order: 8
Result
87.999997429935
Order: 9
Result
88.0000004672668
Order: 10
Result
87.9999999123696