1. ホーム
  2. matlab

[解決済み] Matlab - 連立方程式を解くときにvpasolveエラーが発生する

2022-02-09 03:07:42

質問

現在、次のような連立方程式を解こうとしている。 h2, eta, B, U は分かっているのですが、とりあえず記号変数にしておきました。

clearvars
clc

syms x x0 h0 h1 h2 C2 eta B U

h(x) = h0 + h2*(x/(B/2))^2;

h_bar(x) = h(x)/h0;
hc_bar = 1+(h2/h0)*(x0/(B/2))^2;
x_bar(x) = x/(B/2);
x0_bar = x_bar(x0);

integration = int(((h_bar^2-hc_bar^2)/(h_bar^3)),x);

p(x) = ((3*eta*U*B)/(h0^2))*integration+C2;
p_d(x) = diff(p(x),x);

p_fun1 = p(x0_bar) == 0;
p_fun2 = p_d(x0_bar) == 0;
p_fun3 = p(-1) == 0;
p_fun4 = h1-h0 == h2;

4つの方程式、4つの未知数だから、解けるはずだ。しかし、この連立方程式はちょっと無理があるので vpasolve :

vpasolve([p_fun1, p_fun2, p_fun3, p_fun4],[x0, h0, h1, C2])

この結果、以下のようなエラーが発生します。

Error using mupadengine/feval (line 166)
Symbolic parameters are not allowed in nonpolynomial equations.

Error in sym/vpasolve (line 172)
    sol = eng.feval('symobj::vpasolve',eqns,vars,X0);

Error in Yke (line 35)
vpasolve([p_fun1, p_fun2, p_fun3, p_fun4],[x0, h0, h1, C2])

エラーの原因をたどると p_fun1 が、なぜこの特定の関数がエラーを引き起こすのかがわかりません。複雑なのですが p_fun2 の微分である。 p_fun1p_fun3 は、単に p_fun1 のように、式に別の値を代入しても、エラーは発生しません。

を置き換えることでエラーが発生するのは間違いないでしょう。 xx_bar の中に p_fun1 = p(x0_bar) == 0 を呼び出すのですが、その理由がわからず、したがって解決方法もわかりません。どなたか、私が今やっていることが間違っているとお分かりになる方はいらっしゃいますか?

解決方法は?

vpasolve は数値演算ソルバーです(実際は。 ブパ 可変精度演算 )であり、方程式に記号的なパラメータを入れることはできません。

したがって、方程式のパラメータはすべて数値で代用する必要があります。