Inner matrix dimensions must agree error message,

1 回表示 (過去 30 日間)
Noob
Noob 2020 年 9 月 22 日
編集済み: Adam Danz 2020 年 9 月 22 日
Hi,
I'm getting an error message that says inner matrix dimensions must agree, but I checked both matrices and they seem fine -- it's just a 2x2 matrix left-multiplying with a 2x1 matrix.
Here's the error message:
Error using *
Inner matrix dimensions must agree.
Error in Root_finding_practice (line 78)
x(:,i+1) = x(:,i) - ( inv( H( x(:, i) ) ) * J( x(:,i) ) ); % Newton's method in 2 variables
And here's the piece of the code:
J = @(x) [ cos( x(2) ), -x(1) * sin( x(2) ) ]; % Jacobian of f
H = @(x) [ 0, -sin( x(2) ); % Hessian matrix of 2nd derivatives
-sin( x(2) ), -cos( x(2) ) * x(1) ];
% An initial guess at a multivariable root:
x = [1; 1];
for i = 1:100 % The for-loop should stop when the function tolerance is satisfied
x(:,i+1) = x(:,i) - ( inv( H( x(:, i) ) ) * J( x(:,i) ) ); % Newton's method in 2 variables
What am I missing?
Thanks,

採用された回答

Adam Danz
Adam Danz 2020 年 9 月 22 日
編集済み: Adam Danz 2020 年 9 月 22 日
You can either perform element-wise multiplication with implicit expansion
x(:,i) - inv(H(x(:, i)) .* J(x(:,i)))
% add this ^
however that will produce a 2x2 output which will cause an error when you index it into
x(:,i+1) =
or you can perform matrix multiplication
H(x(:, i)) is a 2x2 matrix, J(x(:,i)) is a 1x2 matrix. If you multiply these matricies, you either need to transpose the J term or switch the two terms
H(x(:, i)) * J(x(:,i)).' % result is 2x1 matrix
% or
J(x(:,i)) * H(x(:, i)) % result is a 1x2 matrix
but matrix inversion using inv() requires the use of a square matrix and neither of those fulfill that requirement.
So, you've got some thinking to do regarding what the output should be and how you'll store it.
  4 件のコメント
Noob
Noob 2020 年 9 月 22 日
haha, yeah, I like those spaces. it's kinda weird but it makes it more readable to me.
Have a great night / day, Adam!
Adam Danz
Adam Danz 2020 年 9 月 22 日
編集済み: Adam Danz 2020 年 9 月 22 日
Thanks; and no problem with the spaces! You'll see lots of style manuals out there suggesting best practices when writing code that will be used by more than 1 person but it's fine to come up with a style that makes sense to you. Just today I was told by a friend that I write too many comments in my code 🙄.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

製品


リリース

R2017a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by