Matlab solve函式引數傳遞問題解決方法
在使用solve函式時,我們的引數如果設定的是上面方程的解,則在solve裡面,我們用符號表示引數;
Example1:
b = 2;
[email protected](M) M^2*(b)^2 - (5/6*(1+0.2*M^2))^6;%b是前面方程的解
如果我們直接用solve,報錯:
solve(fun,'M') Error using message In 'symbolic:solve:errmsg1', data type supplied is incorrect for parameter {1}. Error in solve>processString (line 365) error(message('symbolic:solve:errmsg1', v)) Error in solve>getEqns (line 286) eqns = processString(eqns, v, vc); Error in solve (line 160) [eqns,vars,options] = getEqns(varargin{:});
因為solve函式直接把b當符號,他不會把值代入計算,不能自行傳遞引數。
所以我們需要把數值轉換成字串:
function M = A_M_A_Asa(b)
[email protected](M) M^2*(b)^2 - (5/6*(1+0.2*M^2))^6;%b是前面方程的解
equ = subs(fun,b,num2str(b))%solve函式是以符號計算的,那麼就把數值轉換成符號
M = solve(equ);
end
然後再執行運算:
b = 2;
M = A_M_A_Asa(b)
就能得到正確的解了。