solving implicit equations and saving positive roots in "double" array

4 views (last 30 days)
Hi - I need to find the solutions of several implicit equations, then save the positive roots in a matrix (possibly a "double" array).
When I try to do so I get an error, "Assignment has more non-singleton rhs dimensions than non-singleton subscripts".
I'd greatly appreciate some help. Here's a simplified version of my code.
Notes:
  • I understand that using "solve" like I'm doing here below will return 2 solutions for each equation. I tried using vpasolve instead, specifying an interval, but I still get the same error message;
  • I need to do this for different equations and some functional forms make it impossible to find the solutions explicitly, hence my need for a general procedure
clear all; close all; clc;
GAMMA =1.1;
ALOW=0.6;
data=[0 0 7.34 9.39 0 9.12 7.95 8.06 8.47 9.16;
8.26 0 0 0 7.5 0 7.82 7.24 9.54 9.13;
0 8.31 8.99 9.46 0 0 0 8.16 7.85 7.23;
7.96 0 7.53 8.47 0 8.62 0 0 7.31 7.13;
8.83 8.72 8.65 9.42 0 8.87 7.86 0 8.34 8.89;
0 7.79 0 8.27 9.45 7.15 0 8.19 0 0;
0 0 9.34 7.08 8.72 0 0 0 0 0;
7.59 0 7.53 7.48 7.78 0 8.86 0 7.74 8.95;
7.37 0 8.07 0 7.64 0 8.9 9.27 9.15 7.89;
0 7.09 8.34 8.55 9.33 8.89 0 0 6.96 8.95];
output=zeros(10,10);
for j = 1 : 10
for t=1:10
if data(t,j) >0
syms x
output(t,j)=solve(ALOW*(1/(x^2+1)^(3/2))*GAMMA*data(t, j)-1, x);
else
output(t,j)=0;
end
end
end

Accepted Answer

Walter Roberson
Walter Roberson on 25 Nov 2018
Use
syms x positive
The difficulty you are having is that solve() is finding two solutions, and two solutions do not fit into one slot. You describe wanting to find positive solutions but you are not assigning to a temporary variable and selecting the positive solutions out of the list returned. There is only at most one positive solution for positive data, so adding the constraint when declaring x makes it select that one solution if it exists.
Note: there are no positive solutions when data(i,j) <= 50/33 . That never happens with that particular data matrix you have, but it is a possibility.
  1 Comment
Luigi Pisano
Luigi Pisano on 25 Nov 2018
Thanks. This works perfectly in the "simplified" code I posted; for the "real" one I had to do some extra work but I was able to find a solution, building on what you suggested

Sign in to comment.

More Answers (0)

Categories

Find more on Function Creation in Help Center and File Exchange

Products


Release

R2017a

Community Treasure Hunt

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

Start Hunting!