【问题标题】:Matlab - vpasolve error when solving system of equationsMatlab - 求解方程组时的 vpasolve 错误
【发布时间】: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_fun2p_fun1 的导数,而p_fun3 只是p_fun1 在等式中替换了不同的值,但这些不会触发错误。

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

【问题讨论】:

  • vpasolve 是一个数值求解器,方程中不能有符号参数。
  • 所以你说的是;而不是在等式中留下其他符号值,我应该用它们的实数替换所有符号值? (当然x0, h0, h1, C2 除外)
  • 是的,正是我的意思。
  • 您应该将其发布为答案,以便我接受并关闭问题

标签: matlab


【解决方案1】:

vpasolve 是一个数值求解器(实际上,vpa 代表可变精度算术),方程中不能有符号参数。

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

【讨论】:

  • 我一头雾水,vpasolve Matlab help下的所有例子都有符号参数。
  • @Millemila 不,他们没有。未知数是符号,但所有系数都是数字。
猜你喜欢
  • 1970-01-01
  • 2016-11-23
  • 1970-01-01
  • 2020-09-23
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多