1
以下のコードでfsolveを使用しようとしていますが、エラーが発生して修正方法を知りません。参考までに、私は入力引数として(1/2,1,1,1/2,0)を使用します。二次関数を解く際にfsolveエラーが発生する
function [ B_A , A_B ] = SecondOrderSimulation(delta,c1,c2,s0,m2A_Current)
m1A_Current = (-delta -c2*m2A_Current)/c1;
m1B_Current = 0;
m2B_Current = 0;
syms t positive;
B_A = [];
A_B = [];
for k = 0:5
if mod(k,2)==0 || k==0 %if k is even/interval A_n to B_n
f = c1*(m1A_Current + (1+s0)*t) +c2*(m2A_Current + m1A_Current*t
+ ((1+s0)*(t)^2)/2) - delta;
solve_even = fsolve(f,1);
B_A = [B_A solve_even];
m1B_Next = m1A_Current + (1+s0)*solve_even;
m2B_Next = (delta - c1*m1B_Next)/c2;
m1B_Current = m1B_Next;
m2B_Current = m2B_Next;
else %if k is odd/interval B_n to A_n+1
g = c1*(m1B_Current - (1-s0)*t) +c2(m2B_Current + m1B_Current*t - ((1-s0)*(t)^2)/2) + delta;
solve_odd = fsolve(g,1);
A_B = [A_B solve_odd]
m1A_Next = m1B_Current - (1-s0)*solve_odd;
m2A_Next = -(delta +c1*m1A_Next)/c2;
m1A_Current = m1A_Next;
m2A_Current = m2A_Next;
end
end
end
また、ひどい変数のラベリングについては、あらかじめご了承ください。
>> SecondOrderSimulation(1/2,1,1,1/2,0)
Error using lsqfcnchk (line 108)
If FUN is a MATLAB object, it must have an feval method.
Error in fsolve (line 210)
funfcn = lsqfcnchk(FUN,'fsolve',length(varargin),funValCheck,gradflag);
Error in SecondOrderSimulation (line 11)
solve_even = fsolve(f,1);
あなたの先生は、それはすべてが動作するようになりました:)命の恩人ですありがとうございました!! – pepper