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 百度知道