Matlab - vpasolve ошибка при решении системы уравнений - PullRequest
0 голосов
/ 05 мая 2018

В настоящее время я пытаюсь решить систему уравнений, в которой известны 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 с другим значением, подставленным в уравнение, но они не вызывают ошибку.

Я почти уверен, что ошибка вызвана заменой x на x_bar в вызове p_fun1 = p(x0_bar) == 0, но я не знаю почему, и поэтому я также не знаю, как ее решить. Кто-нибудь видит, что я делаю не так в данный момент?

1 Ответ

0 голосов
/ 10 мая 2018

vpasolve является числовым решающим устройством (на самом деле vpa означает арифметику переменной точности ), и вы не можете иметь символические параметры в уравнениях .

Таким образом, вы должны подставить числовые значения для всех параметров уравнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...