亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在scipy中優化給定范圍內的函數

在scipy中優化給定范圍內的函數

白豬掌柜的 2022-10-25 15:52:16
我一直在嘗試獲得單個變量函數的最小值。功能是:sym.sqrt((x+6)**2 + 25) + sym.sqrt((x-6)**2 - 121)函數的導數(即 (x - 6)/sym.sqrt((x - 6)**2 - 121) + (x + 6)/sym.sqrt((x + 6)**2 + 25))由于第一項,x 等于 -5 ad 變得復雜,因為 x 大于(例如,-4)但小于 18(為了簡單起見,我們可以在這里忽略)。因此,我編寫的代碼只評估 x 在 -6 和 -10 之間的函數(通過檢查,我可以看到最小值在 -8.6 左右,所以我選擇了 -10):def h(x):    for x in np.arange(-10,-5):        sym.sqrt((x+6)**2 + 25) + sym.sqrt((x-6)**2 - 121)    result = optimize.minimize_scalar(h,bounds=(-10,-5))    x_min = result.x    print(x_min)不幸的是,我收到了這個錯誤:TypeError: 輸入類型不支持 ufunc 'isnan',并且根據轉換規則 ''safe'' 無法安全地將輸入強制轉換為任何支持的類型有人可以幫我解決這個問題嗎?
查看完整描述

1 回答

?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

我不認為 numpy 和 sympy 一起玩得很好,除非你lambdify的 sympy 方程。而且我也不確定NaN值,這似乎在您的等式中。


你可以用數字試試。在繪制函數時,我發現該范圍內沒有最小值,但導數中有最大值:


import numpy as np

from matplotlib import pyplot as plt

from scipy.signal import argrelmax


x = np.linspace(-10, -6, 256) # generate x range of interest

y = np.sqrt((x+6)**2 + 25) + np.sqrt((x-6)**2 - 121)


dydx = (x - 6)/np.sqrt((x - 6)**2 - 121) + (x + 6)/np.sqrt((x + 6)**2 + 25)


maximum, = argrelmax(dydx) # returns index of maximum


x[maximum]

>>> -8.50980392


# plot it

plt.plot(x, y)

ax = plt.gca().twinx() # make twin axes so can see both y and dydx

ax.plot(x, dydx, 'tab:orange')

ax.plot(x[maximum], dydx[maximum], 'r.')

http://img1.sycdn.imooc.com//635795d3000161e803990244.jpg

查看完整回答
反對 回復 2022-10-25
  • 1 回答
  • 0 關注
  • 99 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號