第一篇:matlab與sql總結
總結
一個星期前老師給了一個任務,要求用GUI做成一個simulink仿真界面,通過matlab與SQL的連接,然后把仿真結果存到sql里建的數據庫里。從一開始什么都不懂,到現在可以用GUI做一個簡單的界面,以及matlab與sql的連接,這一個星期感慨頗多,尤其是查閱相關資料的痛苦,及找到可以借鑒資料的喜悅,到最后逐漸有了一個清晰的思想。過程如下:
一首先了解GUI 1.1 GUI簡介[1,2]
圖形用戶界面(graphical user interface,GUI)是由窗口、光標、按鍵、菜單、文字說明等對象(Ob-ject)構成的一個用戶界面。用戶通過一定的方法(如鼠標或鍵盤)選擇、激活這些圖形對象,使計算機產生某種動作或變化,比如實現計算、繪圖等假如科技工作者僅僅執行數據分析、解方程等工作,一般不會考慮GUI的制作。但是如果想向客戶提供應用程序,想進行某種技術、方法的演示,想制作一個供反復使用且操作簡單的專用工具,那么圖形用戶界面是最好的選擇之一。開發實際的應用程序時應該盡量保持程序的界面友好,因為程序界面是應用程序和用戶進行交互的環境。在當前情況下,使用圖形用戶界面是最常用的方法。提供圖形用戶界面可使用戶更方便地使用應用程序,不需要了解應用程序怎樣執行各種命令,只需要了解圖形界面組件的使用方法;同時,不需要了解各種命令是如何執行的,只要通過用戶界面進行交互操作就可以正確執行程序。
在Matlab7.0中,圖形用戶界面是一種包含多種圖形對象的界面,典型的圖形界面包括圖形顯示區域、功能按鈕空間以及用戶自定義的功能菜單等。為了讓界面實現各種功能,需要對各個圖形對象進行布局和時間編程。這樣,當用戶激活對應的GUI對象時,就能執行相應的時間行為。最后,必須保存和發布自己創建的GUI,使得用戶可以應用GUI對象。在Matlab中,所有對象都可以使用M文件進行編寫。GUI也是一種Matlab對象,因此,可以使用M文件來創建GUI。使用M文件創建GUI的方法也是最基礎的,使用其他方法創建GUI圖形界面時,實現圖形控件的各種功能時,也需要編寫相應的程序代碼。
除了使用M文件來創建GUI對象之外,Matlab還為用戶開發圖形界面提供了一個方便高效的集成開發環境:Matlab圖形用戶界面開發環境(matlab graphical user interface development envi-ronment)簡稱GUIDE,其主要是一個界面設計工具集。Matlab7.0將所有GUI所支持的用戶控件都集成起來,同時提供界面外觀、屬性和行為響應方法的設置方法。除了可以使用GUIDE創建GUI之外,還可以將設計好的GUI界面保存為一個FIG資源文件,自動生成對應的M文件。該M文件包含了GUI初始化代碼和組建界面布局的控制代碼。使用GUIDE創建GUI對象執行效率高,可以交互式地進行組件布局,還能生成保存和發布GUI的對應文件。
FIG文件:該文件包含GUI圖形窗口及其子對象的完全描述,包含所有相關對象的屬性信息,可以調用hgsave命令或者使用M文件編輯器的File>Save命令生成該文件。FIG文件是一個二進制文件,包含系列化的圖形窗口對象。所有對象的屬性都是用戶創建圖形窗口時保存的屬性。該文件最主要的功能是對象句柄的保存。
M文件:該文件包含GUI設計、控制函數及控件的回調函數,主要用來控制GUI展開時的各種特征。該文件基本上可以分為GUI初始化和回調函數2個部分,控件的回調函數根據用戶與GUI的具體交互行為分別調用。應用程序M文件使用open-fig命令來顯示GUI對象,但是該文件不包含用戶界面設計的代碼,對應代碼由FIG文件保存。1.2 設計GUI步驟
簡單說來,一個好的界面應遵循以下3個原則:簡單性(Simplicity)、一致性(Consistency)及習常性(Familiarity)。界面制作包括界面設計和程序實現。具體制作步驟如下[3,4]: 1)分析界面所要求實現的主要功能,明確設計任務;2)在稿紙上繪出界面草圖,并站在使用者的角度來審查草圖;3)按構思的草圖,上機制作(靜態)界面,并對其進行檢查;4)編寫界面動態功能的程序,對功能進行逐項檢查。
以上過程只是一般原則,在設計中,步驟之間也可能要交叉執行或復合執行;設計和實現過程往往不是一步到位的,可能需要反復修改,才能獲得滿意的界面。建議先進行界面布局編碼,后進行動態交互功能的編碼。
二數據庫與matlab的連接
2.1 ODBC簡介[5]
ODBC(開放式數據庫的連接)是一種應用程序的接口(API)。這種接口提供了獨立于任何的數據庫管理系統編寫應用程序的能力。ODBC通過ODBC驅動程序提供了對不同的數據庫供應商的一組應用程序接口來給特殊的數據庫管理系統(DBMS)。用戶的應用程序使用這組API來調度ODBC驅動程序,然后驅動程序通過SQL語句同DBMS發生聯系。DBC提供了數據庫管理系統的標準接口,從而使應用人員在編程時不必關心底層的DBMS,大大提高了工作效率。2.2 32位matlab與32 位sql位數據庫之間的連接 2.2.1數據庫的建立
在SQL Server2008中建立數據庫test,在其中建立表stock。2.2.2 SQL數據源的配置
建立ODBC數據源:控制面板->管理工具->ODBC數據源->用戶DNS。點擊“添加”,數據源名稱可任意命名。服務器選擇自己指定的。2.2.3.MATLAB連接數據庫M文件的編寫 1 連接數據庫 代碼如下
>> conn=database('test','sa','123')%test是剛剛建立的數據庫名稱 %sa是數據庫登陸名%‘123’是數據庫登陸密碼 2 檢驗數據庫連接狀態
>> Ping(conn);%用于查看現在數據庫連接狀態 3 數據寫入
>>expdata=[2001 7 12 000001 0.123432];>>fastinsert(conn,{'year','month','day','id','stock_return'},expdata);備注:
(1)Conn一個變量,是用于保存數據庫連接字符竄的,conn=database('test','sa','123');只要數據庫已經連接上,后面就可以直接引用。
(2)'year','month','day','id','stock_return'是數據庫表格中的字段名(3)expdata=[2001 7 12 000001 0.123432]是我們要寫入數據庫的信息,分別對應于數據表中的各個字段。這里我們寫入數據庫的是number型的,因此矩陣式數字型。即:expdata=[2001 7 12 000001 0.123432]。(4)寫入數據前提是已經成功連接數據庫。4 數據的查詢 代碼:
>>curs=(conn,'select * from test.dbo.stock')%建立數據庫的連接 >>curs=exec(conn,'select * from test.dbo.stock where id=1')%從test數據庫,stock表格里面選擇 股票代碼為1的股票的所有信息 >>curs=fetch(curs)%取回數據庫游標里面的數據; >>curs.data%讀取游標里面的數據 5 顯示查詢后的信息: >>curs.data 6關閉鏈接對象和游標——close 當不再使用數據庫的鏈接對象時要及時關閉,這樣才能及時的釋放出內存,而且每次鏈接后所需要的內存量是非常大的,要是不及時關閉的話對后續計算的影響將非常非常的大。close(curs)close(conna)
2.3 64位matlab與64位sql數據庫之間的連接(以下為網絡整理未證實)
64位Matlab無法通過ODBC接口訪問SQL Server,我們可以跳出ODBC,而直接使用JDBC來訪問數據庫
第一步,從Microsoft.COM 下載Microsoft SQL Server JDBC Driver 3.0,下載地址可以將上述關鍵字扔進Google中搜索就得到了。解壓縮可以得到很多文件,我們需要的是其中的sqljdbc4.jar和sqljdbc.jar這兩個文件。其中后者是前者的子集,只要不出問題,直接使用前者就可以了。
第二步,在Matlab中加入jar。具體做法是找到“classpath.txt”文件,例如我的這個文件位置是 “D:Matlab2010Btoolboxlocalclasspath.txt”,在文件的最后加入sqljdbc4.jar的完整路徑,例如我的是:“D:/sqljdbc30/enu/sqljdbc4.jar”,注意斜杠怎么寫。
第三步,啟動Matlab,啟動過程中如果沒有出錯,那么這個JDBC Connector就可以用了。
上面三步就把JDBC Connector建好了。接下來我們就開始連接數據庫。第一步,建立一個到數據庫的連接。假設SQL Server地址是 192.30.1.117,端口是 1433,數據庫名稱是RTQ,用戶名user,密碼 pwd,那么用下面的語句建立一個到該數據庫的連接。
conn=database('RTQ','user','pwd','com.microsoft.sqlserver.jdbc.SQLServerDriver',...'jdbc:sqlserver://192.30.1.117:1433;databaseName=RTQ');
參考文獻
[1]MATLAB Application Program Interface Guide[C],TheMathworks Inc,1999 [2]王躍強、王紀龍、王云才,VB程序中實現調用MATLAB的方法[J],計算機應用,2001,vol.21,No.2 [3]劉炳文編著,精通Visual Basic 6.0中文版[M]北京:電子工業出版社,1999.7 [4]劉衛國,科學計算與MATLAB語言[M],中國鐵道出版社,2000.4 [5]侯春生,陳汝義,袁愛進,喬 毅,唐明新.MATLAB/VB/SQL Server編程實現數據管理[J].微型電腦應用,Vol.18,No.7,2002
第二篇:SQL總結
1.SQL語句的With cte as用法:
with as短語,也叫做子查詢部分。即定義一個SQL片斷,該片斷會讓整個SQL語句所用到。eg:
with
cr as
(select CountryRegionCode from person.CountryRegion where Name like 'C%')
select * from person.StateProvince where CountryRegionCode in(select * from cr)
CTE后面必須直接跟使用CTE的SQL語句(如select,insert,update等),否則,CTE將失效。CTE后面也可以跟其他的CTE,但只能使用一個with,多個CTE中間用逗號(,)分隔。eg:
with
cte1 as
(select * from table1 where name like 'abc%'),cte2 as
(select * from table2 where id > 20),cte3 as
(select * from table3 where price < 100)
select a.* from cte1 a, cte2 b, cte3 c where a.id = b.id and a.id = c.id
2.case when then多條件判斷:
CASE
WHEN 條件1 THEN 結果1
WHEN 條件2 THEN 結果2
WHEN 條件3 THEN 結果3
WHEN 條件4 THEN 結果4
.........WHEN 條件N THEN 結果N
ELSE 結果X
END
Case具有兩種格式。簡單Case函數和Case搜索函數。
--簡單Case函數
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函數
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END
3.select語句前面加@轉義字符的作用是強制后面的字符串中不使用轉義字符,當作字符串
處理。
eg:string ss=@“aanaa”;輸出:aanaa
string ss=“aanaa”;
輸出:aa
aa
4.select getdate():從SQL SERVER返回當前的時間與日期。
select first():函數返回指定的字段中第一個記錄的值。
select last():函數返回指定的字段中最后一個記錄的值。
select ucase():把字段的值轉換為大寫。
select lcase():把字段的值轉換為小寫。
select round():用于把數值字段設入為指定的小數位數。SELECT ROUND(column_name,decimals)FROM table_name
column_name 必需。要舍入的字段。decimals 必需。規定要返回的小數位數。format():用于對字段的顯示進行格式化。
SELECT ProductName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD')as PerDate FROM Products
5.union與union all的區別:
對重復結果的處理,UNION ALL 會將每一筆符合條件的資料都列出來,無論資料值有無重復
6.SELECT INTO 語句從一個表中選取數據,然后把數據插入另一個表中。
SELECT INTO 語句常用于創建表的備份復件或者用于對記錄進行存檔。
將整個table1復制到table2中:
INSERT INTO SELECT語句
語句形式為:Insert into Table2(field1,field2,...)select value1,value2,...from Table1(要求目標表Table2必須存在,由于目標表Table2已經存在,所以我們除了插入源表Table1的字段外,還可以插入常量。)
SELECT INTO FROM語句
語句形式為:SELECT value1, value2 into Table2 from Table1(要求目標表Table2不存在,因為在插入時會自動創建表Table2,并將Table1中指定字段數據復制到Table2中)
7.nchar :固定長度的 Unicode 數據,最大長度為 4,000 個字符。
nvarchar:可變長度Unicode 數據,其最大長度為4,000字符。
char: 固定長度的非 Unicode 字符數據,最大長度為 8,000 個字符。
varchar:可變長度的非Unicode數據,最長為8,000 個字符。
char和varchar都是字符串類型的,用Unicode編碼的字符串,結果是字符的整數值.8.select 1 from:
select 1 from mytable;與select anycol(目的表集合中的任意一行)from mytable;與select * from mytable 作用上來說是沒有差別的,都是查看是否有記錄,一般是作條件用的。select 1 from 中的1是一常量,查到的所有行的值都是它,但從效率上來說,1>anycol>*,因為不用查字典表。
查看記錄條數可以用select sum(1)from mytable;等價于select sum(*)from mytable;
9.SQL中的字符匹配:
[NOT] LIKE '<匹配串>' [ESCAPE '<換碼字符>']
<匹配串>可以是一個完整的字符串,也可以含有通配符%和_
%代表任意長度的字符串。eg:a%b表示以a開頭以b結尾的任意長度的字符串。_代表任意單個字符。eg:a_b表示以a開頭,以b結尾的長度為3的任意字符串。ESCAPE定義轉義字符,當轉義符置于通配符之前時,該通配符解釋為普通字符。
10.GROUP BY子句將查詢結果按某一列或多列的值分組,值相等的為一組。HAVING短語給出選擇組的條件。
11.ROW_NUMBER()OVER函數的基本用法 :
row_number()OVER(PARTITION BY COL1 ORDER BY COL2)表示根據COL1分組,在分組內部根據 COL2排序,而此函數計算的值就表示每組內部排序后的順序編號(組內連續的唯一的)
select row_number()over(order by field2 desc)as row_number,* from t_table order by field1 desc Desc:倒序,Asc:正序
12.DbDataAdapter.Fill 方法(DataTable, IDbCommand, CommandBehavior):
在DataTable中添加或刪除新行以匹配使用指定 DataTable 和 IDataReader 名稱的數據源中的行。
13.SqlCommand.ExecuteScalar 方法:執行查詢,并返回查詢所返回的結果集中第一行的第一列,忽略其他列或行。
14.inner join(等值連接)只返回兩個表中聯結字段相等的行
left join(左聯接)返回包括左表中的所有記錄和右表中聯結字段相等的記錄
right join(右聯接)返回包括右表中的所有記錄和左表中聯結字段相等的記錄
15.e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem指觸發的類型為DadaList中的基本行或內容行
16.order by的用法:
如果Order by 中指定了表達式Nulls first則表示null值的記錄將排在最前(不管是asc 還是 desc)
如果Order by 中指定了表達式Nulls last則表示null值的記錄將排在最后(不管是asc 還是 desc)
eg:將nulls始終放在最前
select * from zl_cbqc order by cb_ld nulls first
--將nulls始終放在最后
select * from zl_cbqc order by cb_ld desc nulls last
單列升序:select
單列降序:select
多列升序:select
多列降序:select
多列混合排序:select
17.C#中NULL,“",DBNULL,String.Empty,Convert.IsDBNull區別
(1)NULL
null 關鍵字是表示不引用任何對象的空引用的文字值。null 是引用類型變量的默認值。那么也只有引用型的變量可以為NULL,如果 int i=null,的話,是不可以的,因為Int是值類型的。
(2)DBNULL
DBNull在DotNet是單獨的一個類型,該類只能存在唯一的實例,DBNULL.Value,DBNull唯一作用是可以表示數據庫中的字符串,數字,或日期,為什么可以表示原因是DotNet儲存這些數據的類(DataRow等)都是以 object 的形式來儲存數據的。對于 DataRow , 它的 row[column] 返回的值永遠不為 null,要么就是具體的為column 的類型的值。要么就是 DBNull。所以 row[column].ToString()這個寫法永遠不會在ToString那里發生NullReferenceException。DBNull 實現了 IConvertible。但是,除了 ToString 是正常的外,其他的ToXXX都會拋出不能轉換的錯誤。
(3)”“和String.Empty
這兩個都是表示空字符串,其中有一個重點是string str1=”“ 和 string str2=null 的區別,這樣定義后,str1是一個空字符串,空字符串是一個特殊的字符串,只不過這個字符串的值為空,在內存中是有準確的指向的,string str2=null,這樣定義后,只是定義了一個string 類的引用,str2并沒有指向任何地方,在使用前如果不實例化的話,都將報錯。
(4)Convert.IsDBNull()
Convert.IsDBNull()返回有關指定對象是否為 DBNull 類型的指示,即是用來判斷對象是否為DBNULL的。其返回值是True或Flase。
string.Empty不分配存儲空間
”“分配一個長度為空的存儲空間
所以一般用string.Empty
null表示一個對象的指向無效,即該對象為空對象
DBNull。Value表示一個對象在數據庫中的值為空,或者說為初始化,DBNull。Value對象指向有效的對象
18.DataSet.Relations.add():獲取用于將表鏈接起來并允許從父表瀏覽到子表的關系的集合。DataSet.Relations.Add(”關聯名稱“, 父關聯主鍵字段, 子關聯外來鍵字段)
19.DataBind():在Page_Load方法中我們建立了一個數組(ArrayList),并通過DataBind方法將這個數組捆綁到了DropDownList控件中,使得DropDownList最后有數據顯示:)
20.IN 操作符允許我們在 WHERE 子句中規定多個值。
SQL IN 語法:SELECT column_name(s)FROM table_nameWHERE column_name IN(value1,value2,...)
21.DataBinder.Eval方法:在運行時使用反射來分析和計算對象的數據綁定表達式<%# DataBinder.Eval(Container.DataItem, ”ColumnName“)%>
eval()函數可計算某個字符串,并執行其中的的 JavaScript 代碼。
可以理解為反射的綁定
或者理解為將Eval()里的字符串轉換為表達式
在數據綁定的時候常用,其實是通過反射的手段實現了綁定
22.sql語句 count(1)與 count(*)的區別 :
count(1),其實就是計算一共有多少符合條件的行。
1并不是表示第一個字段,而是表示一個固定值。
其實就可以想成表中有這么一個字段,這個字段就是固定值1,count(1),就是計算一共有多少個1.count(*),執行時會把星號翻譯成字段的具體名字,效果也是一樣的,不過多了一個翻譯的動作,比固定值的方式效率稍微低一些。
23.DataTable.NewRow :創建與該表具有相同框架的新的DataRow
24.ExcuteNonQuery():
如果要創建或修改數據庫結構,操作成功時返回值為-1;如果要更新記錄,返回值為操作影響的記錄數;
ExecuteNonQuery()方法主要用于用戶更新數據,通常它使用Update,Insert,Delete語句來操作數據庫,其方法返回值意義:對于 Update,Insert,Delete 語句 執行成功是返回值為該命令所影響的行數,如果影響的行數為0時返回的值為0,如果數據操作回滾得話返回值為-1,關于MyCommand的ExecuteNonQuery(),ExecuteScalar(),ExecuteReader方法的區別:
***ExecuteNonQuery():執行SQL,返回一個整型變量,如果SQL是對數據庫的記錄進行操作,那么返回操作影響的記錄條數,如果是SQL=”CREATE TABLE LookupCodes(code_id smallint IDENTITY(1,1)PRIMARY KEY CLUSTERED, code_desc varchar(50)NOT NULL)"那么在表創建成功后該方法返回-1。
***ExecuteScalar():執行SQL,(如果SQL是查詢Select)返回查詢結果的第一行第一列,如果(如果SQL不是查詢Select)那么返回未實列化的對象,因為對象未實列化,所以返回結果不能ToString(),不能Equals(null),也就是說返回結果沒有任何作用
***executeReader方法執行SQL,(如果SQL是查詢Select)返回查詢結果的集合,類型是 System.Data.OleDb.OleDbDataReader,你可以通過此結果,獲取查詢的數據。如果(如果SQL不是查詢Select)那么返回一個沒有任何數據的System.Data.OleDb.OleDbDataReader類型的集合(EOF)
25.DbDataAdapter.Fill 方法(DataTable):在 DataSet 的指定范圍中添加或刷新行,以與使用 DataTable 名稱的數據源中的行匹配。
26.Decimal:decimal(2,1),有效長度為2,小數位占1位。
varchar:可變長度的非Unicode數據,最長為8,000 個字符。
nvarchar:可變長度Unicode 數據,其最大長度為4,000字符。
char: 固定長度的非 Unicode 字符數據,最大長度為 8,000 個字符。
nchar :固定長度的 Unicode 數據,最大長度為 4,000 個字符。
char和varchar都是字符串類型的,用Unicode編碼的字符串,結果是字符的整數值.timestamp:數據類型是一種特殊的數據類型,用來創建一個數據庫范圍內的唯一數碼。一個表中只能有一個timestamp列。每次插入或修改一行時,timestamp列的值都會改變。盡管它的名字中有“time”,但timestamp列不是人們可識別的日期。在一個數據庫里,timestamp值是唯一的Uniqueidentifier特殊數據型
SELECT UPPER('Kelly'):upper是數據庫的字符串函數,它的作用是將傳遞給它的英文字符串中小寫字母轉換為大寫(大寫的保持不變);
SELECT LOWER('kelly'):lower將指定字符串中的大寫字母換成小寫字母
SUBSTRING(colunm name,startposition,length)從指定字符串中取字符
eg:SQL實例:
顯示每個地區的總人口數和總面積.
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
先以region把返回記錄分成多個組,這就是GROUP BY的字面含義。分完組后,然后用聚合函數對每組中的不同字段(一或多條記錄)作運算。
顯示每個地區的總人口數和總面積.僅顯示那些面積超過1000000的地區。
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HAVING SUM(area)>1000000
27.SELECT [ALL|DISTINCT] <目標列表達式> [別名] [,<目標列表達式> [別名]]…… FROM <表名或視圖名> [別名] [,<表名或視圖名> [別名]]……
[WHERE <條件表達式>]
[GROUP BY <列名1> [HAVING <條件表達式>]]
[ORDER BY <列名2> [ASC|DESC]]
INSERT
INTO <表名> [(<屬性列1>[,<屬性列2>……])]
VALUES(<常量1> [,<常量2>]……)
UPDATE <表名>
SET <列名>=<表達式> [,<列名>=<表達式>]……
[WHERE <條件>]
DELETE
FROM <表名>
[WHERE <條件>]
第三篇:matlab總結
班級: 學號: 姓名:
Matlab學習綜述
MATLAB是一種科學計算軟件,專門以矩陣的形式處理數據。MATLAB將高性能的數值計算和強大的數據可視化功能集成在一起,并提供了大量的內置函數,從而被廣泛地應用于科學計算、控制系統、信息處理等領域的分析、仿真和設計工作,而且利用MATLAB產品的開放式結構,可以非常容易地對MATLAB的功能進行擴充。
MATLAB產品由若干個模塊組成,不同的模塊完成不同的功能,其中主要的核心模塊有MATLAB、MATLAB Toolboxex、MATLAB Compiler Simulink、Simulink Blocksets、Real-time Workshop(RTW)Stateflow。這些產品大體上可以分為以MATLAB為基礎的產品和以Simulink為基礎的產品兩大分支。其中,MATLAB是MATLAB產品家族的基礎,任何其他MATLAB產品產品都以這個模塊為基礎。MATLAB的桌面應用程序開發工具是以MATLAB Compiler為核心的一組編譯工具。Simulink是基于MATLAB的框圖設計環境,可以用來對各種動態系統進行建模,分析和仿真,它的建模范圍廣泛,可以針對任何能夠用數字來描述的系統進行建模。
一種完整的計算機應用語言應該提供對數據的描述和對數據的操作。在M語言中,最常用的數據類型表現手段和形式就是變量和常量,由于MATLAB軟件自身的特點,它是一種以數值計算為基礎的軟件,因此M語言的基本處理單位是數值矩陣或者數值向量,在M語言中統一將矩陣或者向量稱之為數組,因此掌握一些基本的矩陣、向量和數組操作的基本知識就成為了掌握MATLAB軟件的基礎。變量和常量是編程語言中類型的表現手段和形式,掌握變量和常量的概念也是掌握M語言編程的基礎。所謂變量,就是指在程序運行中需要改變數值的量,每一個變量都具有一個名字,變量將在內存中占據一定的空間,以在程序運行的過程中保存其數值,對變量的命名有相應的要求:變量必須以字母開頭,后面可以是字母、數字或者下劃線之間的組合。所謂常量就是在程序運行的過程中不需要改變數值的量。
MATLAB專門以矩陣作為基本的運算單位,首先要掌握向量、矩陣、索引和多維數組的概念,以及在MATLAB環境下創建向量、矩陣和多維數組的方法,以及操作矩陣和多維數值的函數的使用方法。
目前的MATLAB版本中不僅有多達十幾種的基本數據類型。在不同的專業工具箱中還有特殊的數據類型,并且MATLAB還支持面向對象的編程技術,支持用戶自定義的數據類型。獲取MATLAB的數據類型可以在MATLAB命令行窗體中鍵入help datatypes。MATLAB的數據類型包括基本的數值類型,邏輯類型數據、元胞數值、結構和字符串等,需要指出一點,MATLAB的基本數據是雙精度數據類型和字符類型。MATLAB提供了完整的編寫應用程序的功能,這種能力被稱為M語言的高級語言來實現。這種語言是一種解釋性語言,利用該語言編寫的代碼僅能被MATLAB接受,被MATLAB解釋執行。其實,一個M語言文件就是由若干MATLAB的命令組合在一起構成的,和C語言類似。M語言文件都是標準的純文本格式的文件,其文件的擴展名為.m。MATLAB的函數主要有兩類,一類被稱為內建函數,這類函數是由MATLAB的內核提供的,能夠完成基本的運算,例如三角函數、矩陣運算函數等。另外一類函數就是利用高級語言開發的函數文件,這里的函數文件包括用C/FORTRAN語言開發的MEX函數文件,也包括了M函數文件。
M語言文件可以分為兩類,其中一類是腳本文件,另一類是函數文件,腳本文件是最簡單的一種M語言文件。所謂腳本文件就是由一系列的M語言文件指令和命令組成的純文本格式的M文件,執行腳本文件時,文件中的指令或者命令按照出現在腳本文件中的順序依次執行。腳本文件沒有輸入參數,也沒有輸出參數,腳本文件處理的數據或者變量必須在MATLAB的公共工作空間中,腳本文件主要是由注視行和代碼行組成。
函數文件是M文件最重要的組成部分,M語言函數文件能夠接受用戶的輸入參數,并進行計算,然后將計算結果作為函數的返回值返回給調用者,M函數文件和腳本文件不同,函數文件不僅有自己特殊的文件格式,而且不同的函數還分別具有自己的工作空間,函數文件的輸/輸出參數不同,這些輸入/輸出參數在定義的時候不需要指出變量的類型,因為MATLAB默認這些參數都使用雙精度類型,這樣可以簡化程序的編寫。M語言的函數文件不僅可以有一個輸入參數和一個返回值,還可以為M語言函數文件定義多個輸入參數和多個輸出參數,同一個M函數文件中可以包含多個函數。如果在同一個M函數文件中包含了多個函數,那么將出現在文件中的第一個M函數稱為主函數,其余的函數稱為子函數。
經過這么一段時間的學習,對MATLAB有了初步的認識。但是關于它還有很多知識我們所不知道,還有待進一步的學習。以上內容是我對這學期所學課程的總結,可能有些地方總結的不夠到位,因為有些地方學習的不夠深入,所以,以后要更加努力,在MATLAB的學習上多花一些時間,為以后的學習和工作打下基礎。
第四篇:MATLAB總結
目錄
一、Matlab相關說明.....................................................................2
二、Matlab操作注意事項..............................................................2
三、Matlab常用代碼(圖像處理相關)......................................5
四、Matlab常用快捷鍵.................................................................7
五、Matlab學習心得.....................................................................8
一、Matlab相關說明
Matlab是“Matrix Laboratory”的縮寫,意為“矩陣實驗室”。MATLAB和Mathematica、Maple并稱為三大數學軟件。它在數學類科技應用軟件中在數值計算方面首屈一指。MATLAB可以進行矩陣運算、繪制函數和數據、實現算法、創建用戶界面、連接其他編程語言的程序等,主要應用于工程計算、控制設計、信號處理與通訊、圖像處理、信號檢測、金融建模設計與分析等領域。
MATLAB的基本數據單位是矩陣,它的指令表達式與數學、工程中常用的形式十分相似,故用MATLAB來解算問題要比用C,FORTRAN等語言完成相同的事情簡捷得多,并且MATLAB也吸收了像Maple等軟件的優點,使MATLAB成為一個強大的數學軟件。在新的版本中也加入了對C,FORTRAN,C++,JAVA的支持。
我所使用的Matlab版本是2012a,下文所涉及到圖片、專業術語等都是以此版本為基礎。
二、Matlab操作注意事項
1.打開并運行一個現存的m文件且這個m文件運行時需用到同一級文件夾中的其他文件,會出現如下提示框:
選擇變更文件夾,將當前文件夾變更為這個m文件所在的文件夾。
2.不小心點錯或關閉了各種小窗口,將Matlab恢復成默認布局
點擊桌面—桌面布局—默認
3.查看某個函數的用法
在命令窗口輸入該變量的名稱,回車即可。
4.查找某個函數的用法
在命令窗口輸入help+函數的名稱,回車后會自動顯示該函數的相關信息。
5.運行文件后報錯 如下圖所示,命令窗口中報錯的第一段是錯誤的原因,后面幾段會顯示發生錯誤的文件夾以及在該文件夾中的位置。
點擊文件的名稱,會跳轉出一個提示框,上面顯示了該文件的具體實現功能,如下圖所示。點擊文件名后面的行標號,可以直接跳轉到發生錯誤的那一行。
6.如何編輯界面?
修改如圖所示的fig文件
1.新建一個GUI文件
2.選擇打開現存的GUI文件,點擊Open,就可以對當前界面進行編輯了。
7.如何將MAtlab中默認的current folder修改為自己想要的路徑,每次啟動后都默認是自己 設定的這個路徑?
>>右鍵matlab 快捷方式,屬性-快捷方式-起始位置 填入你自己的工作目錄。8.把圖復制到WORD文件的方法:電機EDIT—>Copy Figure—>Ctrl+V 9.輸入時,標點必須是英文狀態下的
10.大多數情況下,matlab對空格不予處理
11.小括號代表運算級別,中括號用于生成矩陣,大括號用于構成單元數組
12.分號;的作用:不顯示運算結果,但對圖形窗口不起作用。分號也用于區分行,13.逗號,的作用:函數參數分隔符,也用于區分行,顯示運算結果,當然不加標點也顯示運算結果
14.冒號:多用于數組
15.續行號...不能放在等號后面使用,不能放在變量名中間使用,起作用時默認顯藍色 16.雙引號'string'是字符串的標識符 17.感嘆號!用于調用操作系統運算
18.百分號%是注釋號,百分號后面直到行末的語句matlab跳過執行.另外還有一個塊注釋,即對多行一次注釋,會使用到,格式為(注意%{ 和%}都要單獨成行)%{ %} 19.矩陣中用圓括號表示下標,單元數組用大括號表示下標
20.對變量名的基本要求:區分大小寫,不超過63個字符,以字母開頭,只能是字母,數字和下劃線
三、Matlab常用代碼(圖像處理相關)
1.創建一個文件夾 mkdir('D:myData');2.將圖片保存到指定的文件夾
image_source=strcat('result',num2str(loop),'.jpg');imwrite(F.cdata,image_source);3.將電影轉成圖片序列
fnum=size(mov,2);%讀取電影的禎數 for i=1:fnum strtemp=strcat('C:UsersAdministratorDesktopparticalfiltermyself粒子濾波',int2str(i),'.jpg');%將每禎轉成jpg的圖片 imwrite(mov(i).cdata,strtemp,'jpg');end
4、模擬噪聲生成函數和預定義濾波器
① imnoise:用于對圖像生成模擬噪聲,如:
i=imread('104_8.tif');j=imnoise(i,'gaussian',0,0.02);%模擬高斯噪聲 ② fspecial:用于產生預定義濾波器,如: h=fspecial('sobel');%sobel水平邊緣增強濾波器 h=fspecial('gaussian');%高斯低通濾波器 h=fspecial('laplacian');%拉普拉斯濾波器
h=fspecial('log');%高斯拉普拉斯(LoG)濾波器 h=fspecial('average');%均值濾波器
5、圖像文件I/O函數命令
imfinfo 返回圖形圖像文件信息
語法:info=imfinfo(filename,fmt)info=imfinfo(filename)imread 從圖像文件中讀取(載入)圖像
語法:A=imread(filename,fmt)[X,map]=imread(filename,fmt)[...]=imread(filename)[...]=imread(URL,...)[...]=imread(...,idx)(CUR,ICO,and TIFF only)[...]=imread(...,'frames',idx)(GIF only)[...]=imread(...,ref)(HDF only)[...]=imread(...,'BackgroundColor',BG)(PNG only)[A,map,alpha] =imread(...)(ICO,CUR,PNG only)imwrite 把圖像寫入(保存)圖像文件中
語法:imwrite(A,filename,fmt)imwrite(X,map,filename,fmt)imwrite(...,filename)imwite(...,Param1,Val1,Param2,Val2...)imcrop 剪切圖像
語法:I2=imcrop(I)X2=imcrop(X,map)RGB2=imcrop(RGB)I2=imcrop(I,rect)X2=imcrop(RGB,rect)[...]=imcrop(x,y,...)[A,rect]=imcrop(...)[x,y,A,rect]=imcrop(...)
6.impixel 確定像素顏色值
語法:P=impixel(I)P=impixel(X,map)P=impixel(RGB)P=impixel(I,c,r)P=impixel(X,map,c,r)P=impixel(RGB,c,r)[c,r,P]=impixel(...)P=impixel(x,y,I,xi,yi)P=impixel(x,y,RGB,xi,yi)P=impixel(x,y,X,map,xi,yi)[xi,yi,P]=impixel(x,y,...)
7.二進制圖像操作函數
applylut 在二進制圖像中利用lookup表進行行邊沿操作 語法:A=applylut(BW,LUT)bwarea 計算二進制圖像對象的面積 語法:total=bwarea(BW)bweuler 計算二進制圖像的歐拉數 語法:eul=bweuler(BW)
8.顏色空間轉換函數
hsv2rgb 轉換HSV值為RGB顏色空間:M=hsv2rgb(H)ntsc2rgb 轉換NTSC值為RGB顏色空間:rgbmap=ntsc2rgb(yiqmap)RGB=ntsc2rgb(YIQ)rgb2hsv 轉換RGB值為HSV顏色空間:cmap=rgb2hsv(M)rgb2ntsc 轉換RGB值為NTSC顏色空間:yiqmap=rgb2ntsc(rgbmap)YIQ=rgb2ntsc(RGB)rgb2ycbcr 轉換RGB值為YCbCr顏色空間:ycbcrmap=rgb2ycbcr(rgbmap)YCBCR=rgb2ycbcr(RGB)ycbcr2rgb 轉化YCbCr值為RGB顏色空間:rgbmap=ycbcr2rgb(ycbcrmap)RGB=ycbcr2rgb(YCBCR)
9.類型轉換函數
im2bw 轉換圖像為二進制圖像
語法:BW=im2bw(I,level)BW=im2bw(X,map,level)BW=im2bw(RGB,level)im2double 轉換圖像矩陣為雙精度型
語法:I2=im2double(I1)RGB2=im2double(RGB1)I=im2double(BW)X2=im2double(X1,'indexed')double 轉換數據為雙精度型 語法:double(X)unit8、unit16轉換數據為8位、16位無符號整型: i=unit8(x)i=unit16(x)im2unit8 轉換圖像陣列為8位無符號整型
語法:I2=im2unit8(I1)RGB2=im2unit8(RGB1)I=im2unit8(BW)X2=im2unit8(X1,'indexed')im2unit16 轉換圖像陣列為16位無符號整型
語法:I2=im2unit16(I1)RGB2=im2unit16(RGB1)I=im2unit16(BW)X2=im2unit16(X1,'indexed')
四、Matlab常用快捷鍵
1.在命令窗口(Command Window)中:
1)【上、下鍵】――切換到之前、之后的命令,可以重復按多次來達到你想要的命令
2)clc――清除命令窗口顯示的語句,此命令并不清空當前工作區的變量,僅僅是把屏幕上顯示出來的語句清除掉
3)clear――這個才是清空當前工作區的變量命令,常用語句clear all來完成 4)【Tab】鍵――在command窗口,輸入一個命令的前幾個字符,然后按tab鍵,會彈出前面含這幾個字符的所有命令,找到你要的命令,回車,就可以自動完成。目前討論結果是:matlab6.5版本中,如果候選命令超過100個,則不顯示。而在matlab7以后版本中,則沒有這個限制,均可正常提示 5)【Ctrl+C】(或【Ctrl+Break】)――在matlab程序運行過程中,可能由于程序編寫的失誤,導致程序不停的運行,在命令窗口輸入“Ctrl+C”可以將運行的程序停下來,而不需要將整個Matlab程序關掉。不過進行此操作的前提是能夠激活切換到命令窗口才行。6)edit+函數名 查看或編輯源文件 7)who 顯示當前變量名列表 8)whos 顯示變量詳細列表
9)which+函數名 證實該函數是否在當前路徑 10)what 列出當前路徑的所有matlab文件 11)load 加載外部文件 12)save 保存文件到外部 13)20.matlab的幫助函數: 14)help 15)help+函數名或help+函數類名 精確查詢 16)helpwin 打開幫助窗口 17)helpwin+函數名 精確查詢 18)helpdesk 打開幫助窗口 19)doc 打開幫助窗口
20)doc+函數名 打開幫助窗口,精確查詢
21)lookfor+關鍵字 這個是matlab中的谷歌,模糊查詢
2.在編輯器(Editor)中: 1)【Tab】(或【Ctrl+]】)――增加縮進(對多行有效)2)3)4)5)6)【Ctrl+[】--減少縮進(對多行有效)
【Ctrl+I】--自動縮進(即自動排版,對多行有效)【Ctrl+R】――注釋(對多行有效)【Ctrl+T】――去掉注釋(對多行有效)
【Ctrl+B】――括號配對檢查(對版本6.5有效,但版本7.0無效,不知道是取消了還是換了另外的快捷鍵,請大牛們指點,其他版本沒有測試過)7)【F12】――設置或取消斷點 8)【F5】――運行程序
五、Matlab學習心得
接觸Matlab一個多月,從剛開始連最基本的操作都不會,到現在能夠熟練地運用Matlab解決問題。雖然現在學到的也只是皮毛而已,離精通還相差甚遠,但至少為以后研究生期間的學習打下了良好的基礎。下面我就簡單的談一下這一個月來的學習感想。
首先,想要學好Matlab必須有一定數學基礎。Matlab軟件是與高等數學,計算機科學相結合的軟件。所以,當你學習Matlab時,你也得會一定的數學。你要盡量多的熟悉matlab自帶的函數,及其作用,因為matlab的自帶函數特別多,基本上能夠滿足一般的數據和矩陣的計算,所以基本上不用你自己編函數。這一點對你的程序非常有幫助,可以使你的程序簡單,運行效率高,可以節省很多時間。
其次,要注重基礎知識于實際操作結合。你把基本的知識看過之后,就需要找一個實際的程序來動手編一下,不要等所有的知識都學好之后再去編程,你要在編程的過程中學習,程序需要什么知識再去補充。在遇到問題時,不要光看別人如果解決,也不要光想怎么解決,自己坐下來,動手自己解決一下,那你就會把不是你的知識變成自己的知識。
最后,也是最重要的一點就是堅持。MATLAB涉及的領域太多,每個領域里面都缺乏足夠的專家分布在你周圍。那么我們很難有機會接觸到真正的高手,對我們的技術細節一一指點。在遇到實際問題時,就只能靠自己去摸索。常常是再堅持一兩個小時,就能夠解決你的問題。最大的成就感,就在付出了極大的心血和耐心,才取得一個艱難的小勝利。
第五篇:MATLAB總結與上機指南
化工計算中常用的MATLAB命令總結
化學工程中的計算問題一般比較復雜, 其操作的數據對象通常是數組, 具體計算涉及到插值、求積分、參數擬合、解常微分和偏微分微分方程、解線性和非線性方程等。MATLAB是新一代的科學計算語言, 在解決上述問題上, 相對于FORTRAN、C 和BASIC等傳統的計算語言具有明顯的優越性。本文針對應用MATLAB 解決化工中的典型問題進行計算常用方法和命令做以小結。1.最小二乘法擬合 1.1 最小二乘擬合直線
函數
lsline 格式
lsline
%最小二乘擬合直線
h = lsline
%h為直線的句柄 1.2約束線性最小二乘
有約束線性最小二乘的標準形式為
minx1Cx?d222
sub.to
A?x?b
Aeq?x?beq
lb?x?ub
其中:C、A、Aeq為矩陣;d、b、beq、lb、ub、x是向量。在MATLAB5.x中,約束線性最小二乘用函數conls求解。
函數
lsqlin
格式
x = lsqlin(C,d,A,b)
%求在約束條件A?x?b下,方程Cx = d的最小二
乘解x。
x = lsqlin(C,d,A,b,Aeq,beq)
%Aeq、beq滿足等式約束Aeq?x?beq,若沒有不等式約束,則設A=[ ],b=[ ]。
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub)
%lb、ub滿足lb?x?ub,若沒有等
式約束,則Aeq=[ ],beq=[ ]。
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0)
% x0為初始解向量,若x沒有界,則lb=[ ],ub=[ ]。
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options)
% options為指定優化參數 [x,resnorm] = lsqlin(…)
% resnorm=norm(C*x-d)^2,即2-范數。[x,resnorm,residual] = lsqlin(…)
%residual=C*x-d,即殘差。
[x,resnorm,residual,exitflag] = lsqlin(…)
%exitflag為終止迭代的條件 [x,resnorm,residual,exitflag,output] = lsqlin(…)
% output表示輸出優化
信息
[x,resnorm,residual,exitflag,output,lambda] = lsqlin(…)
% lambda為解x的Lagrange乘子
1.3 非線性最小二乘
非線性最小二乘(非線性數據擬合)的標準形式為
minxf(x)?f1(x)2?f2(x)2???fm(x)2?L
其中:L為常數
在MATLAB5.x中,用函數leastsq解決這類問題,在6.0版中使用函數lsqnonlin。
?f1(x)???f2(x)? 設F(x)????????fm(x)?則目標函數可表達為minx12F(x)22?1?fi(x)2 2i其中:x為向量,F(x)為函數向量。函數
lsqnonlin 格式
x = lsqnonlin(fun,x0)
%x0為初始解向量;fun為fi(x),i=1,2,…,m,fun返回向量值F,而不是平方和值,平方和隱含在算法中,fun的定義與前面相同。
lb?x?ubx = lsqnonlin(fun,x0,lb,ub)
%lb、ub定義x的下界和上界:。
x = lsqnonlin(fun,x0,lb,ub,options)
%options為指定優化參數,若x沒有界,則lb=[ ],ub=[ ]。
[x,resnorm] = lsqnonlin(…)% resnorm=sum(fun(x).^2),即解x處函數值。[x,resnorm,residual] = lsqnonlin(…)
% residual=fun(x),即解x處fun的值。[x,resnorm,residual,exitflag] = lsqnonlin(…)
%exitflag為終止迭代條件。[x,resnorm,residual,exitflag,output] = lsqnonlin(…)%output輸出優化信息。[x,resnorm,residual,exitflag,output,lambda] = lsqnonlin(…)
%lambda為
Lagrage乘子。
[x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqnonlin(…)
%fun
在解x處的Jacobian矩陣。
多項式 2.1 多項式求值
函數名稱:polyval 調用格式:y=polyval(p,x),[y,delta]=polyval(p,x,S)返回多項式p在x點處的取值。X可以是向量也可以是矩陣。[y,delta] = polyval(p,x,S)同時還生成誤差估計。2.2 多項式求根
函數名稱:roots 調用格式:r=roots(c)
返回一個元素為多項式c的根的列向量。行向量中包含按降冪排列的多項式的系數,如果c中包含n+1個元素,則多項式的表達式為:c1sn+…+cns+cn+1。3 插值 3.1 一維插值
函數名稱:interp1 調用格式:yi=interp1(x,Y,xi), yi=interp1(x,Y,xi,method)MATLAB中有兩類一維數據插值方法:多項式插值法和基于FFT的插值法。函數interp1采用多項式插值法,它用多項式擬合所給出的數據,然后在插值點上根據多項式算出相應的值。調用格式中,xi為需要插值的位置所組成的向量,yi 為根據插值算法求得的值所組成的向量。x,Y為已知的數據點向量。參數method用于確定具體的插值方法,包括:
‘linear’表示采用線性插值方法;‘cubic’表示采用三次插值的方法; ‘nearest’表示采用最近點插值法;‘spline’表示用三次樣條插值方法。3.2 二維插值
函數名稱:interp2 調用格式
ZI = interp2(X,Y,Z,XI,YI)
返回矩陣ZI,其元素包含對應于參量XI與YI(可以是向量、或同型矩陣)的元素,即Zi(i,j)←[Xi(i,j),yi(i,j)]。
ZI = interp2(Z,XI,YI)
缺省地,X=1:n、Y=1:m,其中[m,n]=size(Z)。再按 ’nearest’:最臨近插值; ’spline’:三次樣條插值; ’cubic’:雙三次插值。非線性數據(曲線)擬合
非線性曲線擬合是已知輸入向量xdata和輸出向量ydata,并且知道輸入與輸出的函數關系為ydata=F(x, xdata),但不知道系數向量x。今進行曲線擬合,求x使得下式成立:
minx1F(x,xdata)?ydata222?1?(F(x,xdatai)?ydatai)2 2i在MATLAB5.x中,使用函數curvefit解決這類問題。函數
lsqcurvefit 格式
x = lsqcurvefit(fun,x0,xdata,ydata)x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)[x,resnorm] = lsqcurvefit(…)[x,resnorm,residual] = lsqcurvefit(…)[x,resnorm,residual,exitflag] = lsqcurvefit(…)[x,resnorm,residual,exitflag,output] = lsqcurvefit(…)[x,resnorm,residual,exitflag,output,lambda] = lsqcurvefit(…)[x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqcurvefit(…)參數說明:
x0為初始解向量;xdata,ydata為滿足關系ydata=F(x, xdata)的數據; lb、ub為解向量的下界和上界lb?x?ub,若沒有指定界,則lb=[ ],ub=[ ];
options為指定的優化參數;
fun為擬合函數,其定義方式為:x = lsqcurvefit(@myfun,x0,xdata,ydata),其中myfun已定義為
function F = myfun(x,xdata)F = …
% 計算x處擬合函數值fun的用法與前面相同; resnorm=sum((fun(x,xdata)-ydata).^2),即在x處殘差的平方和; residual=fun(x,xdata)-ydata,即在x處的殘差; exitflag為終止迭代的條件; output為輸出的優化信息; lambda為解x處的Lagrange乘子;
jacobian為解x處擬合函數fun的jacobian矩陣。
數值積分
5.1 一元函數的數值積分
函數名稱:
quad、quadl、quad8 調用格式 q = quad(fun,a,b)
%近似地從a到b計算函數fun的數值積分,誤差為10。給fun輸入向量x,應返回向量y,即fun是一單值函數。q = quad(fun,a,b,tol)
%用指定的絕對誤差tol代替缺省誤差。tol越大,函數計算的次數越少,速度越快,但結果精度變小。
q = quad(fun,a,b,tol,trace,p1,p2,…)
%將可選參數p1,p2,…等傳遞給函數fun(x,p1,p2,…),再作數值積分。若tol=[]或trace=[],則用缺省值進行計算。
[q,n] = quad(fun,a,b,…)%同時返回函數計算的次數n … = quadl(fun,a,b,…)
%用高精度進行計算,效率可能比quad更好?!?= quad8(fun,a,b,…)
%該命令是將廢棄的命令,用quadl代替。
5.2 一元函數的數值積分
函數名稱:
dblquad 功能
矩形區域上的二重積分的數值計算
調用格式
q = dblquad(fun,xmin,xmax,ymin,ymax)
調用函數quad在區域[xmin,xmax, ymin,ymax]上計算二元函數z=f(x,y)的二重積分。輸入向量x,標量y,則f(x,y)必須返回一用于積分的向量。
q = dblquad(fun,xmin,xmax,ymin,ymax,tol)
用指定的精度tol代替缺省精度10-6,再進行計算。
q = dblquad(fun,xmin,xmax,ymin,ymax,tol,method)
用指定的算法method代替缺省算法quad。method的取值有@quadl或用戶指定的、與命令quad與quadl有相同調用次序的函數句柄。
q = dblquad(fun,xmin,xmax,ymin,ymax,tol,method,p1,p2,…)
將可選參數p1,p2,..等傳遞給函數fun(x,y,p1,p2,…)。若tol=[],method=[],則使用缺省精度和算法quad。非線性方程組的解
非線性方程組的標準形式為:F(x)= 0 其中:x為向量,F(x)為函數向量。函數
fsolve 格式
x = fsolve(fun,x0)
用fun定義向量函數,其定義方式為:先定義方程函數function F = myfun(x)。
F =[表達式1;表達式2;…表達式m] 保存為myfun.m,并用下面方式調用:x =
-6fsolve(@myfun,x0),x0為初始估計值。
x = fsolve(fun,x0,options)[x,fval] = fsolve(…)
fval=F(x),即函數值向量 [x,fval,exitflag] = fsolve(…)[x,fval,exitflag,output] = fsolve(…)[x,fval,exitflag,output,jacobian] = fsolve(…)
jacobian為解x處的Jacobian陣。
其余參數與前面參數相似。7 常微分方程數值解
函數名稱:ode45、ode23、ode113、ode15s、ode23s、ode23t、ode23tb 功能
常微分方程(ODE)組初值問題的數值解 參數說明:
solver為命令ode45、ode23,ode113,ode15s,ode23s,ode23t,ode23tb之一。
Odefun 為顯式常微分方程y’=f(t,y),或為包含一混合矩陣的方程M(t,y)*y’=f(t,y)。命令ode23只能求解常數混合矩陣的問題;命令ode23t與ode15s可以求解奇異矩陣的問題。
Tspan 積分區間(即求解區間)的向量tspan=[t0,tf]。要獲得問題在其他指定時間點t0,t1,t2,…上的解,則令tspan=[t0,t1,t2,…,tf](要求是單調的)。
Y0 包含初始條件的向量。
Options 用命令odeset設置的可選積分參數。P1,p2,… 傳遞給函數odefun的可選參數。調用格式
[T,Y] = solver(odefun,tspan,y0)
在區間tspan=[t0,tf]上,從t0到tf,用初始條件y0求解顯式微分方程y’=f(t,y)。對于標量t與列向量y,函數f=odefun(t,y)必須返回一f(t,y)的列向量f。解矩陣Y中的每一行對應于返回的時間列向量T中的一個時間點。要獲得問題在其他指定時間點t0,t1,t2,…上的解,則令tspan=[t0,t1,t2,…,tf](要求是單調的)。
[T,Y] = solver(odefun,tspan,y0,options)%用參數options(用命令odeset生成)設置的屬性(代替了缺省的積分參數),再進行操作。常用的屬性包括相對誤差值RelTol(缺省值為1e-3)與絕對誤差向量AbsTol(缺省值為每一元素為1e-6)。
[T,Y] =solver(odefun,tspan,y0,options,p1,p2…)
將參數p1,p2,p3,..等傳遞給函數odefun,再進行計算。若沒有參數設置,則令options=[]。