Error: Operator '*' is not supported for operands of type 'function_handle'.
3 次查看(过去 30 天)
显示 更早的评论
Hello, I have the following code
clc; clear all; format long;
N=1024; L=100; x=(L/N)*(-N/2:N/2-1); dx=x(2)-x(1);
k=(2*pi/L)*[0:N/2-1 -N/2:-1];
w=10; uin=exp(-(x/w).^2); % initial condition
%figure(1); plot(x,abs(uin),'r');
a=0.1; d=10;
po=@(x) abs(x-0.05)<=0.05 | abs(x-10.15)<=0.05;
tiledlayout(1,2);
nexttile; fplot(po,[-0.1,0.2]); axis padded
nexttile; fplot(po,[9.9,10.3]); axis padded
S=1000; zmax=20; h=zmax/S; z=0; count=0; dim=0; savestep=10; u0=uin;
for m=1:S
u1=ifft(fft(u0).*exp(-1i*0.5*h*k.^2)); % First step of SSF
u2=exp(1i*h*po).*u1; % Second step of SSF
u3=ifft(fft(u2).*exp(-1i*0.5*h*k.^2)); % Second step of SSF
u0=u3; z=z+h; count=count+1;
if (count==savestep)
dim=dim+1; field(dim,:)=u0; pot(dim,:)=po; z1(dim)=z; count=0;
end;
end;
[X,Z]=meshgrid(x,z1);
figure(2); surf(X,Z,abs(field)); shading interp; view([0 90]); axis square; axis tight;
figure(3); surf(X,Z,pot); shading interp; view([0 90]); axis square; axis tight;
figure(4); plot(x,abs(field)); shading interp;
This gives me the error:
Operator '*' is not supported for operands of type 'function_handle'.
Error in Code_16_SSF_BPM_thin_film (line 15)
u2=exp(1i*h*po).*u1; % Second step of SSF
I know that the line 'po=@(x) abs(x-0.05)<=0.05 | abs(x-10.15)<=0.05;' is the problem, but I don't know what to do since I am now starting getting used to Matlab. Any help would be greatly appreciated.
1 个评论
Atsushi Ueno
2022-6-5
编辑:Atsushi Ueno
2022-6-5
Argument x must be given to function po. ”po” without parentheses is a function handle.
u2=exp(1i*h*po).*u1;
回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Discrete Data Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!