Rick T
Rick T

Reputation: 3389

How to convert this equation to Octave code and plot

I have an equation that I created on Desmos website

equation

I used the code below to try and recreate it in Octave. But when I plot it, it comes out different. How can I fix the code in Octave (without changing the main equation, if possible) so it looks like the Desmos image?

x = linspace(0,1,20);
y = linspace(0,1,20);
S=[13.2];

T=1.12;
for zz=1:1:length(S)
  eq1=exp(S(1,zz)*T*log(x))+exp(S(1,zz)*T*log(y));
  hold on
  plot(x,eq1)
  zz
end

Incorrect image / equation

PS: I'm using Octave 4.2.2

Upvotes: 0

Views: 419

Answers (2)

tryman
tryman

Reputation: 3293

Desmos.com does not plot (x,eq1) but (x,y) with the constraint that x, y satisfy the given equation. So, you solve for y for each value of x, and plot the pairs (x,y).
Since log(x), log(y) exist, x and y are >0 (otherwise you would have to plot for x<0 as well).

clear; clc;
x = linspace(0,1,150);

S = 13.2;
T = 1.12;

y = zeros(size(x));
for i = 1:length(x)
  y(i) = (1-exp(S*T*log(x(i))))^(1/S/T);
end
plot(x,y)  

Notes:
1) I assume by log(x) you mean ln(x) (logarithm using base e).
2) I used a more dense discretization with 150 points so that the plotted curve appears smoother.
3) Mathematically, linspace(0,1,150) should not work, as log(x=0) is not defined. However for Matlab log(0) = -inf which means that exp(-inf) = 0. That's why no runtime error is thrown.
4) By the way, the provided equation can be simplified to x^(ST) + y^(ST) = 1, with the constraints that x, y > 0.

Upvotes: 1

Adam
Adam

Reputation: 2777

enter image description here

 S = 13.2;
 T = 1.12;
 f = @(x)exp(log(1-exp(S*T*log(x)))./(S*T));
 fplot(f, [0, 1])

Upvotes: 1

Related Questions