999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Matlab中實現階乘算法的幾種途徑

2008-12-31 00:00:00徐會艷
電腦知識與技術 2008年16期

摘要:本文簡要介紹了Matlab,闡述了階乘的概念,并給出了階乘算法在Matlab中的幾種實現方案。

關鍵詞:matlab;mex;階乘;函數

中圖分類號:TP312文獻標識碼:A文章編號:1009-3044(2008)16-21258-02

Several Ways of Achieving Factorial Algorithm in Matlab

XU Hui-yan1,HU Peng2

(1.Huaiyin Teachers College,Huaian 223300,China;2.Huaian college of Information Technology,Huaian 223003,China)

Abstract:The paper introduced Matlab briefly,and illustrated the conception of factorial. It gave us Several Ways of Achieving factorial algorithm in Matlab.

Key words:matlab;mex;factorial;function

1 Matlab簡介

Matlab是由美國的Cleve Moler為了學生而用FORTRAN語言編寫的關于EISPACK和LINPACK的接口程序,后經他和John Little,Steve Bangert等人一起用C語言進行了完善,并作了進一步開發。Matlab早期是用來進行工程和科學計算的,但隨著時代的變遷,自身的不斷完善和充實,如今Matlab已發展成為眾多行業不可缺少的軟件之一,如數理統計、工程計算、圖形圖像處理、仿真與建模、生物遺傳、控制系統設計與分析等領域。但Matlab和其他高級語言相比,程序執行時以解釋方式工作,不用編譯,源程序讀一句,翻譯一句,執行一句,輸入程序立即顯示結果,從而導致程序執行速度降低。為了彌補這一不足,我們可以借助其他語言,進而實現提高程序的運行效率。

2 什么是階乘

階乘,又稱factorial,它是基斯頓?卡曼(Christian Kramp)發明的運算符號,用“!”表示,指從1一直乘到n的數。表達式如下:

n!=1*2*3*4*……*n其中n∈N

如要求5的階乘,則可表示為

5!=1*2*3*4*5

結果為120。另規定1!=1,0!=1。

3 階乘算法實現

3.1 調用Matlab函數

3.1.1 調用factorial函數

Matlab提供了豐富多樣的函數庫,且用戶使用方便,如求階乘的函數factorial(),假設用戶需求20的階乘,則用戶可直接在Matlab命令窗口中輸入factorial(20),然后運行,可得ans=2.4329e+018。在這里,factorial(N)為N的階乘, 是從1到N的所有整數之積, 即prod(1:N) 。當N 是一個N維數組時, factorial(N) 是N 的每個元素的階乘。因為雙精度數字只有約15位,所得結果僅在N < = 21時準確。對于更長的N,結果只能精確到前15位。

3.1.2 調用Prod函數

在Matlab中Prod(x)是計算向量x的元素總乘積,而Prod(1:n)是求1……n的總乘積,用它也可實現計算n的階乘,若需求20!,則可在Matlab命令窗口中輸入Prod(1:20),然后運行,同樣可得ans=2.4329e+018。

3.1.3 調用Gamma函數

Gamma函數內插factorial 函數,對于整型量 n,有 gamma(n+1) = n! = factorial(n)。同樣若需求20!,在Matlab命令窗口中輸入gamma(21),然后運行,可得ans=2.4329e+018。

3.2 調用M文件

在Matlab中,除了調用它自身提供的函數,我們也可以自己編寫函數。通常,我們將編寫好的文件保存為文本文件,后綴為.m,一般稱它為M文件。M文件是一個文本文件,可以用各種文本文件對它進行修改,也可以使用MATLAB內建的M文件編輯器。可以通過兩種方法執行M文件,一是直接在調試窗口中利用功能菜單的調試命令完成;二是將在“調試窗口”中保存好的M文件的文件名在“命令窗口”中輸入,然后執行即可。

以下為求n!的代碼:

function y=control(x)

if (x==1) || (x==0)

y=1;

else

y=x*control(x-1);

end

將此程序保存為Control.m,然后在命令窗口中輸入y=control(20),可得y=2.4329e+018。在這里我們運用了遞歸算法求階乘,遞歸公式為:

它的執行流程如圖1。

圖1 control執行流程

3.3 調用MEX接口

