From where is this exp in syms calculus?

1 回表示 (過去 30 日間)
Andrew
Andrew 2020 年 9 月 2 日
編集済み: Andrew 2020 年 9 月 3 日
syms V1 V2 p1 p2 n
eqv=p1*V1^n==p2*V2^n;
solve(eqv,V2)
Warning: Solutions are parameterized by the symbols: l. To include parameters
and conditions in the solution, specify the 'ReturnConditions' value as 'true'.
> In sym/solve>warnIfParams (line 475)
In sym/solve (line 357)
Warning: Solutions are only valid under certain conditions. To include
parameters and conditions in the solution, specify the 'ReturnConditions' value
as 'true'.
> In sym/solve>warnIfParams (line 478)
In sym/solve (line 357)
ans =
exp(-(l*6.2832i)/n)*((V1^n*p1)/p2)^(1/n)
true ans ((V1^n*p1)/p2)^(1/n).

採用された回答

James Tursa
James Tursa 2020 年 9 月 2 日
編集済み: James Tursa 2020 年 9 月 3 日
The solution space has multiple values, not just one. The solver has parameterized the solution space for you. There are multiple complex roots possible. E.g., a simpler example:
>> syms Y X n
>> eqv = Y==X^n;
>> solve(eqv,X)
Warning: Solutions are parameterized by the symbols: l. To include parameters and conditions in the
solution, specify the 'ReturnConditions' value as 'true'.
> In solve>warnIfParams (line 475)
In solve (line 357)
Warning: Solutions are valid under the following conditions: 0 <= real(n)*(pi - imag(log(Y)/n) +
2*l*pi*real(1/n)) & 0 < real(n) & 0 < real(n)*(pi + imag(log(Y)/n) - 2*l*pi*real(1/n)) & in(l,
'integer') | real(n)*(pi - imag(log(Y)/n) + 2*l*pi*real(1/n)) <= 0 & real(n) < 0 & real(n)*(pi +
imag(log(Y)/n) - 2*l*pi*real(1/n)) < 0 & in(l, 'integer'). To include parameters and conditions in the
solution, specify the 'ReturnConditions' value as 'true'.
> In solve>warnIfParams (line 482)
In solve (line 357)
ans =
Y^(1/n)*exp(-(pi*l*2i)/n)
The obvious solution by inspection is X = Y^(1/n). That happens to be the solution for the parameter choice l=0, but there are other solutions for other values of l also. Essentially it includes the n'th roots of 1 as a multipler in this case (the exp stuff).
E.g., to get rid of those complex n'th roots of 1:
>> solve(eqv,X,'Real',true)
Warning: Solutions are valid under the following conditions: 0 < Y. To include parameters and
conditions in the solution, specify the 'ReturnConditions' value as 'true'.
> In solve>warnIfParams (line 482)
In solve (line 357)
ans =
Y^(1/n)
And thus your code could be:
>> syms V1 V2 p1 p2 n
>> eqv = p1*V1^n==p2*V2^n;
>> solve(eqv,V2,'Real',true)
Warning: Solutions are valid under the following conditions: 0 < (V1^n*p1)/p2 &
in(((V1^n*p1)/p2)^(1/n), 'real'). To include parameters and conditions in the solution, specify the
'ReturnConditions' value as 'true'.
> In solve>warnIfParams (line 482)
In solve (line 357)
ans =
((V1^n*p1)/p2)^(1/n)
  1 件のコメント
Andrew
Andrew 2020 年 9 月 3 日
編集済み: Andrew 2020 年 9 月 3 日
This parametrization occurs when syms are used to solve equations that have exponential expressions. In solve function stating ‘Real’ excludes integers, confirming that simulated variables will be only real numbers?
For me, MATLAB is a new stuff/tool… So no offense if the additional question is completely incorrect. Built-in symunit, or “symbolic tool box” is making me confused…
u=symunit;
p1=1*u.bar;
t1=(35+273)*u.K;
p2=40*u.bar;
V1=.8*u.m^3;
n=1.3;
V2=(V1^n*p1/p2)^(1/n)
t2=(p2*V2)/(p1*V1/t1)
p11=1;%*u.bar;
t11=(35+273);%*u.K;
p22=40;%*u.bar;
V11=.8;%*u.m^3;
n=1.3;
V22=(V11^n*p11/p22)^(1/n) %*u.m^3;
t22=(p22*V22)/(p11*V11/t11) %*u.K;
When calculating with units and calculus/equations have exponents ans becomes complicated. Is there som posibiliti to make this calculus with units, but keeping “normal/expected” form of ans?

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeCalculus についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by