用
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...