Matlab求极限
matlab求极限(可用来验证度量函数或者隶属度函数)可用来验证是否收敛,取值范围等等。
一.问题来源
搜集聚类资料时,又看到了隶属度函数,没错,就是下面这个,期间作者提到m趋于2是,结果趋于1,我想验证下,于是查资料。
二.不同类型的极限
2.1 基础知识
a./b表示常数a除以矩阵b中每个元素或者矩阵a除以矩阵b对应元素或者常数b;点乘方a.^b,矩阵a中每个元素按b中对应元素乘方或者b是常数。
2.2 单变量独立式子
独立式子之地的是不存在连加之类的操作。
问题:用MATLAB求(x^2+1)/(x^2-1)的极限。
syms x;
y=(x^2+1)/(x^2-1)
limit(y,inf)
2.3求连加和极限
问题:lim(1+1/2+1/3+1/4+……+1/n-lnn),n->无穷
>>syms x n;
>>sol=limit(symsum(1/x,x,1,n)-log(n),n,inf)
sol =
eulergamma
>> vpa(sol,20)
ans =
0.57721566490153286061
2.4双变量求极限
问题:matlab求极限怎样求lim(sin(xy)/x;其中x接近0,y接近2,用matlab解。(直接syms x,y;提示y未定义,不管了,分别定义就行了,不管这种细枝末节)。
>> syms x;
>> syms y;
>> f = sin(x*y)/x;
>> limit(limit(f,x,0),y,2)
ans =
2
计算机模拟(只写了大概)。
dd=(-0.8).^(-10:10000);
e=0.00001
tmp0=0;
for d=dd
x=0+d;
y=2+d;
tmp1=sin(x*y)/x;
if abs(tmp0-tmp1)
2.5 补充例子
问题:n/(n^2+1^2)+n/(n^2+2^2)+n/(n^2+3^2)+...+n/(n^2+n^2)在n->oo时的极限
n = 1e6;
sum(n./(n^2+(1:n).^2))
三.相关知识点
3.1 VPA函数
matlab控制运算精度用的是digits和vpa这两个函数,digits用于规定运算精度,比如:digits(20);这个语句就规定了运算精度是20位有效数字。但并不是规定了就可以使用,因为实际编程中,我们可能有些运算需要控制精度,而有些不需要控制。vpa就用于解决这个问题,凡是用需要控制精度的,我们都对运算表达式使用vpa函数。例如:digits(5);a=vpa(sqrt(2));
这样a的值就是1.4142,而不是准确的1.4142135623730950488016887242097
又如:digits(5); a=vpa(sqrt(2));b=sqrt(2); 这样a的值是1.4142,b没有用vpa函数,所以b是1.4142135623730950488016887242097......vpa函数对其中每一个运算都控制精度,并非只控制结果。digits(11);a=vpa(2/3+4/7+5/9); b=2/3+4/7+5/9;a的结果为1.7936507936,b的结果为1.793650793650794......也就是说,计算a的值的时候,先对2/3,4 /7,5/9这三个运算都控制了精度,又对三个数相加的运算控制了精度。而b的值是真实值,对它取11位有效数字的话,结果为1.7936507937,与a不同,就是说vpa并不是先把表达式的值用matlab本身的精度求出来,再取有效数字,而是每运算一次,都控制精度。我举的例子不太好,因为加法不太会增加数字位数。希望你能理解我的意思....
3.2 欧拉常数
matlab中eulergamma是什么?是欧拉常数,其值为0.57721566...,欧拉-马歇罗尼常数(Euler-Mascheroni constant)是一个主要应用于数论的数学常数。它的定义是调和级数与自然对数的差值的极限。由无穷级数理论可知,调和级数是发散的。但可以证明上述存在极限(缩放法,同时单调有界必有极限)。
四.结束语及参考文献
回到开头提出的隶属度函数。
>> syms x,n;
>> f =limit(symsum((1/x)^2,x,1,n),n,inf)
f =
205/144
>> vpa(f,10)
ans =
1.423611111
结果不是1,可能结果需要仿真,d1到dk不能直接是1到k。
参考文献:http://www.cnblogs.com/hxsyl/archive/2012/11/17/2774879.html 百度知道