我正在尝试使用两个初始变量计算一个值,但最后的答案是被覆盖并且只输出最终值。我已经尝试为变量使用两个嵌套的for循环,但这会产生类似的响应。
% inc = [0:1:360];
% axis = [0:416.6*10^3:15*10^7];
e = [];
Re = 3390*10^3;
om = 270;`
J2 = 1.95545*10^3;
J3 = 3.14498*10^-5;
J4 = -1.53774*10^-5;
J22 = 6.30692*10^-5;
for inc = 0:1:360
for a = 0:416.6*10^3:15*10^7
E1 = ((6-169/2*sin(inc).^2+365/48*sin(inc).^4)
E2 = 35*J4/18*(J2)^2*(12/7-93*sin(inc).^2+21/4*sin(inc).^4);
E = E1-E2;
e1 = (J3*Re/2*J2*axis).*sin(inc).*sin(270);
e2 = (1-(3*E*J2*Re^2/axis.^2)*(5.*(sin(inc).^2)-4));
e = -(e1/e2);
end
end
我试图将结束e值设为一个单元格,以便我可以根据变量inc和axis绘制它。
另外,如果我的公式的语法错误,这里是我试图自动化的公式。
,其中
感谢您提供有关如何解决此问题的任何帮助或建议。
答案 0 :(得分:1)
您可以对代码进行矢量化并获得没有循环的解决方案。正如@ schnobi1所说,你应该更多地关注分子和分子和分母的乘法。
Re = 3390*10^3;
om = 270;
J2 = 1.95545*10^3;
J3 = 3.14498*10^-5;
J4 = -1.53774*10^-5;
J22 = 6.30692*10^-5;
inc = 0:360;
a = 0:416.6*10^3:15*10^7;
E1 = (6-169/2*sin(inc).^2+395/48*sin(inc).^4); % 1 x 361 vector
E2 = 35*J4/18*(J2)^2*(12/7-93*sin(inc).^2+21/4*sin(inc).^4); % 1 x 361 vector
E = E1-E2; % 1 x 361 vector
e1 = [sin(270)*(J3*Re./(2*J2*a))].'*sin(inc); % vector multiplication, this is now 361 x 361 matrix
e2 = 1-([3*J2*Re^2./a.^2].'*(E./(5*(sin(inc).^2)-4))); % vector multiplication, this is now 361 x 361 matrix
e = -(e1./e2);
结果是361 x 361矩阵,其中行根据a
的值,而列根据inc
的值。
例如,对于第4位的a
和第12位的inc
,您将获得:
a(4)=
1249800
inc(12)=
11
e(4,12)=
-8.9796e-18
答案 1 :(得分:0)
您的实施中存在一些错误。请仔细查看您的所有条款(例如395/48是您的365/48)。括号有时也设置不正确。我希望我发现所有这些问题,但请再次仔细检查。
比使用预定义变量“axis”。它用于绘图,定义为[0 1 0 1]。这就是您的代码无法正常工作的原因。 所以请试试这个。
%% Clearing
clc; clear all; close all
%% Variables
e = [];
Re = 3390*10^3;
om = 270;
J2 = 1.95545*10^3;
J3 = 3.14498*10^-5;
J4 = -1.53774*10^-5;
J22 = 6.30692*10^-5;
inc=1
a = 1
%% Calculate e
for inc = 0:1:360
for a = 0:416.6*10^3:15*10^7
E1 = 6-(169/12)*sin(inc).^2 + 395/48*sin(inc).^4;
E2 = 35*J4/(18*J2^2)*(12/7-(93/15*sin(inc).^2+21/4*sin(inc).^4));
E = E1-E2;
e1 = (J3*Re)/(2*J2*a) * sin(inc)*sin(270);
e2 = 1-((3*J2*Re^2*E)/(a^2*(5*sin(inc)^2-4)));
e = [e, -(e1/e2)];
end
end
要将您的e存储到矩阵中,您只需使用e = [e, -(e1/e2)];
即可。但请注意,这不是一个“好方法”。因为在每次运行中,e都会被复制,这会让它变慢。从零开始分配e并稍后写入其中的值会更好,更快。
答案 2 :(得分:0)
你可以在你要更新的所有矢量点上使用直接索引。循环使用示例e1(Inc)=您的计算; e2(Inc)=你的计算; E(公司)= - (E1(INC)/ E2(公司));但是它会很慢,但你可以期待