0

У меня возникли проблемы с получением значений с использованием функций NSolve или Solve в Mathematica для двух нелинейных уравнений с двумя неизвестными. Я уверен, что должен быть способ, чтобы это сделать, но я не уверен, что это такое. Здесь я столкнулся с проблемой:Два уравнения два неизвестных, нелинейные Mathematica

bco2=29.6833 
bdec=209.891 
aco2=2.75447*10^6 
bco2=7.94935*10^7 
P=41.4 
T=411 
R=83.1446 

Solve[{P = (R*T)/(vliq - (xco2*bco2 + (1 - xco2)*bdec)) 
- (xco2^2*aco2 + 2*xco2*(1 - xco2)*0.87*Sqrt[aco2*adec] 
+ (1 - xco2)^2*adec)/(vliq*(vliq + (xco2*bco2 + (1 - xco2)*bdec))), 
xco2 = yco2*phivap/(Exp[Log[vliq/(vliq - (xco2*bco2 + (1 - xco2)*bdec))] 
+ bco2/(vliq - (xco2*bco2 + (1 - xco2)*bdec)) 
- (2*(xco2*(aco2 + (1 - 0.13) Sqrt[aco2 + adec])))/(R*T*(xco2*bco2 + (1 - xco2)*bdec))* 
Log[(vliq + (xco2*bco2 + (1 - xco2)*bdec))/vliq] + ((xco2^2*aco2 + 
2*xco2*(1 - xco2)*0.87*Sqrt[aco2*adec] + (1 - xco2)^2*adec)*bco2)/(R* 
T*(xco2*bco2 + (1 - xco2)*bdec)^2)*(Log[(vliq + (xco2*bco2 + (1 - xco2)*bdec))/vliq] 
- (xco2*bco2 + (1 - xco2)*bdec)/(vliq + (xco2*bco2 + (1 - xco2)*bdec))) 
- Log[(P*vliq)/(R*T)]])}, {xco2, vliq}] 

Я также попытался использовать функцию NSolve без успеха. Я немного ржав в математике, поэтому, если у кого-то есть понимание, я был бы очень обязан; Заранее спасибо за вашу помощь!

+0

должно быть двойным знаком равенства .. '==' – agentp

ответ

1

Вы не можете использовать NSolve (или любые другие Nfunctions, потому что у вас есть переменные adec, phivap и yco2, которые не были присвоены значениям), если вы не решаете для всех переменных, которые не были присвоены значениям. Если вы знаете значения этих трех и просто не включали их, вы могли бы успешно использовать NSolve.

Если нет, то этот метод часто работает для сложных функций.

In[1]:= bco2 = 29.6833; 
bdec = 209.891; 
aco2 = 2.75447*10^6; 
bco2 = 7.94935*10^7; 
P = 41.4; 
T = 411; 
R = 83.1446; 
NMinimize[{Norm[P - (R*T)/(vliq - (xco2*bco2 + (1 - xco2)*bdec)) - (xco2^2*aco2 + 
    2*xco2*(1 - xco2)*0.87*Sqrt[aco2*adec] + (1 - xco2)^2*adec)/(vliq*(vliq + 
    (xco2*bco2 + (1 - xco2)*bdec)))] + Norm[xco2 - yco2*phivap/(Exp[Log[vliq/(vliq- 
    (xco2*bco2 + (1 - xco2)*bdec))] + bco2/(vliq - (xco2*bco2 + (1 - xco2)*bdec)) - 
    (2*(xco2*(aco2 + (1 - 0.13) Sqrt[aco2 + adec])))/(R*T*(xco2*bco2 + (1 - xco2)* 
    bdec))*Log[(vliq + (xco2*bco2 + (1 - xco2)*bdec))/vliq] + ((xco2^2*aco2 + 
    2*xco2*(1 - xco2)*0.87*Sqrt[aco2*adec] + (1 - xco2)^2*adec)*bco2)/(R*T*(xco2* 
    bco2 + (1 - xco2)*bdec)^2)*(Log[(vliq + (xco2*bco2 + (1 - xco2)*bdec))/vliq] - 
    (xco2*bco2 + (1 - xco2)*bdec)/(vliq + (xco2*bco2 + (1 - xco2)*bdec))) - 
    Log[(P*vliq)/(R*T)]])]}, 
    {xco2, vliq, adec, phivap , yco2}] 

Out[8]= {0.00652106, {xco2 -> -0.0000130274, vliq -> -0.154973, 
    adec -> -0.0437708, phivap -> 0.45787, yco2 -> 0.271248}} 

Это работает, делая разницу в левой и правой стороне как можно меньше. Если ваша функция имеет некоторые локальные минимумы, тогда это может попасть в одну из них. Если у вас есть информация о том, где может возникнуть результат, вы можете добавить ограничения и помочь найти подходящее решение.

 Смежные вопросы

  • Нет связанных вопросов^_^