問題描述:對於乙個方程,比如:ax2
+bx+
c=0ax^2+bx+c=0
ax2+bx
+c=0
,我們想要求出關於x的表示式(求根)。
如果a,b,c是已知的,或者說是某個確定的數值,那麼我們就可以直接用roots函式進行求根——數值解:
p=[1 2 1]
roots(p)
返回結果是:
ans =
-1-1
顯然這裡的a,b,c是未知的,我們想要求出x的表示式——符號解。那麼我麼可以用solve函式來實現:
syms a b c x % 宣告引數
eqn = a*x^2 + b*x + c == 0;
solx = solve(eqn, x)
返回結果是:
solx =
-(b + (b^2 - 4*a*c)^(1/2))/(2*a)
-(b - (b^2 - 4*a*c)^(1/2))/(2*a)
其中,solve(eqn,x)表示對等式eqn關於x的求解(同樣地,也可以求解關於a或b或c的解)。eqn可以是乙個等式,也可以是乙個表示式,如果是乙個表示式,則預設是對eqn=0求解。
需要注意的是,solve函式並不一定總是返回方程的所有解,比如:
syms x
solx = solve(cos(x) == -sin(x), x)
返回結果是:
solx =
-pi/4
如果我們需要返回所有可能的解,可以設定「returnconditions"選項為true。如下所示:[solx, param, cond] = solve(cos(x) == -sin(x), x, 'returnconditions', true)
返回結果是:
solx =
pi*k - pi/4
param =
kcond =
in(k, 'integer')
如上所示,返回值有三個引數,分別是解、解的引數、解的條件。
solx =pi*k - pi/4
param =k
cond =in(k, 『integer』)
進一步深入:對於上述有多個解的情況,如何返回在指定區間內或滿足特定條件的解呢?
matlab實現:
syms x
[solx, param, cond] = solve(cos(x) == -sin(x), x, 'returnconditions', true)
matlab實現:
assume(cond)
solk = solve(-2*pimatlab實現:
xvalues = subs(solx, solk)
xvalues = vpa(xvalues) % 把符號解轉換成數字解
解的視覺化
繪製c os
(x)=
=−si
n(x)
cos(x) == -sin(x)
cos(x)
==−s
in(x
)的解:分別繪製cos(x)和 -sin(x),再標記出兩個曲線的交點。
matlab實現:
fplot(cos(x))
hold on
grid on
fplot(-sin(x))
title('both sides of equation cos(x) = -sin(x)')
legend('cos(x)','-sin(x)','location','best','autoupdate','off')
yvalues = cos(xvalues) % 計算交點的縱座標
scatter(xvalues, yvalues) % 標出交點的位置
MATLAB多項式及多項式擬合
多項式均表示為陣列形式,陣列元素為多項式降冪係數 1.polyval函式 求多項式在某一點或某幾個點的值.p 1,1,1 x 2 x 1 x 1,0,1 y polyval p,x 另外求函式在某一點或某幾個點的值可以用函式feval.x 1,0,1 y feval x exp x x 注意用的乘法...
matlab多項式與非多項式擬合
擬合標準 1 原始資料向量與擬合向量之間的距離最小,該距離的度量一般使用誤差平方和表示,即均方誤差 r q y 22 2 當均方誤差最小時,說明構造的擬合向量與原始向量最為接近,這種曲線擬合的方法稱為最小二乘法 3 計算均方誤差最小時的擬合係數,可以通過微積分中求解極值的方法實現 多項式擬合 1 多...
利用單鏈表進行多項式運算
1.什麼是運算子過載函式?2.什麼是友元函式 3.const函式的使用與作用 4.單鏈錶能為大家做些什麼 總所周知資料結構由某一資料元素的集合和該集合中資料元素之間的關係組成,在資料儲存上我們將物理記憶體單元連續的儲存方式稱之為線性結構,例如陣列。物理記憶體單元不連續的稱之為離散結構,資料之間的鏈結...