MATLAB Answers

0

How a solution depends on a variable

Asked by Amanda Hoxell on 17 Sep 2019 at 14:13
Latest activity Commented on by Star Strider
on 17 Sep 2019 at 20:45
I have a function UE=Explicit(S,sigma,r,T,M,K,gamma,N); and I want to plot how the solution depends on gamma where 0.5<=gamma<=1. All of the other parameters are constants. How can I do this?

  0 Comments

Sign in to comment.

2 Answers

Answer by Star Strider
on 17 Sep 2019 at 14:25
Edited by Star Strider
on 17 Sep 2019 at 14:40
 Accepted Answer

One approach:
gammav = linspace(0.5, 1, 10);
for k = 1:numel(gammav)
UE{k} = Explicit(S,sigma,r,T,M,K,gammav(k),N);
end
I have no idea what ‘Explicit’ is or what it produces, so it could be possible to vectorise this (instead of using the loop) depending on how you wrote the function. I am also saving each iteration to a cell array for that reason.
EDIT —
Plotting it depends on what ‘UE’ is. If ‘Explicit’ produces a scalar, this works:
figure
plot(gammav, [UE{:}])
grid
If it produces vectors or matrices, it will be necessary to use other approaches.

  8 Comments

Star Strider
on 17 Sep 2019 at 17:32
This works, however, ‘UE’ is uniformly 0 for all values of ‘gammav’.
gammav = linspace(0.5, 1, 10);
for k = 1:numel(gammav)
[UE(:,k),A]=Explicit(S,sigma,r,T,M,K,gammav(k),N);
end
figure
plot(gammav, UE, '.r')
This code runs without errors.
Thank you!!
Star Strider
on 17 Sep 2019 at 20:45
My pleasure!
If my Answer helped you solve your problem, please Accept it!

Sign in to comment.


Answer by John D'Errico
on 17 Sep 2019 at 14:31

Using gamma as the name of a variable is a bad idea. Regardless,...
Where is the problem? Just substitute a range of values for gamma. Save the solution for each gamma. Then plot, with gamma on the x axis, and your solution on the y axis. WTP?
You can even use tools like fimplicit, which will do the hard work for you. For example,
f = @(gam,y) gam.^2 - y.^2 - 2*gam.*y.^3 + gam.*y + 1;
fimplicit(f)
xlabel 'gam'
ylabel 'y'
grid on
untitled.jpg

  1 Comment

The problem is that I am new to Matlab. I tried the following but it did not work..
gamma_all = 0.5:0.1:1;
y = zeros(1,length(gamma_all));
for i = 1:length(gamma_all)
gamma = gamma_all(i);
y(i) = Explicit(S,sigma,r,T,M,K,gamma,N);
end
plot(gamma_all,y)

Sign in to comment.