int score = 0;
RadioGroup rgQ1;
RadioGroup rgQ2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rgQ1 = findViewById(R.id.rg1);
rgQ2 = findViewById(R.id.rg2);
}
public void onRadioButtonClicked(View view) {
// Is the button now checked? then assign into a boolean named 'checked'
boolean checked = ((RadioButton) view).isChecked();
// Question 1 logic
// Check correct answer is checked and update score
switch (view.getId()) {
case R.id.frites:
if (checked) score += 1;
Log.v("MainActivity", "score" + score);
break;
}
// Disable RadioButtons of rg1
for (int i = 0; i < rgQ1.getChildCount(); i++) {
(rgQ1.getChildAt(i)).setEnabled(false);
}
// Question 2 logic
// Check correct answer is checked and update score
switch (view.getId()) {
case R.id.mille_feuille:
if (checked) score += 1;
Log.v("MainActivity", "score" + score);
break;
}
// Disable RadioButtons of rg2
for (int i = 0; i < rgQ2.getChildCount(); i++) {
(rgQ2.getChildAt(i)).setEnabled(false);
}
}
这是具有4个等式和4个未知数的代码。我正在尝试使用sympy.solve来解决这个方程式。但它不能解决错误;
from math import exp, log
from sympy import Symbol, symbols, solve, Eq
Z = 70;p_abs = 101.325*((1-2.25577*(10**-5)*Z)**5.2559);t_std = 15-0.0065*Z;RH = 0.5;t_db = 20
K_db = t_db + 273.15
C8 = -5.8002206e+03C9 = 1.3914993e+00;C10 = -4.8640239e-02;C11 = 4.1764768e-05;C12 = -1.4452093e-08;C13 = 6.5459673e+00
p_ws_db = exp(C8/K_db+C9+C10*K_db+C11*K_db**2+C12*K_db**3+C13*log(K_db))/1000
p_w_db = p_ws_db*RH # partial pressure of water vapor_db
W_s_db = 0.621945*p_ws_db/(p_abs-p_ws_db)
W_db = 0.621945*p_w_db/(p_abs-p_w_db)
p_w_wb = (W_db*p_abs)/(0.621945+W_db)
t_wb, K_wb, W_s_wb, p_ws_wb = symbols('t_wb K_wb W_s_wb p_ws_wb')
e1 = Eq(K_wb, t_wb + 273.15)
e2 = Eq(p_ws_wb, exp(C8/K_wb+C9+C10*K_wb+C11*K_wb**2+C12*K_wb**3+C13*log(K_wb))/1000)
e3 = Eq(W_s_wb, (W_db*((2501+1.86*t_db)-4.186*t_wb)+1.006*(t_db-t_wb))/(2501-2.326*t_wb))
e4 = Eq(p_ws_wb, (W_s_wb*p_abs)/(W_s_wb+0.621945))
print(fsolve([e1,e2,e3,e4], t_wb, p_ws_wb, K_wb, W_s_wb))
我猜exp或log会产生问题。
答案 0 :(得分:1)
print(fsolve([e1,e2,e3,e4], t_wb, p_ws_wb, K_wb, W_s_wb))
SymPy中没有fsolve
。 SciPy中有fsolve
个数字求解器。 SciPy无法使用SymPy对象,特别是它将它们转换为浮点数。您从exp
导入的log
和math
都不能。
理解数值计算和符号计算之间的区别。如果您想要计算exp(a)
而a
是一个符号,则需要来自SymPy的符号exp
,而不是来自数学或NumPy或其他地方的数字exp
。
更正导入声明:
from sympy import symbols, Eq, exp, log
from scipy.optimize import fsolve
正确执行数值解决方案:
eqns = lambdify([t_wb, p_ws_wb, K_wb, W_s_wb], [e.lhs - e.rhs for e in [e1, e2, e3, e4]])
print(fsolve(lambda x: eqns(*x), [10, 10, 10, 10]))
在这里,lambdify
创建了一个SciPy可以使用的函数,来自您拥有的SymPy对象。它是在数字模块中使用SymPy对象的主要工具。创建的函数接受四个参数,首先列出,并返回四个输出,这是每个等式的左右两边之间的差异。
初始向量[10, 10, 10, 10]
只是对解决方案的猜测,fsolve
需要它作为起点。它找到的解决方案是
[1.51295417e+03 7.10681717e+01 1.78610417e+03 1.50246122e+00]