二変数関数f(x, y)が最大最小となるx, yを求める方法
25 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Miccchiyo
le 23 Nov 2021
Commenté : Miccchiyo
le 28 Nov 2021
f = 0.5 * x - 10 * (x / (x + y))
x >= 0
y >= 0
0 <= (x / (x + y)) <= 1
このときfが最大となるx, yの値,fが最小となるx, yの値を求めることはできますでしょうか.
2 commentaires
Hiroyuki Hishida
le 24 Nov 2021
できますが、この問題はあってますでしょうか?
xが0以上(の実数)yが0以上の実数とした場合、3つ目の条件式は(x, y) = (0,0)以外成立しますが、これは意図通りでしょうか?
Réponse acceptée
Hiroyuki Hishida
le 24 Nov 2021
Miccchiyo様の環境がわかりませんが、MATLAB 関数 最大とかでGoogleすると以下のページがでてきますが、いかがでしょうか?
関数を見るとx,yが大きくなればなるほどfは単調増加するように見えるのですが、問題はこれで良いのでしょうか?
4 commentaires
Hiroyuki Hishida
le 26 Nov 2021
補足しますと、制約条件のついた最適化問題ですので、もし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
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Symbolic Math Toolbox 入門 dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!