How to save variables in workspace to be used after running the code multiple times?
5 次查看(过去 30 天)
显示 更早的评论
A = input('Pick an angle 15, 30, 45, or 60 angle = ');
if A ~= [15 30 45 60]
error('Error. angle must be 15, 30, 45, or 60 degrees ');
end
b = 4;
c = 4;
a = sidea(b,c,A);
B = asind((b*sind(A))/a);
C = 180 - B - A;
H = C;
E = 180 - C - H;
e = 4;
f = a;
g = 4;
h = 4;
F = asind((f*sind(E))/e);
D = 180 - E - F;
d = sided(e, f, D);
i = d;
G = asind((g*sind(H))/h);
I = 180 - G - H;
%% Variables/Calculations
% Method of Joints
P = 1;
% Joint I
Fig = P / sind(I);
Fei = Fig * cosd(I);
% Joint G
Fge = (Fig*sind(I))/(sind(F));
Fgb = (Fge*cosd(F)+Fig*cosd(I));
% Joint B
Fba = (Fgb)/(cosd(A)+(sind(A)*cotd(C)));
Fbe = (Fba*sind(A))/sind(C);
% Joint E
Fea = Fei - (Fge*cosd(F))+(Fbe*cosd(D));
%% Solving for P
if A == 15
Fea = -Fea;
if Fba > Fge
T = ((8*(trig(A, C, F, I))));
elseif Fba < Fge
T = 6 * sind(F);
end
end
if A == 30
Fea = -Fea;
if Fba > Fge
Z = ((8*(trig(A, C, F, I))));
elseif Fba < Fge
Z = 6 * sind(F);
end
end
if A == 45
Fea = -Fea;
if Fba > Fbe
P = (8*(trig(A, C, F, I)));
elseif Fbe > Fba
P = ((6*(trig(A, C, F, I)*(sind(C)/sind(A)))));
end
end
if A == 60
R = ((6*(trig(A, C, F, I))));
end
%% User Defined Functions
function [a] = sidea(b, c, A)
[a] = sqrt(b^2 + c^2 - (2*b*c*cosd(A)));
end
function [d] = sided(e, f, D)
[d] = sqrt(e^2 + f^2 - (2*e*f*cosd(D)));
end
function [comp] = trig(A, C, F, I)
[comp] = (cosd(A)+sind(A)*cotd(C))/(cotd(F)+cotd(I));
end
I am trying to run this code four times for four different angles, [15, 30, 45, 60]. I want it to save variables across each run so at the end, i can use them to plot. My problem is, no matter what i do, the variables seem to be overided. I tried to saved the variable as it's own file using save command but I could not run the code because i was trying to load variables that were not yet saved. I tried to initialize these variables and save them as 0 so that i could run the code but then the variables would be overun. If anyone has any idea it would be a great help.
0 个评论
回答(1 个)
Walter Roberson
2020-4-18
编辑:Walter Roberson
2020-4-18
T = nan;
Z = nan;
P = nan;
R = nan;
for trynum = 1 : 4
A = input('Pick an angle 15, 30, 45, or 60 angle = ');
if A ~= [15 30 45 60]
error('Error. angle must be 15, 30, 45, or 60 degrees ');
end
b = 4;
c = 4;
a = sidea(b,c,A);
B = asind((b*sind(A))/a);
C = 180 - B - A;
H = C;
E = 180 - C - H;
e = 4;
f = a;
g = 4;
h = 4;
F = asind((f*sind(E))/e);
D = 180 - E - F;
d = sided(e, f, D);
i = d;
G = asind((g*sind(H))/h);
I = 180 - G - H;
%% Variables/Calculations
% Method of Joints
P = 1;
% Joint I
Fig = P / sind(I);
Fei = Fig * cosd(I);
% Joint G
Fge = (Fig*sind(I))/(sind(F));
Fgb = (Fge*cosd(F)+Fig*cosd(I));
% Joint B
Fba = (Fgb)/(cosd(A)+(sind(A)*cotd(C)));
Fbe = (Fba*sind(A))/sind(C);
% Joint E
Fea = Fei - (Fge*cosd(F))+(Fbe*cosd(D));
%% Solving for P
if A == 15
Fea = -Fea;
if Fba > Fge
T = ((8*(trig(A, C, F, I))));
elseif Fba < Fge
T = 6 * sind(F);
end
end
if A == 30
Fea = -Fea;
if Fba > Fge
Z = ((8*(trig(A, C, F, I))));
elseif Fba < Fge
Z = 6 * sind(F);
end
end
if A == 45
Fea = -Fea;
if Fba > Fbe
P = (8*(trig(A, C, F, I)));
elseif Fbe > Fba
P = ((6*(trig(A, C, F, I)*(sind(C)/sind(A)))));
end
end
if A == 60
R = ((6*(trig(A, C, F, I))));
end
end
if isnan(T)
error('You never selected 15')
end
if isnan(Z)
error('You never selected 30')
end
if isnan(P)
error('You never selected 45')
end
if isnan(R)
error('You never selected 60')
end
plot([15 30 45 60], [T, Z, P, R])
%% User Defined Functions
function [a] = sidea(b, c, A)
[a] = sqrt(b^2 + c^2 - (2*b*c*cosd(A)));
end
function [d] = sided(e, f, D)
[d] = sqrt(e^2 + f^2 - (2*e*f*cosd(D)));
end
function [comp] = trig(A, C, F, I)
[comp] = (cosd(A)+sind(A)*cotd(C))/(cotd(F)+cotd(I));
end
5 个评论
Walter Roberson
2020-4-18
exactly which variables need to be recorded and at which points? For example do you need to record Fea before and after Fea = -Fea?
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!