как циклически решать нелинейные уравнения в MATLAB - PullRequest
0 голосов
/ 15 сентября 2018

Я хочу решить бинарные квадратные уравнения в MATLAB для 5401 раз.Каждый раз я меняю только один параметр в уравнениях.Я не могу найти хороший способ решить это.Вот код.

function F = root2d(x)
w2 = 5.67*10^-8*0.00001/(1/0.9+1/0.95-1);
w2_ = w2/0.028;
w3 = 5.6*0.00001;
w3_ = w3/0.028;
F(1) = 0.045*x(1)-(w3+0.045)*x(2)+w3*(**37**+273.15)-w2*(x(2)^4-(**37**+273.15)^4);
F(2) = -w3_*x(1)+w3_*(**37**+273.15)-w2_*(x(2)^4-(**37**+273.15)^4);


x0 = [310.15, 310.15];
x = fsolve(@root2d, x0);
T(1, 1) = x(1);    
T(2, 1) = x(2);

У меня есть матрица 5401 * 1, которая содержит данные, которые я хочу использовать.Например, в следующем уравнении я хочу использовать число «38» вместо «37», получить новое решение и сохранить его в другой матрице.А затем используйте «55», чтобы заменить «38».Продолжайте ездить так, пока все числа в матрице не будут использованы.Наконец, мне нужна матрица, которая содержит решения для каждой группы.Любая хорошая идея?

1 Ответ

0 голосов
/ 15 сентября 2018

Вы можете передать свой параметр следующим образом: x = fsolve(@(x) root2d(x, param), x0);

Итак, ваша root2d функция будет:

function F = root2d(x,param)
w2 = 5.67*10^-8*0.00001/(1/0.9+1/0.95-1);
w2_ = w2/0.028;
w3 = 5.6*0.00001;
w3_ = w3/0.028;
F(1) = 0.045*x(1)-(w3+0.045)*x(2)+w3*(param+273.15)-w2*(x(2)^4-(param+273.15)^4);
F(2) = -w3_*x(1)+w3_*(param+273.15)-w2_*(x(2)^4-(param+273.15)^4);

и ваш скрипт будет:

% Assume paramvector is the 5401*1 matrix containing the data you want to use.
x0 = [310.15, 310.15];
for i = 1:numel(paramvector)
    T(i) = fsolve(@(x) root2d(x, paramvector(i)), x0).';
end
...