Я пытаюсь интегрировать по постоянной функции в MATLAB 2017a, но я застрял.Прежде всего, когда я интегрирую, используя следующий скрипт, я получаю правильный вывод.Таким образом, скрипт работает для x0
, который зависит от t
.
function E=sol(n,k)
x0 = @(t) t^(2);
j = 0;
E = zeros(n,1);
while j < n+1 ;
K = matlabFunction(subs(po(j,k))) ;
eval(sprintf('x%d = integral(K,0,1);',j+1)) ;
E(j+1,1) = subs(sprintf('x%d',j+1))
j = j+1;
end
end
Где функция po(j,k)
выглядит следующим образом:
function A_j = po(j,k) % Adomian polynomials
if j >0
x = sym('x',[1 j]);
syms p; % Assinging a symbolic variable for p
syms x0;
S = x0+ sum(p.^(1:j) .* x) ; % Sum of p*x up to order j
Q =f(S,k); % Taking the k-th power of S, i.e.
A_nc = diff(Q,p,j)/factorial(j); % Taking the j-th order derivative
A_j = subs(A_nc,p,0) ; % Filling in p=0
else
syms x0;
S = x0;
A_j =f(S,k); % Taking the k-th power of S,
end
end
И где f(x,k)
,
function F = f(x,k) % Nonlinear function of k power
F = x^k ;
end
Теперь, когда я наберу sol(n,k)
это работает.Но когда я пытаюсь изменить свою x0
функцию в sol(n,k)
в постоянной функции, например,
function E=solcon(n,k)
x0 = @(t) 2.*ones(size(t));
j = 0;
E = zeros(n,1);
while j < n+1 ;
K = matlabFunction(subs(po(j,k))) ;
eval(sprintf('x%d = integral(K,0,1);',j+1)) ;
E(j+1,1) = subs(sprintf('x%d',j+1))
j = j+1;
end
end
Это не работает, как вы можете видеть, я добавил *ones(size(t));
просто для того, чтобы сделать его функциейt
.Но, к сожалению, это все еще не работает, когда я звоню,
K = matlabFunction(subs(po(j,k))) ;
Я получаю,
@()4.0
И затем я получаю ошибку, когда я звоню,
eval(sprintf('x%d = integral(K,0,1);',j+1))
Может ли кто-нибудь помочь мне, пытаясь интегрировать по константе?
Ошибка, которую я получаю при вызове solcon(10,2)
, равна
Error using symengine>@()4.0
Too many input arguments.
Error in integralCalc/iterateScalarValued (line 314)
fx = FUN(t);
Error in integralCalc/vadapt (line 132)
[q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
Error in integralCalc (line 75)
[q,errbnd] = vadapt(@AtoBInvTransform,interval);
Error in integral (line 88)
Q = integralCalc(fun,a,b,opstruct);
Error in solcon1 (line 7)
eval(sprintf('x%d = integral(K,0,1);',j+1)) ;
EDIT 2, которую я использовалследующий скрипт,
function E=solcon(n,k)
x0 = @(t) 2.*ones(size(t));
j = 0;
E = zeros(n,1);
while j < n+1 ;
K = matlabFunction(subs(po(j,k))) ;
fstr= func2str(K)
if fstr(3) == ')';
x{j+1} = K*(1-0)
else x{j+1} = integral(K,0,1)
end
E(j+1,1) = subs(x{j+1},1);
j = j+1
end
end
Но возникает следующая ошибка,
Undefined operator '*' for input arguments of type 'function_handle'.
Error in solcone1 (line 9)
x{j+1} = K*(1-0);