在matlab中求解非线性方程组

时间:2015-03-30 01:12:52

标签: matlab nonlinear-functions newtons-method

我有一个我无法回答的作业问题。这是问题提示:

  1. De fi ne Eq。 8.3和Eq。 8.4在一个函数中。此函数应采用关节角度(\alpha\beta)的向量作为输入,并应返回包含两个函数(f_{1}f_{2})的列向量角。该函数应包含R{des}H_{des} = 1.1的链接长度和值以进行计算。在解决方案中包含您的代码。
  2. 方程8.3和8.4是:

    formula(8.3)

    formula(8.4)

    ,其中

    d_{1} = d_{2} = 1.0

    R{des} = 1

    H_{des} = 1.1

    \alpha = \left \langle 0, \frac{\pi}{2} \right \rangle

    \beta = \left \langle 0, \pi \right \rangle

    这是我写的函数:

    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
    

    由于alphabeta是不同大小的矩阵,我使用meshgrid创建alphagbetag,并使用这些矩阵来计算值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. 创建一个单独的函数,该函数接受包含角度\alpha\beta的单个行向量的输入。函数的输出应该是雅可比矩阵(2乘2矩阵)。首先,计算方程的导数。 8.3 - 8.4手动,然后将它们放入你的功能。在解决方案中包含您的功能代码
    2. 我需要请求澄清,因为我不明白如何将1 x 51矩阵(alpha)和1 x 102矩阵(beta)接受为单行向量,然后输出2x2矩阵。我知道雅可比是什么,它是我的两个函数的部分导数,而不是值的矩阵。

      如果有人想帮助我,那将是非常棒的。

1 个答案:

答案 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值。