このトピックで説明されているのと同じ種類の問題があります: Using fzero: タイプ 'sym' の入力引数に対して未定義の関数またはメソッド 'isfinite'
彼らの答えは本当に助けになりましたが、私はまだ立ち往生しています。
w の関数の零点も見つけなければなりません。この関数はいくつかのステップで定義されます。
したがって、唯一の未知数は w であり、次のような他のオブジェクトを定義しました。
lambda= @(w) ((16*rho(i)*A(i)*w^2*Lprime(i)^2)/(E(j)*I(i)))^0.25;
beta=@(w) lambda*b(i)^0.5;
gamma=@(w) lambda*Lprime(i)^0.5;
次に、4*4 行列 M2 を定義します。
M2=@(w) [besselj(4,beta) bessely(4,beta) besseli(4,beta) besselk(4,beta);
besselj(3,beta) bessely(3,beta) besseli(3,beta) -besselk(3,beta);
besselj(2,gamma) bessely(2,gamma) besseli(2,gamma) besselk(2,gamma);
besselj(4,gamma) bessely(4,gamma) besseli(4,gamma) besselk(4,gamma)];
この場合、解く方程式は det(M2)=0 です。しかし、w=0 は解の 1 つです。最初のゼロ以外の解が必要なので、次のように書きました。
delta = @(w) det(M2);
S(i,j)=fzero(delta,500);
次に、プログラムを実行すると、Matlab は次のように言います。
??? Error using ==> fzero at 235
FZERO cannot continue because user supplied function_handle ==> @(w)det(M2)
failed with the error below.
Undefined function or method 'det' for input arguments of type 'function_handle'.
Error in ==> frequencies at 57
S(i,j)=fzero(delta,500);
subs と eval メソッドも試しましたが、どちらも機能しません。これらの場合のエラーメッセージは次のとおりです。
??? Undefined function or method 'isfinite' for input arguments of type 'sym'.
Error in ==> fzero at 323
elseif ~isfinite(fx) || ~isreal(fx)
Error in ==> frequencies at 58
S(i,j)=fzero(@(w) subs(delta,'w',w),500);
これは、私が推測するedioと同じエラーです。と:
??? Error using ==> fzero at 307
FZERO cannot continue because user supplied function_handle ==> @(w)eval(delta)
failed with the error below.
Undefined function or method 'eval' for input arguments of type 'function_handle'.
Error in ==> frequencies at 59
S(i,j)=fzero(@(w)eval(delta),500);
助けてください。