- N +

matlab程序實例大全(matlab程序編寫)

大家好,關于matlab程序實例大全很多朋友都還不太明白,今天小編就來為大家分享關于matlab程序編寫的知識,希望對各位有所幫助!

matlab 教程

前言:matlab只是個軟件,用來完成機械的計算,而如何安排這些計算,需要用戶掌握最基本的數學概念。這篇將介紹工程數學中常用的數學概念,與matlab似乎并不相關,但實則是matlab的基礎。

1.數值與符號

如果給工程數學問題分類,最大的兩類肯定是數值問題和符號問題,對應matlab的數值運算和符號運算。簡而言之,數值運算就是所有的變量的值已知,求解的也是一些具體的值;符號運算則剛好相反,不要求所有的變量都已知,求解的結果也不是變量具體的值,而是變量之間的關系。一個簡單的例子是

①數值問題:求解一元二次方程,ax2+bx+c=0,其中a=b=c=1,所求得的結果一定是x=幾點幾+幾點幾i,是個復數,是個具體的數值。

②符號問題:求解一元二次方程,ax2+bx+c=0,所求的的結果一定是x=求根公式,是abc的函數,是個關系

可見,一個問題是數值問題還是符號問題,很大程度上決定于結果需要求解的是數值還是關系。當然兩個問題也可以相互轉化,比如數值問題的一元二次方程,我們一般會先轉化成符號問題,把abc代入求根公式,求出來變量x的具體數值。但實際中,一般我們并不推薦這樣做,原因是matlab的數值和符號是完全不同的兩套系統,相互轉化不僅需要多余的數值符號轉換語言,更可能帶來查錯的不便。

2.典型數值問題

以下是常見的數值問題,文中提到的解法均可在數值計算、科學計算、數值算法這類書中找到。

2.1代數方程

代數方程又分為線性方程和非線性方程,線性方程一般可以轉化為矩陣形式AX=b,對A求逆即可。求逆的數值解法一般有高斯賽德爾迭代,超松弛迭代等。非線性方程一般轉化為f(x)=zeros其中x是個向量,右側的zeros表示f是個多輸出函數,數值解法一般是迭代,常見的有牛頓迭代,最速梯度,點斜式等。

2.2常微分方程

常微分方程一般轉化為Dy=f(y,t),且y(0)=y0是初始條件,其中y和Dy都是向量,f也是個多輸出函數,數值解法有歐拉法,龍格庫塔法。

2.3偏微分方程

偏微分方程比較復雜,matlab處理偏微分方程也不專業,我也幾乎不用matlab處理這類問題。但工程數學上,偏微分方程的解法有兩類,差分法和有限元法。差分法需要采用中心差分,迎風差分等。有限元需要計算剛度矩陣等。

2.4插值和擬合

插值和擬合是完全不同的兩個數學概念,雖然很多時候很多人都混淆了。兩者的描述都可以歸結為:已知函數上的點(x1,y1),(x2,y2)...(xn,yn),求一個已知的x,對應的y的數值。插值常用的多項式插值,三次樣條插值。擬合的本質是一個最優化問題,其中最常用的一種擬合是線性擬合,求解方法是最小二乘法。

2.5離散周期傅里葉變換

嚴格說來,這并不能算一個數學問題,只是一種運算方式,就好像加減乘除一樣。特殊性在于這種變換是對于一個向量進行,且運算后的結果依然是個向量。這里提出來是為了強調這種傅里葉變換的限定,要求是離散周期,這也是數值方法能處理的唯一一種傅里葉變換。

2.6最優化問題

最優化問題比較寬泛,一般可以歸結為求目標函數f(x)的最大或者最小值,其中f是一個單輸出的函數,x是一個向量。其中x需要滿足線性約束條件、非線性約束條件、上下界。具體的解法有最速梯度,遺傳,蟻群,退火等算法。

2.7數值積分

已知函數上的點(x1,y1),(x2,y2),...(xn,yn),求函數在x1到xn的定積分。常見算法有矩形公式,梯形公式,辛普森公式。類似的問題還有數值求導。

3.典型符號問題

以下是常見的符號問題,需要特別指出的是,無解問題。數值問題中也有一部分無解問題,但大多數工程中是碰不到的。而符號問題恰好相反,絕大部分我們遇到的符號問題都是沒有解的,或者準確的說,沒有解析解。比如求一元五次方程,我們知道x和這些系數存在關系,但無法寫出顯式的表達式,也就是說沒有解析解。

