二変数関数f(x, y)が最大最小となるx, yを求める方法
31 次查看(过去 30 天)
显示 更早的评论
f = 0.5 * x - 10 * (x / (x + y))
x >= 0
y >= 0
0 <= (x / (x + y)) <= 1
このときfが最大となるx, yの値,fが最小となるx, yの値を求めることはできますでしょうか.
2 个评论
Hiroyuki Hishida
2021-11-24
できますが、この問題はあってますでしょうか?
xが0以上(の実数)yが0以上の実数とした場合、3つ目の条件式は(x, y) = (0,0)以外成立しますが、これは意図通りでしょうか?
采纳的回答
Hiroyuki Hishida
2021-11-24
Miccchiyo様の環境がわかりませんが、MATLAB 関数 最大とかでGoogleすると以下のページがでてきますが、いかがでしょうか?
関数を見るとx,yが大きくなればなるほどfは単調増加するように見えるのですが、問題はこれで良いのでしょうか?
4 个评论
Hiroyuki Hishida
2021-11-26
補足しますと、制約条件のついた最適化問題ですので、もしSymbolicで解かれたいのであれば、問題に応じた式変形が必要です。Optimization Toolboxを使用するとそのあたりをうまい具合に処理してくれます。以下のやり方では制約条件の3番が、若干上記とは異なりますが、参考になれば幸いです。
%https://jp.mathworks.com/help/optim/ug/solve-constrained-nonlinear-optimization-problem-based.html
%変数宣言
x = optimvar('x');
y = optimvar('y');
%最適化変数の式として目的関数を作成します。
obj = objfunx(x,y);
%obj を目的関数として使用して最適化問題を作成します。
prob = optimproblem('Objective',obj);
%制約条件
con1 = x>= 0;
con2 = y>= 0;
con3 = x*y>=0;
prob.Constraints.constr1 = con1;
prob.Constraints.constr2 = con2;
prob.Constraints.constr3 = con3;
%初期点
x0.x = 1;
x0.y = 1;
%%問題の確認
% show(prob);
%解く
[sol,fval] = solve(prob,x0)
%% 目的関数
function f = objfunx(x,y)
f = 0.5 * x - 10 * (x ./ (x + y))
end
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Symbolic Math Toolbox 入門 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!