Im пытается решить проблему. Мне нужно 60 разных значений, и для каждого значения -let-5 A
будут значения Z
от одного до A
. И я хочу попробовать все возможные результаты функции g
, и я действительно могу сделать это со следующим кодом. Но мне действительно нужны соответствующие значения A
и Z
. Итак, для x = 1 имеем A = 1,2,3,4,5 и Z = 1, 1,2, 1,2,3, 1,2,3,4, 1,2, 3,4,5 , и это составляет 45 результатов. Что мне нужно минимум г на что-то подобное, г в мин приПоиск аргумента, который дает минимум
>>>"The x , A , and Z values that makes g min are:"
>>>[0.0001 , 3.0, 2.0, 0.015006343],
[0.01263, 9.0, 7.0, 0.01609543],
..... and so on, 60 rows in total.
from __future__ import division
import numpy as np
import math
#*************constants************
b1 = 0.9917949
b2 = 0.01911
b3 = 0.000840
b4 = 0.10175
b5 = 0.000763
mu = 1.66057*10**(-24) #gram
c = 3.0*10**10 #cm/sec
me=9.1093897e-28 #gram
e=4.80320425e-10 #statcoulumbs
h = 6.62607004e-27
hbar=h/(2.0*math.pi)
lambd=hbar/(me*c)
Xvec=np.logspace(-3,3,60)
Zvec=np.zeros(0,'float')
minpos=np.zeros(0,'int')
gvec=np.zeros(0,'float')
minofgvec=np.zeros(0,'float')
minposvec=np.zeros(0,'float')
def gibbs(Zs,A,x):
efe=me*c**2*(x**2+1)**0.5
El=(4./3)*Zs*(-1.444)*Zs**(2./3)*e**2*x*(3*math.pi**2)**(-1./3)*lambd**(-1./3)
SEMF = mu*c**2 * (b1*A + b2*A**(2./3) - b3*Zs + b4*A*((1./2) - (Zs/A))**2 + (b5*Zs**2)/(A**(1./3)))
g=(SEMF+Zs*efe+(4./3)*Zs*El)/A
return g
for x in (1,2,3): #was -in Xvec, for simplicity I tried 1,2,3
for A in range(1,6):
for Zs in np.arange(1, A+1 , 1 , dtype=float)
g=gibbs(Zs,A,x)
gvec=np.append(gvec,g)
#minposvec=np.append(minposvec,gvec.argmin())
#minofgvec=np.append(minofgvec,min(gvec))
#minpos=np.append(minpos,minposvec.argmin())
#Zvec=np.append(Zvec,(1+minposvec))
Я могу найти все значения, я могу написать Xvec (очевидно) и минимум г до этого х, но я могу» t найти истинные значения Z и A при этом минимуме. Я попробовал команду argmin()
, но это дает мне результат во всех 45 диапазонах. Поэтому я не могу извлечь значение Z. Я ценю всю помощь
Я не совсем уверен, что вы пытаетесь сделать. Есть несколько причин, по которым я смущен. Сначала у вас есть некоторые проблемы с грамматикой, предложения, начинающиеся с, но и. Во-вторых, вы пренебрегли использованием синтаксиса JSON в списке списков и вместо этого использовали вместо него пробелы Z = [[1], [1,2], [1,2,3], [1,2,3,4], [1,2,3,4,5]]. В-третьих, в коде вы используете переменную Zs для обозначения как списка, так и его элементов, что по своей сути запутывает. Пожалуйста, помните, что люди, пытающиеся ответить на эти вопросы, знакомы с вашей проблемой, прежде чем читать вопрос и постарайтесь как можно яснее с вашим кодом и деталями. – kpie
Кроме того, вы не хотите проверять все выходы функций, вы хотите попробовать все входы функций и в своем коде (не так уж и важно для вашего вопроса) дополнительные круглые скобки облегчили бы чтение для меня лично. и у вас может быть проблема с отступлением в отправленном коде ... строка 'minposvec = np.append (minposvec, gvec.argmin())', похоже, слишком впереди с ней. – kpie
Хорошо, спасибо за ваши комментарии. Я не носитель языка, может быть, это может быть оправданием для моего грамматиста. строка, о которой вы говорите, - это то место, где у меня есть проблема. Я пытаюсь найти положение g, поэтому я могу рассчитать аргумент Z, который делает его минимальным. Но поскольку изменение размера Zs с A, индекс минимума g на самом деле не помогает найти значение Z. –