3.1遞推轉通項

這個問題可以歸結為:已知xn+1=f(xn),求xn,常見于數列的推導。

3.2代數方程

區別于數值問題中的代數方程,這里的代數方程問題可以描述為:f(x,c)=0,求x=x(c),這里需要求解的其實是x和c的關系。

3.3常微分方程

區別于數值問題中的常微分數方程,這里的代數方程問題可以描述為:Dy=f(y,t,c),求y=x(t,c),一般無需初值條件。

3.4符號積分

區別于數值問題中的數值積分,這里的符號積分可以描述為:已知函數關系y=f(x),求y的不定積分。同樣的問題還有符號求導。

matlab最基礎教程(一):軟件基本概念

前言:①如果你是第一次使用matlab,建議閱讀本教程。②以2017a版本為基礎,適用于2014a及之后的版本,之前的版本未測試。③結合這兩個月在壇子里回答的問題,整理成教程,水平有限,歡迎指正。

1.matlab的界面

home標簽下,找到layout進行設置/復位,可以設置各板塊的顯示與隱藏。其中有幾個部分,請務必要顯示

①CurrentFolder:中文一般翻譯成工作路徑,一般設置成一個自己建立的、有讀寫權限的文件夾,例如我的文檔下建立一個matlab文件夾

②CommandWindow:字面意思是命令窗口,用來運行代碼,所有的代碼都是在這里輸入

③Workspace:字面意思是工作空間,其實就是暫存所有運行結果的地方,“暫”的具體含義是:關閉matlab后丟失

2.軟件中的基本概念

2.1函數

matlab之所以強大,就是因為提供大量的函數,你也可以建立自定義函數,方法是:Home->New->function。自定義函數一般保存在工作路徑下。函數文件的特征是:擴展名m,內容的第一行以function開頭,后續內容是“輸出變量=函數名(輸入變量)”。且函數名和文件名相同。

每個函數在CommandWindow中運行,用來完成特定的計算任務,運行方式是輸入“輸出變量=函數名(輸入變量)”,然后按回車。例如有個系統自帶的函數是用來求絕對值的,函數名abs,所以在CommandWindow里輸入“a=abs(-1)”,就會顯示運算結果為“a=1”。且運算結果會在Workspace里出現一個變量a,雙擊后可看到a的值是1。

2.2腳本

可以理解為特殊的函數,這種函數內容的開頭沒有function那行,因此沒有輸入、輸出變量,也沒有函數名。文件擴展名和函數一樣是m,也需要在CommandWindow里運行。腳本都是用戶建立的,方法是:Home->NewScript。一般保存在工作路徑下。腳本的功能就是完成用戶需要的、復雜的計算任務,通常腳本里會調用很多函數。

2.3GUI

一般翻譯為界面,就是人機交互界面的意思。寫腳本處理問題的方法有點麻煩,讓人看起來更像是碼農,所以現在很多問題可以通過界面點點鼠標解決。這時候就需要打開界面,打開方法是:在APPS標簽里可以找到所有已安裝的GUI工具,單擊即可。注意右邊有個小三角可以點開。和函數一樣,用戶也可以自己建立自定義GUI,這部分較為復雜,對新手而言有點遙遠。

2.4toolbox

一般翻譯成工具箱,matlab將功能相近或者應用上自成體系的一組函數和GUI打包成一個toolbox。正版的matlab在購買時,幾乎每一個toolbox都是要單獨收費的,所以toolbox也可以理解為matlab產品的模塊,一個工具箱就是一個產品/商品。

2.5simulink

一般用matlab解決問題的過程是:用戶自定義腳本,在CommandWindow里運行腳本。而腳本的運行邏輯是順序執行,和一般的編程一樣。simulink則提供另一種思路,圖形化編程,有點像labview,這種方法很適合于物理模型的仿真,因此有時用“matlab編程”和“simulink仿真”強調。使用方法是在home標簽下點擊simulink。

3.獲得幫助

常用的獲得幫助有四種方法

①home標簽里,有個Help標志,點開后可以獲得各工具箱/產品的完整幫助文檔。新版本中默認使用在線,改用本地幫助的辦法是在home標簽里,Preferences下的matlab/Help里選擇installedlocally

②cn.mathworks.com官網上找到支持,然后可以獲得教程。這種方法獲得的幫助文檔和第一種方法一樣。

