vpasolve and independent equations
6 次查看(过去 30 天)
显示 更早的评论
Hello,
How does the vpasolve command work and what is the difference between vpasolve and solve ?
I read on a discussion the vpasolve can solve many independent equations without using a loop over single equations. Then I tried and got the following.
>> syms x y z u;
1>> sol = vpasolve([2*x+3, exp(y)-20,log(z+5)+60],[x,y,z]);[sol.x sol.y sol.z] % correct answer
ans =
[ -1.5, 2.9957322735539909934352235761425, -4.9999999999999999999999999912435]
2>> sol = vpasolve([2*x+3, exp(y)-20,log(z+5)+60,1/u+10],[x,y,z,u]);[sol.x sol.y sol.z sol.u] % ??
ans =
[ -1.5, 72.364158219472484524557308589775, - 2.3427240402068111246084751973687e55 - 3.8942786692210248849674644994505e53i, 2.1973620198615687196267013300432e220164446]
3>> sol = vpasolve([2*x+3, exp(y)-20,1/u+10],[x,y,u]);[sol.x sol.y sol.u] % ??
ans =
[ -1.5, 72.395408219472484524557308589775, 7.6288584990871366247428709032065e187034710]
4>> sol = vpasolve([2*x+3,1/u+10],[x,u]);[sol.x sol.u] % correct answer
ans =
[ -1.5, -0.1]
Commands 1 and 4 gave the correct answer that I expected. But I don't understand the results of 2 and 3. 2 is the 1 to which I added one simple equation 1/u+10 ==0. Not only the result of that equation is not correct (in the sens -1/10 that I expect) but also the results of the former equations are affected. I cannot uderstand complex number as result for log(z+5)+60==0. Same thing in 3. then in 4 I supress some equations and I get expected results again. Does anyone understand what is actually done ?
And in the case, how can I solve for many independent equations (like the same equations but with different parameters: e.g. a1*x+b1==0, a2*x+b2==0, ..., an*x+bn ==0) without using a loop over the single equations ?
Thanks.
2 个评论
Walter Roberson
2019-8-17
vpasolve() uses a modified Newton search. You can look at the innards by using
evalin(symengine,'expose(symobj::vpasolve)')
which will take you to numeric::solve which will take you to numeric::fsolve which is documented https://www.mathworks.com/help/symbolic/mupad_ref/numeric-fsolve.html
采纳的回答
Roshni Garnayak
2019-8-21
‘vpasolve’ solves algebraic equations using numerical methods whereas ‘solve’ solves the equations symbolically. If possible, solve equations symbolically using ‘solve’, and then approximate the obtained symbolic results numerically using ‘vpa’.
You can solve multiple independent equations by using the following piece of code:
syms x y z u;
eqns = [2*x+3==0, exp(y)-20==0,log(z+5)+60==0,1/u+10==0];
vars = [x,y,z,u];
[x1,y1,z1,u1]=solve(eqns,vars);
For further details on ‘solve’ and ‘vpa’ functions refer the following links:
2 个评论
Walter Roberson
2019-8-21
Quasi Newton approaches can effectively end up estimating the response between variables as being locally linear scales of each other. When that is not true, such as when one variable has exponential response and the others are linear, then QN can end up projecting positions far enough out that one of the variables completely dominates to within working precision, and where subtraction of goal point can give 0 to within working precision even though the location is just massively wrong. QN then finds a false solution due to loss of precision.
When you have exponential growth in your formulas then it is advisable to use bounds constraints.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Calculus 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!