我正在开发一个涉及计算设备工作量的项目。
鉴于我有两个角度, beta1 和 beta2 介于0到10度之间([deg]用于简化,实际上在[弧度]), 我想计算不同组合的工作量。
beta1 = 1 [deg] 同时 beta2 = 8 [deg]
我无法理解如何做到这一点。我试图通过运行FOR循环获取1000个 beta1 值,然后从 beta2 数组中随机输入来作弊,但显然它不是很可靠。
这是代码:(这是一个烂摊子,但它只是三角法)
for ii=1:1000
for jj=randi(1000)
T_0{ii} = [0 0 0 (l_joint/beta1(ii))*tan(beta1(ii)/2); 0 1 0 0; 0 0 1 0; 0 0 0 1];
T_1{ii} = [cos(beta1(ii)) -sin(beta1(ii))*cos(alpha1) sin(beta1(ii))*sin(alpha1) ...
((l_joint/beta1(ii))*tan(beta1(ii)/2)+l_disk+(l_joint/beta2(ii))*tan(beta2(jj)/2))*cos(beta1(ii)); ...
sin(beta1(ii)) cos(beta1(ii))*cos(alpha1) -cos(beta1(ii))*sin(alpha1) ...
((l_joint/beta1(ii))*tan(beta1(ii)/2)+l_disk+(l_joint/beta2(jj))*tan(beta2(jj)/2))*sin(beta1(ii)); ...
0 sin(alpha1) cos(alpha1) 0; ...
0 0 0 1];
T_2{ii} = [cos(beta2(jj)) -sin(beta2(jj))*cos(alpha2) sin(beta2(jj))*sin(alpha2) ...
((l_disk+(l_joint/beta2(jj))*tan(beta2(jj)/2)))*cos(beta2(jj)); ...
sin(beta2(jj)) cos(beta2(jj))*cos(alpha2) -cos(beta2(jj))*sin(alpha2) ...
((l_disk+(l_joint/beta2(jj))*tan(beta2(jj)/2)))*sin(beta2(jj)); ...
0 sin(alpha2) cos(alpha2) 0; ...
0 0 0 1];
T_section{ii} = (T_0{ii}*T_1{ii}*T_2{ii})^n;
end end
答案 0 :(得分:0)
据我所知,你有一个带有2个参数 beta1 和 beta2 的函数 T_section ,并询问如何计算 beta1 和 beta2 的所有组合的函数 T_section(beta1,beta2)的值。您可以在MATLAB中计算和可视化二维函数的结果,如下所示:
beta1 = 0:0.1:10;
beta2 = 0:0.1:10;
[B1, B2] = meshgrid(beta1, beta2);
T_section = sind(10*B2)*cosd(20*B1); % replace with actual function
surf(beta1, beta2, T_section,'EdgeColor','none')
xlabel('\beta_1'); ylabel('\beta_2');
得出这个情节:
这里不需要循环,在MATLAB中矢量化计算的速度非常快(参见优秀的MATLAB文档,例如http://de.mathworks.com/help/matlab/matlab_prog/vectorization.html)。您可能还应该阅读有关 meshgrid (控制台上的doc meshgrid
)的文档。