Solve a nonlinear equation with constrains

1 回表示 (過去 30 日間)
Miraboreasu
Miraboreasu 2022 年 12 月 15 日
編集済み: Torsten 2022 年 12 月 16 日
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 件のコメント
Bora Eryilmaz
Bora Eryilmaz 2022 年 12 月 15 日
編集済み: Bora Eryilmaz 2022 年 12 月 15 日
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.

サインインしてコメントする。

採用された回答

Torsten
Torsten 2022 年 12 月 15 日
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 件のコメント
Miraboreasu
Miraboreasu 2022 年 12 月 15 日
Thanks, but if I keep c=5e6, it won't work
Torsten
Torsten 2022 年 12 月 15 日
編集済み: Torsten 2022 年 12 月 16 日
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.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSystems of Nonlinear Equations についてさらに検索

製品


リリース

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by