Matlab - 求解方程组时的vpasolve误差

时间:2018-05-05 13:44:52

标签: matlab

我目前正在尝试解决方程组,其中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;

四个方程式,四个未知数,所以我应该能够解决这个问题。然而,方程系统有点压倒性,所以我决定试试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_fun2p_fun1的导数而p_fun3只是p_fun1,在等式中替换了不同的值,但这些不会触发错误。

我很确定错误是由于在x电话中将x_bar替换为p_fun1 = p(x0_bar) == 0造成的,但我不知道为什么,因此我也不知道如何解决它。有谁看到我现在做错了什么?

1 个答案:

答案 0 :(得分:1)

vpasolve是一个数值解算器(事实上, vpa 代表变精度算术),你不能在方程中有符号参数。< / p>

因此,您应该将数值替换为所有方程参数。