質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

510閲覧

scipy.optimize.fminを使って数学的な問題を解きたいです。

Jason_318

総合スコア0

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/08/30 20:15

前提

こんにちは。数学的な問題ですが、Pythonでscipy.optimize.fmin を使用して行列の問題を解きたいです。

実現したいこと

A=行列[112][121][211][221]
b=行列[1][-1][1][-1]
の時、scipy.optimize.fmin を使用して||Ax-b||の最小化問題を解く。

scipy.optimize.fminの使い方がよくわかりません。

発生している問題・エラーメッセージ

scipy.optimize.fminを使わずに解いた答えと違うのですが、どうしてなのかがわかりません。

該当のソースコード

python

1A = np.array([[1, 1, 2], [1, 2, 1], [2, 1, 1], [2, 2, 1]]) 2b = np.array([[1], [-1], [1], [-1]]) 3x = np.dot(np.linalg.pinv(np.dot(A.T, A)), np.dot(A.T, b)) 4x_1 = x 5print(x_1) 6def f(x): 7 y = (np.dot(A, x) - b) 8 return np.linalg.norm(y) 9 10init_guess = np.array([[0.5], [0.5], [0.5]]) 11#init_guess = np.matrix([[0.5], [0.5], [0.5]]) 12minimum = optimize.fmin(f, init_guess) 13 14print(f(minimum)) 15 16print(f(init_guess)) 17 18print(f(x_1))

試したこと

scipy.optimize.fminを使わずに解いた時の答えを確認しましたがそちらは合っていると思います。個人的にscipy.optimize.fminの使い方がいまいちわかりません。これが一番の問題だと思います。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2022/08/31 01:49 編集

> scipy.optimize.fminを使わずに解いた答えと違うのですが、どうしてなのかがわかりません。 質問のコードの最後に下記を追加して実行して、表示される結果を見て考えてみてください print(x_1.shape) print(np.dot(A, x_1) - b) print(minimum.shape) print(np.dot(A, minimum) - b)
jbpb0

2022/08/31 01:48

もし上記で分からなければ、「def f(x):」内の先頭に print(x.shape) を(インデントを合わせて)追加して実行して、表示される結果を見たら、どうすればいいのか分かると思います
guest

回答1

0

python

1def f(x): 2 y = (np.dot(A, x) - b) 3 return np.linalg.norm(y)

↓ 修正

python

1def f(x): 2 x = x.reshape(-1, 1) 3 y = (np.dot(A, x) - b) 4 return np.linalg.norm(y)

投稿2022/09/06 03:06

jbpb0

総合スコア7651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問