MATLAB解具有符號變數巢狀的方程

時間 2021-05-07 19:59:11

1樓:我行我素

有符號變數時,要用數學符號運算工具箱,先用syms 定義變數,再用solve解方程。如:

syms x

x=solve(x^2-5*x+2==0)結果是:

x =5/2 - 17^(1/2)/2

17^(1/2)/2 + 5/2

2樓:純淨透明

試試simplify,表示式簡化用法r = simplify(s)

matlab裡面,有符號變數的方程組的求解,為什麼執行全都是warning然後結果是empty s

3樓:匿名使用者

前一個警告是因為,你求解的是4個方程,但只指定了3個變數(其它符號會被視為常量),這種方程數量多於未知數的方程組,除非個別特殊情況,大多數是無解的,所以會以警告的形式提示你。

後面的一個警告,是告訴你求解的結果沒有得到顯式解。得不到顯式解可能是因為方程組本身無解,有可能是matlab求不出。不要對符號運算寄予過高期望,很多非線性方程(組)都是難以求出顯式解的,這在數學上本身就存在困難,當然不能指望一個軟體就能解決。

求不出解析解的情況下,大部分場合可以藉助於數值方法求數值解,當然,這需要常數都是已知的。

matlab中如何求解符號變數的非線性方程組的解,求大神賜教!!!**如下: 65

4樓:匿名使用者

matlab中如何求解符號變數的非線性方程組的解,對於簡單明瞭的方程組可以用solve()求得。solve()求解格式為

eq1=f1(x,y,z),eq2=f2(x,y,z),eq3=f3(x,y,z)

solve(eq1,eq2,eq3)

但分析了你給出的**,我覺得只能用數值的方法求解,得到其數值解。你想要解析值是有一定的難度。

常用的數值方法,有二分法,牛頓法等等。

怎樣有matlab解多項式方程

5樓:信玄居士

用matlab解方程的三個例項

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

>>p =

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)-=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=;b=;

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

第二步:求解=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;

>>=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。

6樓:空**聖卿

其實不是錯誤,你計算的結果s1第二個數其實是不是零,只是一個很小的數,由於顯示精度的問題,就沒有顯示出來結果;當你用字串表示式時候,就用分式把第二個數表示出來了,這個分式除出來也就是s1第二個數的大小。

你可以使用vpa(p,4),可以看到x^2的係數為10-14次方,非常小。

matlab的符號解是什麼,matlab的符號解是什麼

符號解即對有符號的代數式子,用符號進行推導,得出的結果中含有代數符號,比如 求解方程 a x 2 b x c 0 solve a x 2 b x c ans 1 2 a b b 2 4 a c 1 2 1 2 a b b 2 4 a c 1 2 是符號,你應該把符號轉換為變數處理。 x的多項式,那麼...

matlab解一元超越方程,MATLAB求解一元超越方程,,求程式碼(混凝土破壞準則的內容)

缺少運算子 以及引數輸入格式有點問題 solve x 1 12 2.24 10 7 exp 5600 15 11 x 1 1 x ans 19.906557209304298701452077340886 10.326236962569359920664632589731 i solve x 1 1...

關於MATLAB符號運算的問題,求解matlab符號運算的問題

1 matlab的符號運算是藉助於其它符號運算核心完成的,2008a之前是用maple,2008b之後用mupad,不同版本對符號運算的具體支援可能存在差別,例如,你說的第一個問題,我在6.5和2007b 2013a等幾種版本下測試,用這兩種寫法都可以得到相同的結果 x y solve eq1,eq...