z=f(x,y)の関​数について、zが最小​となるラインを近似し​てxとyの2次関数と​して求めることはでき​ますか?

3 visualizaciones (últimos 30 días)
達哉
達哉 el 6 de Abr. de 2025
Respondida: 達哉 el 15 de Abr. de 2025
入力がxとyの2変数・出力がzのシミュレーションを実施し、そのデータ点が複数あります。
zは正の値しか取らず、scatter3でグラフ化するとxとyの直線に近い(少し曲がりがあります)ラインを境にzが増加する谷間のような形状になります。例えば、およそ以下のような感じのデータです。
y = repmat([0.75:0.01:1.25],51,1);
x = y';
z = 2000*(y - 0.2*(x+1.25).^2 + 0.02).^2+400*(x-1).^2+125;
scatter3(x,y,z)
任意のyに対してzが最小となるようなxを求めようとしており、x・yに対するzをfit関数の'poly22'で曲面近似すればyとxの1次関数を求められると思いますが、できれば2次関数で求めたいと思っています。
良い方法等ありましたらご教示ください。(難しければ、1次関数で我慢するか、適当な上限z値以下の範囲でyとxだけで2次近似かなと思っています。)
  1 comentario
Akira Agata
Akira Agata el 9 de Abr. de 2025
Editada: Akira Agata el 9 de Abr. de 2025
fit 関数は "poly33" にも対応していますので、単純に考えると "poly33" で曲面近似すればご所望の 2次関数が得られるかと思いますがいかがでしょうか?
ちなみに fit 関数が対応している近似式のライブラリは下記でご確認頂けます。

Iniciar sesión para comentar.

Respuesta aceptada

Hiro Yoshino
Hiro Yoshino el 11 de Abr. de 2025
シンボリックに式を扱ってはどうでしょうか?
syms x y x0
assume(x>0.75 & x<1.25);
assume(y>0.75 & y<1.25);
z = 2000*(y-0.2*(x+1.25)^2+0.02)^2+400*(x-1)^2 + 125;
fsurf(z,[0.75 1.25 0.75 1.25]);
xlabel("x"); ylabel("y"); zlabel("z");
% (x,y) = (1,1) 近傍でテイラー展開で近似
z_approx = taylor(z,[x,y],[1 1],'order',3)
z_approx = 
fsurf(z_approx)
% x で微分して頂点を探す
Dz_approxDx = diff(z_approx,x)
Dz_approxDx = 
solve(Dz_approxDx==0,x) % 答え
ans = 

Más respuestas (1)

達哉
達哉 el 15 de Abr. de 2025
ご回答いただいたお二方、ありがとうございました。私の方で重要な点を見落としておりました。
poly22で曲面近似した場合に求められる1次関数についても、任意のXに対しZが最小となるY1次関数と、任意のYに対しZが最小になるX1次関数は、基本的に異なるのでした。正確には、近似線の直角方向でZが最小になるイメージです。
(このあたりは私の大学数学に対する知見の乏しさであり、大変申し訳ございません。)
話が難しくなりそうで、もう少し考えたいと思いますが、もしご知見ありましたらご教示ください。

Categorías

Más información sobre 微積分 en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2018a

Community Treasure Hunt

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

Start Hunting!