Unable to perform assignment because the size of the left side is 1-by-1 and the size of the right side is 0-by-1.
32 views (last 30 days)
Show older comments
Adam Thompson
on 11 Mar 2020
Commented: Star Strider
on 12 Mar 2020
% Y asymptote of curve
Rd = 2;
% Release point x
XL = -1;
% Starting point x
X0 = 2.5;
% Find A for launch angles 0-45deg
A_values = ones(1,45);
B_values = ones(1,45);
LaunchAngle = ones(1, 45);
for qL = 1:45
LaunchAngle(1,qL) = qL;
qLrad = deg2rad(qL);
Rd = 2; % Y asymptote of curve
XL = -1; % Release point x
X0 = 2.5; % Starting point x
syms A
syms B
F = [(((-2*A*Rd*exp(A*(XL-B)))/((exp(A*(XL-B))+1)^2))-tan(qLrad)== 0), ((-Rd + ((2*Rd) /(1 + exp(A*(X0 - B))))) == 0)];
AB = vpasolve(F, [A, B])
A_values(1,qL) = AB.A;
B_values(1,qL) = AB.B;
end
I understand i'm currently trying to store the incorrect number of elements but I'm new to MATLAB and don't see how I'm doing this.
Offending line is:
A_values(1,qL) = AB.A;
1 Comment
Guillaume
on 11 Mar 2020
A 0x1 array is an empty array. Sounds like vpasolve failed to find a solution.
Accepted Answer
Star Strider
on 11 Mar 2020
The problem is that vpasolve could not find a solution, so it returned an empty vector. The Symbolic Math Toolbox is good for many things although not for iterative calculations.
Try this instead:
for qL = 1:45
LaunchAngle(1,qL) = qL;
qLrad = deg2rad(qL);
Rd = 2; % Y asymptote of curve
XL = -1; % Release point x
X0 = 2.5; % Starting point x
% syms A
% syms B
F = @(A,B) [(((-2*A*Rd*exp(A*(XL-B)))/((exp(A*(XL-B))+1)^2))-tan(qLrad)), ((-Rd + ((2*Rd) /(1 + exp(A*(X0 - B))))))];
AB0 = [1; 1];
AB = fsolve(@(b)F(b(1),b(2)), AB0)
A_values(:,qL) = AB(1);
B_values(:,qL) = AB(2);
end
Experiment with the initial parameter estimates (‘AB0’) if necessary to get different results.
6 Comments
Star Strider
on 12 Mar 2020
My pleasure!
If my Answer helped you solve your problem, please Accept it!
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!