matlab學習筆記009之solve函式

2021-06-20 00:27:12 字數 1268 閱讀 4865

matlab中solve函式主要是用來求解線性方程組的解析解或者精確解。對於得出的結果是符號變數,可以通過vpa()得出任意位數的數值解!

solve函式的語法定義主要有以下四種:

solve(eq)

solve(eq, var)

solve(eq1, eq2, …, eqn)

g = solve(eq1, eq2, …, eqn, var1, var2, …, varn)

eq代表方程,var代表的是變數。

但在我的使用中,solve卻不能幫我解決問題:

我的目的:已知控制物件傳函g0和期望截止頻率wc,求在任意幅值處的頻率

一開始是這樣用的:

wc=solve('20*log10(abs(g0(wc))=10*log10(3)','wc'); %g0(wc)是關於wc的具體傳函,10*log10(3)就是具體幅值

還是不行。

然後又使用這樣的方法:

for w=0.1:0.1:20

l=20*log10(abs(wn^2/((w*i)*((i*w)^2+2*zeta*w*wn*i+6^2))));

if l==(10*log10(3)-0.001)

wc=w;

endend

l就是具體的傳函.除錯時還是不行,wc依舊是空。發現if選擇語句根本沒執行。

是不是w的精度小了,無法使if的條件(l==10*log10(3))滿足?

然後我把w精度改為0.01,0.001.都不行。

接著我想是不是這樣的精度都滿足不了條件,於是乎我把條件改了:l>=(10*log10(3)-0.001)&&l<=(10*log10(3)+0.001)

最終還是不行!!!

還有乙個問題:我測試了abs()這個取模值函式和solve()函式,發現如果是解實數方程,ok,沒有問題;但若是複數方程就不行了:

>> clear

>> syms x y

>> [x,y]=solve('x^2+y^2=1','x','y')

x =-(1 - z^2)^(1/2)

(1 - z^2)^(1/2)

y =

z z

>> clear

>> syms x y

>> [x,y]=solve('abs(x*i+y^2)=1','x','y')

x =- exp(2*u*i)*i + z^2*i

y =

z

這是為什麼呢?

學習筆記 009

初始化string物件的方式 string s1 預設初始化,s1是乙個空串 string s2 s1 s2是s1的副本 string s2 s1 與上面等價 string s3 book s3是字面值 book 的副本,除去字面值最後空字元 string s3 book 與上面等價 string ...

Python學習筆記 Python之集合set

1.什麼是set集合 set集合 無序的並且是不重複的,如下 s set a b c 2.set集合訪問 訪問set集合中的元素,使用 in 操作符判斷,如下 s set a b c print c in s print d in s結果如下 true false3.set集合遍歷 使用 for 迴...

matlab學習筆記

一致化矩陣 z1 1 2 4 3 4 1 z2 1 2 2 5 6 1 b 0 1 q 3 z concur b,q 向量之和 x1 netsum z1,z2 向量之積 x2 netprod z1,z2 感知器神經網路,完成 或 的計算 err goal 0.001 max epoch 500 x ...