我有一个我无法回答的作业问题。这是问题提示:
方程8.3和8.4是:
(8.3)
(8.4)
,其中
这是我写的函数:
function F = rob_arm (alphag, betag)
F = (1).*cos(alphag)+ (1).*(cos(alphag+betag))-(1) ;
(1).*sin(alphag) + (1).*(sin(alphag+betag))-(1.1) ;
end
由于alpha
和beta
是不同大小的矩阵,我使用meshgrid
创建alphag
和betag
,并使用这些矩阵来计算值rob_arm
。经过四个小时的搞乱之后,我甚至不确定问题是什么了,而且TA目前还没有回复电子邮件。我编写了以下代码,尝试强制rob_arm
成一列:
alpha = 0:pi/100:(pi/2); %define angle alpha
beta = 0:pi/100:pi; %define angle beta
[alphag, betag] = meshgrid (alpha, beta); %mesh grid alpha and beta b/c different matrix dimensions
arm_pos = rob_arm (alphag, betag);
for ii = 1:1:101
for k = 1:1:51
col_vec (1,1:1:5151) = arm_pos(ii,k);
end
end
忽略查询以创建列向量,结果输出arm_pos
是良好的输出。我可以绘制图形,我可以得到这个机器人手臂可以达到的所有可能点的非常漂亮的图片。
但是因为我愚蠢并且已经尝试了好几个小时,所以它不会将rob_arm
的连续值保存到col_vec
中,它每次都会替换它,我最终得到1x1矩阵。最终,目标将是使用Newton-Raphson方法来确定此函数的零点,但这还有很长的路要走。我想如果我可以将rob_arm
计算的所有值都放到一个列中,那么我可以回答这个问题。
接下来的问题是:
我需要请求澄清,因为我不明白如何将1 x 51矩阵(alpha
)和1 x 102矩阵(beta
)接受为单行向量,然后输出2x2矩阵。我知道雅可比是什么,它是我的两个函数的部分导数,而不是值的矩阵。
如果有人想帮助我,那将是非常棒的。
答案 0 :(得分:0)
你的功能定义不对,你应该使用像
这样的东西function F = rob_arm (alphag, betag)
F = [(1).*cos(alphag)+ (1).*(cos(alphag+betag))-(1) ; ...
(1).*sin(alphag) + (1).*(sin(alphag+betag))-(1.1)];
end
没有三个点“......”MATLAB执行此计算
(1).*sin(alphag) + (1).*(sin(alphag+betag))-(1.1);
但对结果不执行任何操作,并返回
F = (1).*cos(alphag)+ (1).*(cos(alphag+betag))-(1) ;
这不是你想要的,缺少一半的F值。