③在CommandWindow里輸入doc+函數名來獲得幫助。比如輸入"docfft"可以獲得離散傅里葉變換函數fft的幫助和范例。這種方法獲得的文檔是前兩種方法文檔中的部分。當然,前提是你要知道函數名,才能找到幫助。這種方法適合于獲得系統自帶函數的使用說明。

④使用GUI時,通常界面的角落里有Help,點開可以獲得幫助。這種方法獲得的文檔是第一和第二種方法文檔中的部分。這種方法適合于獲得系統自帶GUI的使用說明。

這幾種方法中,最常用的是第三種,只要知道自己需要的函數名,就可以用這種方式獲得說明和范例。而實際使用中,一般常用的系統自帶函數,也并不是非常多,大概幾十個?真正需要牢記使用方法的可能就幾個,通常都是知道函數名,要用的時候doc一下。

matlab哪本書最全

Matlab是一種功能強大的數值計算和編程工具,有許多書籍涵蓋不同方面的Matlab使用和應用。以下是一些廣受好評、內容較全面的Matlab書籍:

1.《MATLAB入門經典》(EssentialMATLABforEngineersandScientists)-BrianHahn,DanielT.Valentine

這本書適用于初學者,涵蓋了Matlab的基本概念和使用方法,并提供了很多實際的工程和科學應用示例。

2.《MATLAB高級編程》(Matlab:APracticalIntroductiontoProgrammingandProblemSolving)-StormyAttaway

這本書深入介紹了Matlab的編程概念和技巧,適合希望深入學習Matlab編程的讀者。

3.《MATLAB數值計算實戰》(NumericalComputingwithMATLAB)-CleveMoler

作者CleveMoler是Matlab的創始人之一,這本書從數值計算的角度介紹了Matlab的使用,包含了許多數值計算和數學建模的實例。

4.《MATLAB工程應用實例》(MATLAB:AnIntroductionwithApplications)-AmosGilat

這本書以工程應用為重點,介紹了Matlab的基本功能和工程應用案例。

5.《MATLAB圖形實用教程》(MATLABGraphicsandDataVisualizationCookbook)-NiveditaMajumdar

該書著重講解Matlab的圖形繪制和數據可視化功能,適合希望提高數據可視化技能的讀者。

請根據自己的學習目標和興趣選擇合適的書籍。Matlab有廣泛的應用領域,不同的書籍可能側重點有所不同,你也可以根據自己的具體需求進行選擇。

為什么很多程序員會鄙視MATLAB

用MATLAB的人,絕大多數都是做科學計算、工程理論計算、數值分析、金融分析用的,用戶群主要是科學家、工程總師、數學建模、金融投資決策班子等等,其中不乏院士博士,普通程序員就仰望吧,哪里能鄙視?

matlab方差函數例子

下面是一個使用MATLAB計算方差的例子:

假設有一個向量x,包含一些數據,我們可以使用MATLAB內置的函數var(x)來計算x的方差。例如,假設x如下:

x=[12345]

我們可以使用以下命令計算x的方差:

var(x)

輸出將是:

2.6667

這表示x的方差為2.6667。

matlab調用c語言

如果我有一個用C語言寫的函數,實現了一個功能,如一個簡單的函數:

doubleadd(doublex,doubley){

returnx+y;

}

現在我想要在Matlab中使用它,比如輸入:

>>a=add(1.1,2.2)

3.3000

要得出以上的結果,那應該怎樣做呢?

解決方法之一是要通過使用MEX文件,MEX文件使得調用C函數和調用Matlab的內置函數一樣方便。MEX文件是由原C代碼加上MEX文件專用的接口函數后編譯而成的。

可以這樣理解,MEX文件實現了一種接口,它把在Matlab中調用函數時輸入的自變量通過特定的接口調入了C函數,得出的結果再通過該接口調回Matlab。該特定接口的操作,包含在mexFunction這個函數中,由使用者具體設定。

所以現在我們要寫一個包含add和mexFunction的C文件,Matlab調用函數,把函數中的自變量(如上例中的1.1和2.2)傳給mexFunction的一個參數,mexFunction把該值傳給add,把得出的結果傳回給mexFunction的另一個參數,Matlab通過該參數來給出在Matlab語句中調用函數時的輸出值(如上例中的a)。

比如該C文件已寫好,名為add.c。那么在Matlab中,輸入:

>>mexadd.c

就能把add.c編譯為MEX文件(編譯器的設置使用指令mex-setup),在Windows中,MEX文件類型為mexw32,即現在我們得出add.mexw32文件。現在,我們就可以像調用M函數那樣調用MEX文件,如上面說到的例子。所以,通過MEX文件,使用C函數就和使用M函數是一樣的了。

