Effacer les filtres
Effacer les filtres

How to handle Error updating FunctionLine?

15 vues (au cours des 30 derniers jours)
Niloufar le 28 Déc 2022
Commenté : Steven Lord le 28 Déc 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

Réponses (1)

Walter Roberson
Walter Roberson le 28 Déc 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 commentaire
Steven Lord
Steven Lord le 28 Déc 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

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by