Solve a nonlinear equation with constrains

1 visualizzazione (ultimi 30 giorni)
Hello,
clear
p0=1000e6;
t0 = 1e-6;
td = 1e-6;
t = t0 + td;
c = 5e6;
a = @(r)log(r)./(t0*(r-1.0));
b = @(r)a(r).*r;
func= @(r) p0*((exp(-a*t) - exp(-b*t))/(exp(-a*t0) - exp(-b*t0)))-c;
r=1.5;
roots = fzero(func,r)
my equation is the func.
where a and b are,
  1 Commento
Bora Eryilmaz
Bora Eryilmaz il 15 Dic 2022
Modificato: Bora Eryilmaz il 15 Dic 2022
Your function "p(t)" (func in your code) is not a function of time since you are assigning a fixed scalar value to "t" in your code. So, func() is a function of r, with a fixed "t". So what you are really solving here is p(r) = 0 given fixed values for t, t0, a, b, c.
You will need to reformulate your problem.

Accedi per commentare.

Risposta accettata

Torsten
Torsten il 15 Dic 2022
p0 = 1000e6;
t0 = 1e-6;
td = 1e-6;
t = t0 + td;
c = 7.5e8;
a = @(r)log(r)./(t0*(r-1.0));
b = @(r)a(r).*r;
func= @(r) p0*((exp(-a(r)*t) - exp(-b(r)*t))./(exp(-a(r)*t0) - exp(-b(r)*t0))) - c;
r = 0.001:0.1:10;
plot(r,func(r))
root1 = fzero(func,[0.001 0.75])
root1 = 0.5000
root2 = fzero(func,[1.1 2.5])
root2 = 2.0000
  2 Commenti
Miraboreasu
Miraboreasu il 15 Dic 2022
Thanks, but if I keep c=5e6, it won't work
Torsten
Torsten il 15 Dic 2022
Modificato: Torsten il 16 Dic 2022
Yes, because no roots exist. Plot the function, and you will see that it does not cross the r-axis.
Note for functions that only depend on one variable: First plot, then solve.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Systems of Nonlinear Equations in Help Center e File Exchange

Prodotti


Release

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by