用matlab求解非线性方程组

用matlab求解非线性方程组,matlab,nonlinear-functions,newtons-method,Matlab,Nonlinear Functions,Newtons Method,我有一个家庭作业问题不能回答。问题提示如下: 定义函数中的等式8.3和等式8.4。此函数应将关节角度(and)的向量作为输入,并应返回一个列向量,该列向量包含在这些角度处计算的两个函数(and)。该函数应包含用于计算的和的链接长度和值。在解决方案中包含代码 等式8.3和8.4为: (8.3) (8.4) 在哪里 以下是我编写的函数: function F = rob_arm (alphag, betag) F = (1).*cos(alphag)+ (1).*(cos(alphag+b

我有一个家庭作业问题不能回答。问题提示如下:

  • 定义函数中的等式8.3和等式8.4。此函数应将关节角度(and)的向量作为输入,并应返回一个列向量,该列向量包含在这些角度处计算的两个函数(and)。该函数应包含用于计算的和的链接长度和值。在解决方案中包含代码
  • 等式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
    的值。经过四个小时的纠结,我甚至不知道这个问题在问什么,助教们目前也没有回复电子邮件。我编写了以下代码,试图将
    rob\u 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\u pos
    是良好的输出。我可以画出它的图形,我得到了一张非常漂亮的图片,上面有这个机器人手臂能够“到达”的所有可能的点

    但因为我是哑巴,并且已经尝试了很多小时,它并没有将
    rob_arm
    的连续值保存到
    col_vec
    中,每次它都会替换它,我最终得到一个1x1矩阵。最终,我们的目标将是使用牛顿-拉斐逊方法来确定这个函数的零点,但这还有很长的路要走。我在想,如果我能把rob_arm计算出的所有值放到一列中,那么我就可以回答这个问题了

    下一个问题是:

  • 创建一个单独的函数,该函数接受包含角度和角度对的单行向量的输入。函数的输出应该是雅可比矩阵(2乘2矩阵)。首先,计算等式的导数。8.3–8.4手动操作,然后将它们放入您的功能中。在解决方案中包含函数代码
  • 我需要澄清一下,因为我不明白如何将1 x 51矩阵(
    alpha
    )和1 x 102矩阵(
    beta
    )接受为一个单行向量,然后输出一个2x2矩阵。我知道雅可比矩阵是什么,它是两个函数的偏导数,而不是一个值矩阵


    如果有人想帮我,那就太棒了。

    你的函数定义不对,你应该使用

    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值丢失了

    这不是很容易纠正吗,就像将函数值作为向量返回,
    F=[f1;f2]
    以及
    f1
    f2
    的相应表达式一样简单吗?在LutzLs的注释中使用ellaborate:尝试
    函数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中的行之间继续一条语句(在倍频程中,并不总是需要有点…)