連立非線形方程式の非常に大きなシステムを解こうとしています。このスレッドと Matalb による関連ヘルプ (最初の例) に従って、次のコードを記述しようとしました。
%% FSOLVE TEST #2
clc; clear; close all
%%
global a0 a1 a2 a3 a4 h0 TM JA JB
a0 = 2.0377638272727268;
a1 = -7.105521894545453;
a2 = 9.234000147272726;
a3 = -5.302489919999999;
a4 = 1.1362478399999998;
h0 = 45.5;
TM = 0.00592256;
JA = 1.0253896074561006;
JB = 1.3079437258774012;
%%
global N
N = 5;
XA = 0;
XB = 15;
dX = (XB-XA)/(N-1);
XX = XA:dX:XB;
y0 = JA:(JB-JA)/(N-1):JB;
plot(XX,y0,'o')
[x,fval] = fsolve(@nlsys,y0);
ここで、関数nlsysは次のとおりです。
function S = nlsys(x)
global a1 a2 a3 a4 N TM h0 dX JA JB
H = h0^2/12;
e = cell(N,1);
for i = 2:N-1
D1 = (x(i+1) - x(i-1))./2./dX;
D2 = (x(i+1) + x(i-1) - 2.*x(i))./(dX^2);
f = a1 + 2*a2.*x(i) + 3*a3.*x(i).^2 + 4*a4.*x(i).^3;
g = - H.* (a1 + 2*a2.*x(i) + 3*a3.*x(i).^2 + 4*a4.*x(i).^3)./(x(i).^5);
b = (H/2) .* (5*a1 + 8*a2.*x(i) + 9*a3.*x(i).^2 + 8*a4.*x(i).^3)./(x(i).^6);
e{i} = @(x) f + b.*(D1.^2) + g.*D2 - TM;
end
e{1} = @(x) x(1) - JA;
e{N} = @(x) x(N) - JB;
S = @(x) cellfun(@(E) E(x), e);
プログラムを実行すると、Matlab で次のエラーが発生します。
fsolve の使用エラー (280 行目) FSOLVE では、ユーザー関数によって返されるすべての値がデータ型 double である必要があります。
fsolve_test2 のエラー (32 行目) [x,fval] = fsolve(@nlsys,y0);
私の間違いはどこですか?前もって感謝します。
ペトリュス