MEX是Matlab EXecutable的縮寫,是Matlab和其它高級語言混合編程的接口,如C/C++,VB,Delphi等。對于已有的或普通的C/C++等源程序,只要通過MEX接口函數就可在Matlab中像自身函數一樣調用,方便快捷,而且對于某些復雜的程序還能夠提高它的運行效率。MEX需要調用外部的語言編譯器來產生MEX文件,所以編譯MEX文件之前需要安裝必要的編譯器。本例需要安裝的是C語言編譯器。主要代碼如下:

計算函數factorial:

j=1;

if (n==1.0 || n==0)

j=1;

else

{for(i=n;i>1;i--)

j=j*i;

}

入口子程序mexFunction:

mrows=mxGetM(prhs[0]);

ncols=mxGetN(prhs[0]);

plhs[0]=mxCreateDoubleMatrix(mrows, ncols, mxREAL);

x=mxGetPr(prhs[0]);

y=mxGetPr(plhs[0]);

factorial (y, x);

在利用MEX接口調用函數時,一定要在程序的開頭加上頭文件\"mex.h\",將程序代碼保存為factorial.c,然后在Matlab命令窗口中鍵入mex factorial.c運行,輸入y=factorial(20)執行,顯示結果y=2.4329e+018。

4 小結

在實驗中有很多人不知道如何在Matlab中實現階乘的計算,本人通過總結給出了階乘算法的幾種實現方法,供大家參考,與大家共同學習。

參考文獻:

[1] 飛思科技產品研發中心.MATLAB6.5應用接口編程[M].電子工業出版社,2003.

[2] 樓順天,陳生潭,雷虎民.MATLAB5.x程序設計語言[M].西安電子科技大學出版社,2000.

[3] 飛思科技產品研發中心.MATLAB7基礎與提高[M].電子工業出版社,2006.

注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。

主站蜘蛛池模板: 欧美区国产区| 欧美v在线| 午夜国产精品视频黄| 亚洲三级a| 在线看片免费人成视久网下载| 中文字幕亚洲另类天堂| 99热国产在线精品99| 成人福利在线看| 综合久久久久久久综合网| 亚洲免费福利视频| 久久99国产乱子伦精品免| 亚洲高清无在码在线无弹窗| 91无码人妻精品一区| 最新国产精品第1页| 中文字幕乱码中文乱码51精品| 99热这里只有精品免费| 中文字幕日韩欧美| 永久免费AⅤ无码网站在线观看| 亚洲男人在线| 国产精品尤物铁牛tv| 91破解版在线亚洲| 无码丝袜人妻| 无码精品一区二区久久久| 国内a级毛片| 亚洲第一色视频| 欧美精品高清| 久久这里只有精品23| 久久综合伊人77777| 亚洲色欲色欲www网| 国产成熟女人性满足视频| 亚洲最大在线观看| 成人福利在线观看| 国产成人精品高清不卡在线| 国产自产视频一区二区三区| 一级片一区| 亚洲一区二区三区麻豆| 国产va欧美va在线观看| 国产午夜无码片在线观看网站| 久久久亚洲国产美女国产盗摄| 欧美成人精品一区二区| 日韩成人在线视频| 性激烈欧美三级在线播放| 色综合国产| av在线无码浏览| 好吊色妇女免费视频免费| 久久综合色视频| 亚洲高清无在码在线无弹窗| 午夜毛片免费观看视频 | 久久午夜夜伦鲁鲁片无码免费| 国产精品亚洲一区二区三区z | 久久福利片| 88国产经典欧美一区二区三区| 精品视频91| 亚洲天堂精品视频| 国产视频资源在线观看| 国产无码网站在线观看| 国产人妖视频一区在线观看| 青青国产成人免费精品视频| 国产精品亚洲一区二区在线观看| 久热re国产手机在线观看| 亚国产欧美在线人成| 老司机久久精品视频| 国产精品美女在线| 久久成人免费| 日本一区二区三区精品视频| 亚洲日韩欧美在线观看| 国产成人精品亚洲77美色| 国产成本人片免费a∨短片| 亚洲成aⅴ人在线观看| 久久综合一个色综合网| 久久婷婷五月综合97色| 国内精品久久九九国产精品| 激情無極限的亚洲一区免费| 久久精品这里只有国产中文精品| 高清不卡毛片| 国产自在线播放| 在线无码九区| 亚洲午夜福利在线| 日韩东京热无码人妻| 久久久久久久久亚洲精品| 五月婷婷综合色| 国产精品男人的天堂|