my code is showing not enough input argument error how to resolve

1 view (last 30 days)
clear all; close all; clc;
dx=0.01;
L=20;
x=-L/2:dx:L/2-dx;
f=0*x;
f=sech(x);
plot(x,f)
dt=0.025; % integral in time in increments of 0.025
for k =1:100
t=k*dt;
[t,y]=ode45(@(t,y)rhsNEW(t,y,L),[0 dt],f);
% we are assuming ode 45 is taking a lot of little steps and we want to
% to take the last step
f(:)=y(end,:);
plot(x,real(f))
axis([-10 10 -1.5 1.5])
pause(0.1)
end
function is -
function dout=rhsNEW(t,u,L)
pi=3.14;
Nx =length(u);
uhat=fft(u);
kap=(2*pi/L)*[-Nx/2:Nx/2-1];
kap=fftshift(kap');
duhat=1i*kap.*uhat;
du=ifft(duhat);
duout=-du;

Accepted Answer

Walter Roberson
Walter Roberson on 28 Sep 2018
I tested your code and do not get that error. What I get is
Output argument "dout" (and maybe others) not assigned during call to "rhsNEW".
which is correct, as you assign to a variable named duout but not to dout.
When I change that variable name the code seems to work.
  2 Comments
asim asrar
asim asrar on 28 Sep 2018
Dear Walter Roberson, Thanks for the response, i have changed the variable duout to dout , but it is still showing the error of not enough input argument , what changes should i need to make in my code
clear all; close all; clc; dx=0.01; L=20; x=-L/2:dx:L/2-dx; f=0*x; f=sech(x); plot(x,f)
dt=0.025; % integral in time in increments of 0.025 for k =1:100 t=k*dt; [t,y]=ode45(@(t,y)rhsNEW(t,y,L),[0 dt],f); % we are assuming ode 45 is taking a lot of little steps and we want to % to take the last step f(:)=y(end,:); plot(x,real(f)) axis([-10 10 -1.5 1.5]) pause(0.1) end
function dout=rhsNEW(t,u,L) pi=3.14; Nx =length(u); uhat=fft(u); kap=(2*pi/L)*[-Nx/2:Nx/2-1]; kap=fftshift(kap); duhat=1i*kap.*uhat; du=ifft(duhat); dout=-du;

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!