【发布时间】:2018-05-05 13:44:52
【问题描述】:
我目前正在尝试求解一个方程组,其中 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_fun2 是p_fun1 的导数,而p_fun3 只是p_fun1 在等式中替换了不同的值,但这些不会触发错误。
我很确定错误是由于在 p_fun1 = p(x0_bar) == 0 调用中将 x 替换为 x_bar 引起的,但我不知道为什么,因此我也不知道如何解决它。有谁知道我现在做错了什么?
【问题讨论】:
-
vpasolve是一个数值求解器,方程中不能有符号参数。 -
所以你说的是;而不是在等式中留下其他符号值,我应该用它们的实数替换所有符号值? (当然
x0, h0, h1, C2除外) -
是的,正是我的意思。
-
您应该将其发布为答案,以便我接受并关闭问题
标签: matlab