陰関数を一度に解く方法
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
高木 範明
am 22 Dez. 2023
Kommentiert: 高木 範明
am 26 Dez. 2023
陰関数をfor/endを使わずに、配列で一度に解く為に、つぎのコードを書きました。
しかし、x_values=[3,4,5]に対して、yが[0,0,0]になっており、算出できていません。
間違っているところのご教示をよろしくお願いします。
% 陰関数の定義
f = @(xy) xy(1)^2 + xy(2)^2 - 25;
% xの値をベクトルで指定
x_values = [3, 4, 5];
% 初期推定値をベクトル化
initialGuess = zeros(length(x_values), 2);
initialGuess(:, 1) = x_values;
% fsolveを使用して方程式を解く
options = optimoptions('fsolve', 'Algorithm', 'levenberg-marquardt');
solutions = fsolve(f, initialGuess, options);
% 結果の表示
disp('各xに対する算出されたyの値:');
% disp(solutions(:, 2));
disp(solutions);
-----------------------
出力結果は次の通りです。
方程式は初期点で解かれました。
初期点における関数値のベクトルがゼロに近く
(関数の許容誤差値による測定)、
問題が正則として現れる (勾配による測定) ため、fsolve は完了しました。
<停止条件の詳細>
各xに対する算出されたyの値:
3 0
4 0
5 0
4 Kommentare
Akzeptierte Antwort
Atsushi Ueno
am 23 Dez. 2023
- 「2次元配列の1列目に初期条件を与えると2列目に解が出力される」訳ではありません。
- 初期条件([3;4;0]は既に解になっています。fsolve 関数は何もせずそのまま解として出力しています
- 初期条件のサイズは2行1列で十分です(おそらく最初は25でなくxy(3)としていたと想定します)
- 解は[3;4]以外にもたくさん存在します。狙いの値に定めるには制約条件の設定が必要です
options = optimoptions('fsolve','Algorithm','levenberg-marquardt','Display','iter');
f = @(xy) xy(1)^2 + xy(2)^2 - 25;
initialGuess = rand(3,1);
[solutions,fval] = fsolve(f, initialGuess, options)
initialGuess = [3 4]; % 初期条件が既に解なので、イタレーションが1度しか回らずに済む
[solutions,fval] = fsolve(f, initialGuess, options)
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Logical finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!