FOR循环,具有来自不同配置中的两个阵列的多个值

时间:2015-01-21 12:41:40

标签: arrays matlab

我正在开发一个涉及计算设备工作量的项目。

鉴于我有两个角度, 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

1 个答案:

答案 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');

得出这个情节:

2-D function plot

这里不需要循环,在MATLAB中矢量化计算的速度非常快(参见优秀的MATLAB文档,例如http://de.mathworks.com/help/matlab/matlab_prog/vectorization.html)。您可能还应该阅读有关 meshgrid (控制台上的doc meshgrid)的文档。