function input to solve ODE
조회 수: 2 (최근 30일)
이전 댓글 표시
I am trying to write code to accept 3 arbitrary functions of time (i.e. cos, sin, t^2, etc.) and pass them to a loop that solves for an approximate solution using Euler's Method (the for loop). The error I receive is "Nonscalar arrays of function handles are not allowed; use cell arrays instead." This is the line of code with the function handle F. The code is shown here:
% solve u'(t) = F(t,u(t)) where u = [u1(t), u2(t), u3(t)]'
% using forward euler method
% Initial conditions and setup
neqn = 3; % set a number of equations
h=input('Enter the step size: '); % step size will effect solution size
t=(0:h:4).';%(starting time value 0):h step size
nt = size(t,1); % size of time array
u = zeros(nt,neqn); % initialize the u vector with zeros
v=input('Enter the intial vector values of 3 components using brackets [u1(0),u2(0),u3(0)]: ');
u(1,:)= v; % the initial u value amd the first column
v1=input('Enter the first vector fuction of time u1(t): ','s');
v2=input('Enter the first vector fuction of time u2(t): ', 's');
v3=input('Enter the first vector fuction of time u3(t): ', 's');
u1 = str2func(v1);
u2 = str2func(v2);
u3 = str2func(v3);
F = @(t,u) [u1,u2,u3]; % define the function 'handle', F
% The loop to solve using Euler's Method
for i = 1:nt-1
u(i+1,:) = u(i,:) + h*F(t(i),u(i,:)); % Euler's formula for a vector function F
end
댓글 수: 0
답변 (2개)
Walter Roberson
2022년 4월 5일
F = @(t,u) [u1(t,u), u2(t,u), u3(t,u)]; % define the function 'handle', F
Torsten
2022년 4월 5일
% solve u'(t) = F(t,u(t)) where u = [u1(t), u2(t), u3(t)]'
% using forward euler method
% Initial conditions and setup
neqn = 3; % set a number of equations
h=input('Enter the step size: '); % step size will effect solution size
t=(0:h:4).';%(starting time value 0):h step size
nt = size(t,1); % size of time array
u = zeros(nt,neqn); % initialize the u vector with zeros
v=input('Enter the intial vector values of 3 components using brackets [u1(0),u2(0),u3(0)]: ');
u(1,:)= v; % the initial u value amd the first column
v1=input('Enter the first vector fuction of time u1(t): ','s');
v2=input('Enter the first vector fuction of time u2(t): ','s');
v3=input('Enter the first vector fuction of time u3(t): ','s');
F = str2func(['@(t,u) [',v1,',',v2,',',v3,']'])
% The loop to solve using Euler's Method
for i = 1:nt-1
u(i+1,:) = u(i,:) + h*F(t(i),u(i,:)); % Euler's formula for a vector function F
end
plot(t,u)
end
댓글 수: 9
참고 항목
카테고리
Help Center 및 File Exchange에서 Numerical Integration and Differential Equations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!