2017-01-07 2 views
1

Я пытаюсь решить следующую стационарное уравнение для х:Решая символическое, нелинейное уравнение в Matlab/октава

0 = -C + 2*C0*(1-exp(-k*A*x*phi)) 

Я определил все переменные как Симс, но не может выяснить, как решить уравнение для x. Поскольку все другие переменные известны, я попытался заменить их на:

f = -C + 2*C0*(1-exp(-k*A*x*phi)) 
subs(f, [C 20], [C0 11], [k .015], [A .031], [phi .01]) 

Но это также не работает.

ответ

1

Правильный способ замены символических переменных значениями с использованием subs состоит в использовании входного варианта . Первое - это символическое выражение, the second - это массив заменяемых символьных переменных, а the third - это массив вещей, которые вы хотите заменить каждой переменной во втором вводе.

syms C C0 k A x phi 

f = -C + 2*C0*(1-exp(-k*A*x*phi)); 

% Substitute in values that are known 
newf = subs(f, [C, C0, k, A, phi], [20, 11, 0.015, 0.031, 0.01]); 
% 2 - 22*exp(-(93*x)/20000000) 

% Solve the resulting symbolic expression for x 
result = solve(newf == 0, x) 
% (20000000*log(11))/93 

% And if you need a numeric (rather than symbolic) result 
double(result) 
% 5.1568e+05 
+0

Спасибо! Это может быть слишком большим для Octave, который выводит 'result = {} (0x0)'. –

+0

@Steve_F Обновлен версией, которая также работает с октавой. Вы должны явно указать, что вам нужно значение 'x', когда' newf == 0' (это подразумевается в MATLAB) – Suever

+0

Вы потрясающий, @Suever, еще раз спасибо! –

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