用MATLAB解方程的三個例項

2021-06-21 21:57:58 字數 3790 閱讀 1034

matlab

解方程的三個例項

1

對於多項式p(x)=x3-6x2-72x-27,求多項式p(x)=0的根,可用多項式求根函式roots(p),其中p為多項式係數向量,即

>>p =[1,-6,-72,-27]

p =1.00 -6.00 -72.00 -27.00

p是多項式的matlab描述方法,我們可用poly2str(p,'x')函式,來顯示多項式的形式:

>>px=poly2str(p,'x')

px =x^3 - 6 x^2 - 72 x - 27

多項式的根解法如下:

>> format rat %以有理數顯示

>> r=roots(p)

r =2170/179

-648/113

-769/1980

2

在matlab中,求解用符號表示式表示的代數方程可由函式solve實現,其呼叫格式為:solve(s,v):求解符號表示式s的代數方程,求解變數為v。

例如,求方程(x+2)x=2的解,解法如下:

>> x=solve('(x+2)^x=2','x')

x =.69829942170241042826920133106081

得到符號解,具有預設精度。如果需要指定精度的解,則:

>> x=vpa(x,3)

x =.698

3

使用fzero或fsolve函式,可以求解指定位置(如x0)的乙個根,格式為:x=fzero(fun,x0)或x=fsolve(fun,x0)。例如,求方程0.8x+atan(x)-p=0在x0=2附近乙個根,解法如下:

>> fu=@(x)0.8*x+atan(x)-pi;

>> x=fzero(fu,2)

x =2.4482

或》 x=fsolve('0.8*x+atan(x)-pi',2)

x =2.4482

當然了,對於該方程也可以用第二種方法求解:

>> x=solve('0.8*x+atan(x)-pi','x')

x =2.4482183943587910343011460497668

對於第乙個例子,也可以用第三種方法求解:

>> f=@(x)x^3-6*x^2-72*x-27

f =

@(x)x^3-6*x^2-72*x-27

>> x=fzero(f,10)

x =12.1229

對於第二個例子,也可以用第三種方法:

>>fun=@(x)(x+2)^x-2

fun =

@(x)(x+2)^x-2

>> x=fzero(fun,1)

x =0.6983

最近有多人問如何用matlab解方程組的問題,其實在matlab中解方程組還是很方便的,例如,對於代數方程組ax=b(a為係數矩陣,非奇異)的求解,matlab中有兩種方法:

(1)x=inv(a)*b — 採用求逆運算解方程組;

(2)x=a\b — 採用左除運算解方程組。

例:x1+2x2=8 

2x1+3x2=13

>>a=[1,2;2,3];b=[8;13];

>>x=inv(a)*b 

x = 

2.00 

3.00 

>>x=a\b

x = 

2.00

3.00;

即二元一次方程組的解x1和x2分別是2和3。

對於同學問到的用matlab解多次的方程組,有符號解法,方法是:先解出符號解,然後用vpa(f,n)求出n位有效數字的數值解.具體步驟如下:

第一步:定義變數syms x y z ...;

第二步:求解[x,y,z,...]=solve('eqn1','eqn2',...,'eqnn','var1','var2',...'varn');

第三步:求出n位有效數字的數值解x=vpa(x,n);y=vpa(y,n);z=vpa(z,n);...。

如:解二(多)元二(高)次方程組:

x^2+3*y+1=0

y^2+4*x+1=0

解法如下:

>>syms x y;

>>[x,y]=solve('x^2+3*y+1=0','y^2+4*x+1=0');

>>x=vpa(x,4);

>>y=vpa(y,4);

結果是:

x = 

1.635+3.029*i

1.635-3.029*i

-.283

-2.987

y = 

1.834-3.301*i

1.834+3.301*i

-.3600

-3.307。

二元二次方程組,共4個實數根;

還有的同學問,如何用matlab解高次方程組(非符號方程組)?舉個例子好嗎?

解答如下:

基本方法是:solve(s1,s2,…,sn,v1,v2,…,vn),即求表示式s1,s2,…,sn組成的方程組,求解變數分別v1,v2,…,vn。

具體例子如下:

x^2 + x*y + y = 3

x^2 - 4*x + 3 = 0

解法:>> [x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0')

執行結果為 

x =1 3

y =1 -3/2

即x等於1和3;y等於1和-1.5

或》[x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3= 0','x','y')

x =1  3

y =1 -3/2

結果一樣,二元二方程都是4個實根。

通過這三個例子可以看出,用matlab解各類方程組都是可以的,方法也有多種,只是用到解方程組的函式,注意正確書寫引數就可以了,非常方便。 

>> a=[2048,64;128,127];b=[0.5;0.5];

x=inv(a)*b

x =

0.0001

0.0038

>> a=[2048,32;64,63];b=[0.5;0.5];

x=inv(a)*b

x =

0.0001

0.0078

>> a=[2048,64;128,127];b=[0.5;1];

x=inv(a)*b

x =

-0.0000

0.0079

>> a=[2048,64;128,127];b=[0.5;1];

x=inv(a)*b

x =

-0.0000

0.0079

>> a=[2048,64;128,127];b=[0.5;1];

x=inv(a)*b

x =

-0.0000

0.0079

>> a=[2048,64;128,127];b=[1;1];

x=inv(a)*b

x =

0.0003

0.0076

>> a=[2048,128;256,255];b=[0.5;0.5];

x=inv(a)*b

x =

0.0001

0.0018

Matlab用符號工具包求解方程的方法和問題

matlab裡可以用syms定義一些變數為符號變數,這些變數可以進行符號運算,生成符號表示式,也可以用來求解方程。用matlab求解乙個方程那方法不要太多,舉例如下 用fzero f,x1,x2 其中f是函式控制代碼,x1,x2 是求解區間,一般用以求解非線性方程,用二分法 割線法等進行處理。fso...

用例設計三個方面

1 有的錯誤是程式編寫有問題造成的,比如本來應該輸出整數結果輸出了字串,這種錯誤我們通常稱之為bug,bug是必須修復的。2 有的錯誤是使用者輸入造成的,比如讓使用者輸入email位址,結果得到乙個空字串,這種錯誤可以通過檢查使用者輸入來做相應的處理。3 還有一類錯誤是完全無法在程式執行過程中 的,...

二分法求解方程的值 matlab

首先定義乙個二分求根的函式 function root bisect fun,a,b,eps n 1 round log b a log eps log 2 fa feval fun,a fb feval fun,b for i 1 n c b a 2 fc feval fun,c if fc fa...