左辺のサイズが 1x1 で右辺のサイズが 0x1 であるため、代入を実行できません。

21 visualizzazioni (ultimi 30 giorni)
hiroaki miyauchi
hiroaki miyauchi il 22 Nov 2019
Commentato: hiroaki miyauchi il 26 Nov 2019
左辺と右辺のサイズが異なるため、計算数値を行列に代入できない。
サイズを合わせようとreshape関数を使ったが、うまくいきません。
また、右辺のサイズが 0x1 であるというエラーメッセージの意味がよくわかりません。
よろしくお願いします。
N = 3;
syms r
x = zeros(N+1,N+1);
for i = 0:N
for j = 0:N
f = besselj(i,r);
x(i+1,j+1) = vpasolve(f,r,[j*pi (j+1)*pi]);
end
end
disp(x)
>> eignvalue
左辺のサイズが 1x1 で右辺のサイズが 0x1 であるため、代入を実行できません。
エラー: eignvalue (line 7)
x(i+1,j+1) = vpasolve(f,r,[j*pi (j+1)*pi]);

Risposta accettata

Hiroki Okawa
Hiroki Okawa il 23 Nov 2019
ツールボックスを持っていないため未検証ですが、エラーメッセージによるとvpasolve関数で解が得られていないようです。
  1 Commento
hiroaki miyauchi
hiroaki miyauchi il 26 Nov 2019
おかげさまで原因が分かりました。ご指摘ありがとうございます。

Accedi per commentare.

Più risposte (1)

Shota Kato
Shota Kato il 25 Nov 2019
右辺のサイズが 0x1 であるというエラーメッセージの意味は,vpasolveによって解が求まっていない,ということです.
vpasolveのドキュメント (https://jp.mathworks.com/help/symbolic/vpasolve.html) が役に立つのではないのでしょうか.
vpasolveの返す値は空のオブジェクトなので,行列の要素として代入することはできません.
これでいいかはわかりませんが,解が求まらないときはx(i+1, j+1)に他の値を代入することでプログラムは回るようになります.
N = 3;
syms r
x = zeros(N+1,N+1);
for i = 0:N
for j = 0:N
f = besselj(i,r);
x_ = vpasolve(f,r,[j*pi (j+1)*pi]);
if isempty(x_)
x(i+1, j+1) = nan;
else
x(i+1,j+1) = x_;
end
end
end
disp(x)
>> eignvalue
2.4048 5.5201 8.6537 11.7915
0 3.8317 7.0156 10.1735
0 5.1356 8.4172 11.6198
0 NaN 6.3802 9.7610
  1 Commento
hiroaki miyauchi
hiroaki miyauchi il 26 Nov 2019
方程式の解を求めることについては お教えしていただいた方法で求められました。
vpasolve 関数は空のプロジェクトを返すことについては初めて知りました。
ご指摘ありがとうございます。

Accedi per commentare.

Categorie

Scopri di più su Symbolic Math Toolbox in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!