簡體   English   中英

在Matlab中求解非線性方程

[英]solving nonlinear equations in matlab

我有一個無法回答的作業問題。 這是問題提示:

  1. 定義方程 8.3和等式 8.4中的一個功能。 此函數應采用關節角的向量( \\α \\ beta )作為輸入,並應返回包含兩個函數的列向量( f_ {1} f_ {2} )以這些角度進行評估。 該函數應包含鏈接長度和值 R {des} H_ {des} = 1.1 用於計算。 在解決方案中包含您的代碼。

公式8.3和8.4為:

式 (8.3)

式 (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 = \\左\\ langle 0,\\ pi \\右\\ 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連續值rob_armcol_vec ,它每次都替換一次,結果得到一個1x1矩陣。 最終,目標是使用Newton-Raphson方法確定該函數的零點,但這還有很長的路要走。 我在想如果我可以將rob_arm計算的所有值rob_arm放在一個列中,那么我可以回答這個問題。

下一個問題是:

  1. 創建一個單獨的函數,接受包含一對角度的單個行向量的輸入 \\α \\ beta 函數的輸出應為雅可比行列式(2 x 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值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM