計算方法主要研究數學問題的數值解,涉及的內容廣。利用matlab提供的部分函式解決,可以實現某些情況下的數值求解。本章作簡要介紹。
7.1 一元非線性方程求解
求解一元非線性方程的方法主要有二分法、割線法、牛頓法等。本節主要介紹兩個可以求解一元非線性方程的函式,即fzero函式和roots函式。
7.1.1 fzero函式
用fzero函式求一元非線性方程的零點。該函式的簡單呼叫格式為:
●x=fzero(fun,x0):如果x0為標量,則試圖尋找函式fun在x0附近的零點。fun引數是乙個m檔案函式或匿名函式的函式控制代碼。
函式fzero返回的值x靠近fun函式改變符號的位置。如果搜尋失敗,則返回nan。搜尋區間擴充套件到發現inf、nan或復數值時終止搜尋。
如果x0是乙個長度為2的向量,則fzero函式假設x0是乙個區間,其中fun(x0(1))與fun(x0(2))異號。如果符號相同,則會出錯。給出相應函式值異號的區間可以保證fzero函式返回乙個fun函式改變符號的位置附近的值。
●[x,fval]=fzero(…):返回解x和解x處目標函式fun的值。
●[x,fval,exitflag]=fzero(…):還返回乙個exitflag值,描述fzero函式的退出條件。返回值及其描述如下所示:
>0,表示函式找到了零值點x;
0,表示沒有發現零值點。
例7-1 求方程的解。
程式**:
clear;clc;
f=@(x)(x+20)*(x+1)*(x-5)*(x-30);%建立匿名函式
x1=fzero(f,-50)%解一元非線性方程
x2=fzero(f,1)
x3=fzero(f,6)
x4=fzero(f,50)
執行結果:
x1 =
-20x2 =
-1x3 =
5x4 =
307.1.2 roots函式
用roots函式計算多項式的根,該函式的呼叫格式為:
●r=roots(c):返回乙個列向量,其元素為多項式c的解。
例7-2 求多項式方程的解。
程式**:
clear;clc;
p=[1 -5 1 -5];%表示多項式
r=roots(p)%求多項式方程的解
p1=poly(r)%由多項式的根返回多項式的係數
執行結果:
r = 5.0000
-0.0000 + 1.0000i
-0.0000 - 1.0000i
p1 =
1.0000 -5.0000 1.0000 -5.0000
注:poly和roots互為逆函式,函式poly返回多項式的係數。
7.2 非線性方程組的數值解法
用matlab求解線性方程組的解,在6.3中已介紹了基於矩陣變換的直接解法,除此方法之外,還有很多方法,比如,jocabi迭代法、gauss-seidel迭代法和sor(超鬆馳)迭代法等,這裡不作詳細介紹。可參閱有關文獻。
實際工程中得到的數學模型往往具有非線性的特點,得到其解析解比較困難。一般採用迭代法求解非線性方程組。比較常見的迭代方法有不動點迭代法、newton迭代法和擬newton迭代法等幾種。
本節僅介紹不動點迭代法。
設含有個未知數和個方程的非線性方程組記為:
其中,為由個未知數構成的向量,為由個函式構成的向量。
將方程組改寫為便於迭代的等價形式:,由此得出不動點迭代法的迭代公式:。
如果得到的序列滿足,則就是的不動點。這樣就可以求出線性方程組的解(近似解)。
據此,編寫不動點迭代法的m檔案(檔名為example7_2):
function s=example7_2(x,eps)
%用不動點迭代法求非線性方程組的解
%x為迭代初值,eps為允許誤差值。
if nargin==1
eps=1e-6;
elseif nargin<1
error
return
endx1=example7_2a(x);% example7_2a是函式的檔名。
while norm(x1-x)>=eps
x=x1;
x1=example7_2a(x);%迴圈迭代
ends=x1;
return
例7-3 用不動點迭代法求方程組的解。
解:變形為
首先建立函式**(檔名為example7_2a.m):
function y=example7_2a(x)
y(1)=(x(1)*x(1)+x(2)*x(2)+9)/(-11);
y(2)=(x(1)*x(2)*x(2)+x(1)+8)/6;
再作圖形,程式**:
clear;clc;
ezplot('x1^2+11*x1+x2^2+9',[-12,6]);
hold on
ezplot('x1*x2^2+x1-6*x2+8',[-12,6]);
hold off
title('x1^2+11*x1+x2^2+9和x1*x2^2+x1-6*x2+8的圖形')%修改標題
執行結果見圖7-1:
圖7-1
最後呼叫函式example7_2求方程組解:
x=example7_2 ([0,0])
執行結果:
x= -1.0000 1.0000
這樣就可以求得方程組的乙個解,從圖7-1可以看出,方程組還有乙個解,為了求得它,還需要對原方程組作另外變形,這裡不再作進一步的討論。
7.3 插值
插值計算在資料擬合和資料平滑等方面應用普遍。matlab提供了用最近鄰插值、線性插值、三次樣條插值、三次插值和fft插值法進行一維、二維、三維和高維插值的函式。
7.3.1 一維插值
matlab中有兩種一維插值,即多項式插值和基於fft的插值。
⒈ 多項式插值
函式interp1進行一維插值。一維插值是進行資料分析和曲線擬合的重要手段。interp1函式使用多項式技術,用多項式函式擬合所提供的資料,並計算目標插值點上的插值函式值,其最常用的語法形式是:
yi=interp1(x,y,xi,method)
x和y為給定資料的向量,長度相同。xi為包含要插值的點的構成的向量,method是乙個可選的字串,指定一種插值方法,包括:
●最近鄰插值(method='nearest'):該方法將插值點的值設定為已知資料點中距離最近的點的值;
●線性插值(method='linear'):該方法用線性函式擬合每對資料點,並返回xi處的相關函式值;
●三次樣條插值(method='spline'):該方法用三次樣條函式擬合每對資料點,用spline函式在插值處進行三次樣條插值;
●三次插值(method='pchip'或'cubic'):該方法用pchip函式對向量x和y進行分段三次hermite插值。
這幾種方法在速度、記憶體和平滑性等方面有所差別,使用時可以根據需要進行選擇,包括:
◣最近鄰插值是最快的方法,但是,利用它得到的結果平滑性最差;
◣線性插值比最近鄰插值要占用更多的記憶體,執行時間略長。與最近鄰法不同,它生成的結果是連續的,但是在頂點處有坡度變化;
◣三次樣條插值的執行時間相對來說最長,記憶體消耗比三次插值略少。它生成的結果平滑性最好。但是,如果輸入資料不很均勻,可能會得到意想不到結果;
◣三次插值需要更多記憶體,而且執行時間比最近鄰插值和線性插值的長。但是,使用此法時,插值資料及其導數都是連續的。
例7-4 程式**:
x=1:10;
y=[1800 778 518 5000 980 588 2799 528 6700 598];
x1=1:0.1:10;
y1=interp1(x,y,x1,'nearest');%一維最近鄰插值
plot(x1,y1)
y2=interp1(x,y,x1,'linear');%一維線性插值
hold on
plot(x1,y2,'color','r')
hold off
執行結果見圖7-2。
圖7-2 一維最近鄰插值和線性插值
例7-5 程式**:
x=1:10;
y=[1800 778 518 5000 980 588 2799 528 6700 598];
plot(x,y);
x1=1:0.1:10;
hold on
y1=interp1(x,y,x1,'spline');%三次樣條插值
plot(x1,y1,'color','r')
hold off
執行結果見圖7-3。
圖7-3 三次樣條插值
⒉ 基於fft的插值
函式interpft用基於fft的方法進行一維插值。本方法計算包含週期函式值的向量的傅利葉變換。然後,它用更多的點計算逆傅利葉變換。該函式的呼叫形式為:
y=interpft(x,n)
其中,x是乙個包含週期函式值的向量,這些值在等間隔的點上採集。n是樣本大小。
7.3.2 二維插值
二維插值在影象處理和視覺化方面有著很重要的應用。matlab用函式interp2進行二維插值。該函式的一般形式為:
zi=interp2(x,y,z,xi,yi,method)
其中,z是乙個矩陣陣列,包含二維函式的值,x和y為大小相同的陣列,包含相對於z的給定值。xi和yi為包含插值點資料的矩陣,method表示插值方法,為可選引數。
matlab提供了三種不同的插值方法進行二維插值:
●最近鄰插值(method='nearest'):該方法用分區域常數曲面擬合資料,插值點的值是最近點的值;
●雙線性插值(method='linear'):該方法用雙線性曲面擬合資料點,插值點的值是四個最近的值的組合。本方法是分區域雙線性的,比雙三次插值法快,並且記憶體消耗更少;
●雙三次插值(method='cubic'):該方法用雙三次曲面擬合資料點,插值點的值是16個最近點的值的組合。本方法是分區域三次的,結果的平滑性比前面兩種的都好。
注:所有這些方法都要求x和y資料是單調的,即從點到點,要麼總是遞增的,要麼總是遞減的。應該用meshgrid函式準備這些矩陣。
例7-6 程式**:
%低解析度的peaks函式圖形
[x,y]=meshgrid(-4:1:4);
z=peaks(x,y);
surf(x,y,z)
執行結果見圖7-4。
圖7-4 低解析度的peaks函式圖形
第7章MATLAB計算的視覺化和GUI設計
matlab具有非常強大的二維和三維繪圖功能,尤其擅長於各種科 算結果的視覺化。7.1二維曲線的繪製 7.1.1基本繪圖命令plot 1.plot x 繪製x向量曲線 plot命令是matlab中最簡單而且使用最廣泛的乙個繪圖命令,用來繪製二維曲線。語法 plot x繪製以x為縱座標的二維曲線 pl...
計算方法第5章數值積分
第五章數值積分 5.0 引言 5.1 機械求積公式 5.2 newton cotes公式 5.3 變步長求積公式及其加速收斂技巧 5.4 gauss公式 5.5 小結 5.0 引言 1.定積分的計算可用著名的牛頓 萊布尼茲公式來計算 其中f x 是f x 的原函式之一,可用不定積分求得。然而在實際問...
《應用計算方法教程》matlab作業二
作業六6 1 試驗目的計算特徵值,實現演算法 試驗內容 隨機產生乙個10階整數矩陣,各數均在 5和5之間。1 用matlab函式 eig 求矩陣全部特徵值。2 用冪法求a的主特徵值及對應的特徵向量。3 用基本qr演算法求全部特徵值 可用matlab函式 qr 實現矩陣的qr分解 原理冪法 設矩陣a的...