2015-06-04 2 views
1

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

p*x(1) - x(2) - exp(-x(1))=0 .... (1) 

    -x(1) + 2*x(2) - exp(-x(2))=0.....(2) 

где «р» является коэффициентом, который я хочу варьироваться от -3 до +3, т.е. , -3:0.1:3. Это работает, если значение p вручную указывается каждый раз, как показано ниже:

x=fsolve(@myfun,x0) 

function F = myfun(x) 
    F = [-3*x(1) - x(2) - exp(-x(1)); 
    -x(1) + 2*x(2) - exp(-x(2))]; 

Может Matlab изменять значение p автоматически?

+0

Вместо того, чтобы изменить его в коде «myfun» каждый раз? Вы можете выполнить функцию F = myfun (x, p), F = [p * x (1) ... ', а затем вызвать fsolve как' p = 3; fsolve (@ (x) myfun (x, p), x0) ' – Sean

+0

ithanks Шон, я хочу, чтобы p было -3, -2, -1,0,1,2,3. Можно ли это сделать за один раз? как мне определить p для этого? –

ответ

0

Вы можете сделать это в одной строке с помощью arrayfun, хотя это выглядит своего рода запутанным и просто цикл над p может быть быстрее:

function F = myfun(x,p) 
F = [p*x(1) - x(2) - exp(-x(1)); 
    -x(1) + 2*x(2) - exp(-x(2))]; 

p_values = -3:.1:3; 
x = arrayfun(@(p)fsolve(@(x)myfun(x,p), x0), p_values, 'UniformOutput', false) 

и x затем массив ячеек, содержащий разные ответы. x{1} содержит решение на p = p_values(1) и т.д.

Чтобы сделать x матрицу с каждой колонкой решения (т.е. x(:,1) является решением с p = p_values(1)), просто назвать cell2mat:

x = cell2mat(x); 
+0

Спасибо, Шон, это сработало очень хорошо. я могу получить вывод x (1), x (2) в разных столбцах или строках, потому что я хочу использовать x (1), x (2) отдельно в дальнейших вычислениях. –

+0

@harmansingh уверен. отредактировал эту информацию в ответ – Sean

+0

Спасибо, спасибо, дорогой брат за вашу помощь. Sat sri akaal –