我們現在來說mexFunction怎樣寫。

mexFunction的定義為:

voidmexFunction(

intnlhs,

mxArray*plhs[],

intnrhs,

constmxArray*prhs[]){

}

可以看到,mexFunction是沒返回值的,它不是通過返回值把結果傳回Matlab的,而是通過對參數plhs的賦值。mexFunction的四個參數皆是說明Matlab調用MEX文件時的具體信息,如這樣調用函數時:

>>b=1.1;c=2.2;

>>a=add(b,c)

mexFunction四個參數的意思為:

nlhs=1,說明調用語句左手面(lhs-lefthandside)有一個變量,即a。

nrhs=2,說明調用語句右手面(rhs-righthandside)有兩個自變量,即b和c。

plhs是一個數組,其內容為指針,該指針指向數據類型mxArray。因為現在左手面只有一個變量,即該數組只有一個指針,plhs[0]指向的結果會賦值給a。

prhs和plhs類似,因為右手面有兩個自變量,即該數組有兩個指針,prhs[0]指向了b,prhs[1]指向了c。要注意prhs是const的指針數組,即不能改變其指向內容。

因為Matlab最基本的單元為array,無論是什么類型也好,如有doublearray、cellarray、structarray……所以a,b,c都是array,b=1.1便是一個1x1的doublearray。而在C語言中,Matlab的array使用mxArray類型來表示。所以就不難明白為什么plhs和prhs都是指向mxArray類型的指針數組。

完整的add.c如下:

//add.c

#include"mex.h"http://使用MEX文件必須包含的頭文件

//執行具體工作的C函數

doubleadd(doublex,doubley){

returnx+y;

}

//MEX文件接口函數

voidmexFunction(

intnlhs,

mxArray*plhs[],

intnrhs,

constmxArray*prhs[]){

double*a;

doubleb,c;

plhs[0]=mxCreateDoubleMatrix(1,1,mxREAL);

a=mxGetPr(plhs[0]);

b=*(mxGetPr(prhs[0]));

c=*(mxGetPr(prhs[1]));

*a=add(b,c);

}

mexFunction的內容是什么意思呢?我們知道,如果這樣調用函數時:

>>output=add(1.1,2.2);

在未涉及具體的計算時,output的值是未知的,是未賦值的。所以在具體的程序中,我們建立一個1x1的實double矩陣(使用mxCreateDoubleMatrix函數,其返回指向剛建立的mxArray的指針),然后令plhs[0]指向它。接著令指針a指向plhs[0]所指向的mxArray的第一個元素(使用mxGetPr函數,返回指向mxArray的首元素的指針)。同樣地,我們把prhs[0]和prhs[1]所指向的元素(即1.1和2.2)取出來賦給b和c。于是我們可以把b和c作自變量傳給函數add,得出給果賦給指針a所指向的mxArray中的元素。因為a是指向plhs[0]所指向的mxArray的元素,所以最后作輸出時,plhs[0]所指向的mxArray賦值給output,則output便是已計算好的結果了。

上面說的一大堆指向這指向那,什么mxArray,初學者肯定都會被弄到頭暈眼花了。很抱歉,要搞清楚這些亂糟糟的關系,只有多看多練。

實際上mexFunction是沒有這么簡單的,我們要對用戶的輸入自變量的個數和類型進行測試,以確保

輸入正確。如在add函數的例子中,用戶輸入chararray便是一種錯誤了。

從上面的講述中我們總結出,MEX文件實現了一種接口,把C語言中的計算結果適當地返回給Matlab罷了。當我們已經有用C編寫的大型程序時,大可不必在Matlab里重寫,只寫個接口,做成MEX文件就成了。另外,在Matlab程序中的部份計算瓶頸(如循環),可通過MEX文件用C語言實現,以提高計算速度。

MATLAB有哪些在工業界部署的實例

官網:

重點說幾個領域:

1.汽車領域。simulink進行控制策略的開發,以及控制代碼的生成。

汽車行業基本上是一個萬億級別的行業,國內汽車行業基本上是離不開matlab。目前本人也是在汽車行業。

2.航空航天。

具體沒有見過,但是據說波音是用matlab工具箱進行開發的。

3.通信方向

關于matlab程序實例大全,matlab程序編寫的介紹到此結束,希望對大家有所幫助。

返回列表
上一篇:
下一篇: