How to extract output from function

72 visualizaciones (últimos 30 días)
Ali Najem
Ali Najem el 16 de Nov. de 2020
Comentada: Ali Najem el 18 de Nov. de 2020
Hello, All
i have this functions file
function [dydt,dE]=my(x,y)
f=(x^2-y^2)*sin(x);
dE=x^2;
dydt=10+f;
end
and this my run file
a=1; b=2; ya=1; m=40;
f=(@(t,y)my(t,y));
[t,y]=pure(f,a,b,ya,m);
I need to obtain dE from the function how can i proceed this
thanks indeed..
this is pure function file
function [ts,ys] = pure(f,a,b,y0,N)
t0 = a; T = b;
h = (T-t0)/N;
ts = zeros(N+1,1);
ys = zeros(1,length(y0));
t = t0;
yold = y0;
ts(1) = t;
ys(1,:) = yold';
for i=1:N
s1 = f(t,yold);
ynew = yold + s1*h;
yold=ynew;
t = t + h;
ts(i+1) = t; ys(1,:) = yold';
end
end

Respuesta aceptada

Stephen23
Stephen23 el 16 de Nov. de 2020
To get De you could use arrayfun:
a=1;
b=2;
ya=1;
m=40;
[t,y]=pure(@my,a,b,ya,m)
t = 41×1
1.0000 1.0250 1.0500 1.0750 1.1000 1.1250 1.1500 1.1750 1.2000 1.2250
y = 3.7363
[~,dE] = arrayfun(@(tv)my(tv,y),t)
dE = 41×1
1.0000 1.0506 1.1025 1.1556 1.2100 1.2656 1.3225 1.3806 1.4400 1.5006
function [dydt,dE]=my(x,y)
f=(x^2-y^2)*sin(x);
dE=x^2;
dydt=10+f;
end
function [ts,ys] = pure(f,a,b,y0,N)
t0 = a; T = b;
h = (T-t0)/N;
ts = zeros(N+1,1);
ys = zeros(1,length(y0));
t = t0;
yold = y0;
ts(1) = t;
ys(1,:) = yold';
for i=1:N
s1 = f(t,yold);
ynew = yold + s1*h;
yold=ynew;
t = t + h;
ts(i+1) = t; ys(1,:) = yold';
end
end
  7 comentarios
Stephen23
Stephen23 el 17 de Nov. de 2020
This is how you defined the function my, with thirteen input arguments:
function [dy1dt,dE1,dE2,dE3,dE4] =my(input,batches,m,w1,b1,w3,b3,y0,u,errortot4,errortot2,grad4,grad2)
This is how you call the function my, with two input arguments:
my(tv,y)
If the function requires thirteen input arguments, then you need to call it with thirteen input arguments. You need to provide all of its required inputs, not just the first two.
Ali Najem
Ali Najem el 18 de Nov. de 2020
still got error am trying diffrent example same thing happening with me but with diffrent error
G=9.8; L=2;
tspan=[0 2*pi];
z0=[pi/3 0];
f=(@(t,y)my(t,y,G,L));
[t,y]=ode15s(f,tspan,z0);
[~,dE] = arrayfun(@(tv)mine(tv,y,G,L),t)
and this is the file of my function
function [dydt,dE]=my(t,y,G,L)
dydt = [y(2) ; -G/L*sin(y(1))];
dE=G*10;
end
when i run i got this error:-
Error using arrayfun
Non-scalar in Uniform output, at index 1, output 1.
Set 'UniformOutput' to false.
Error in run (line 18)
[r,dE] = arrayfun(@(tv)mine(tv,y,G,L),t)

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Function Creation en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by