How to handle Error updating FunctionLine?

31 visualizaciones (últimos 30 días)
Niloufar
Niloufar el 28 de Dic. de 2022
Comentada: Steven Lord el 28 de Dic. de 2022
I want to make the gif of a wave equation that the answer is:
and the initial conditions are:
Here is my code and I don't understand and I don't know how to fix it.
clear;clc;close all;
a = 1;
t0 = 1;
alpha = 1;
syms x;
%define lambda function
f = @(x) ((-a/t0).*x-a)*(x>-2*t0-0.1 & x<-t0) + ((a/t0).*x+a)*(x>-t0 & x<=0) + ((-a/t0).*x+a)*(x>0 & x<t0) + ((a/t0).*x-a)*(x>t0 & x<2*t0+0.1);
g = @(t) alpha*((-a/t0).*t-a)*(t>-2*t0-0.1 & t<-t0) + ((a/t0).*t+a)*(t>-t0 & t<=0) + ((-a/t0).*t+a)*(t>0 & t<t0) + ((a/t0).*t-a)*(t>t0 & t<2*t0+0.1);
for c = 0:0.05:1
desired_fun = @(x) (1/(2*c)).*integral(g,x-c,x+c);
my_plot = fplot((@(x) ((f(x-c) + f(x+c))/2) + desired_fun),[-t0 t0]);
frame = getframe(1);
im = frame2im(frame); %pause(0.01);
[imind,cm] = rgb2ind(im,256);
imwrite(imind,cm,"C:\Users\ernika\wave_equation.gif",'gif','WriteMode','append'); %saved as mygif1
drawnow;
if(c~=1)
delete(my_plot)
end
end

Respuestas (1)

Walter Roberson
Walter Roberson el 28 de Dic. de 2022
You define an anonymous function of one variable. In the next line you define a second anonymous function and ask to fplot it. When invoked, the second anonymous function does a calculation and tries to add the first anonymous function to the result.
This fails because it is not permitted to do arithmetic on anonymous function handles.
Remember that the only operations permitted on anonymous functions are:
  • displaying the anonymous function
  • calling functions() to get some internal information about the anonymous function
  • asking for the formula associated with the function (as text)
  • asking for a text representation of the anonymous function
  • storing the handle into a variable except one indexed using ()
  • obscure exception: storing the handle to a non-existent variable indexed with (1)
  • passing the handle as a parameter
  • or invoking the anonymous function, which always requires () after the handle unless you use feval()
In no situation can you do something like
f = @(x)x*2
f + 5
as that is not one of the listed operations.
In your second anonymous function you are not invoking the first function: invoking would require passing a parameter to the first function.
  1 comentario
Steven Lord
Steven Lord el 28 de Dic. de 2022
In no situation can you do something like
f = @(x)x*2
f + 5
What you can do instead is to add the values obtained by evaluating the anonymous function and another number.
f = @(x) 2*x;
g = @(x) f(x) + 5; % Evaluate f at the input argument and add 5 to the result
g(4) % 2*4 + 5 = 13
ans = 13

Iniciar sesión para comentar.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by