Как преодолеть «Переменная, возвращаемая функцией аргумента scilab, неверна» при использовании fsolve в scilab? - PullRequest
1 голос
/ 14 июня 2019

Решая одну проблему в теме механики жидкости, я столкнулся с ситуацией, когда мне нужно решить 4 нелинейных уравнения, чтобы получить 4 неизвестных значения переменной. Итак, я использовал функцию fsolve в scilab для решения уравнений. Мой код выглядит следующим образом:

clc
clear

function f=F(x)
f(1)=x(1)-(0.4458*x(2)^(-2))
f(2)=x(3)-(0.26936*x(2)*(-1)) 
f(3)=(2.616*x(2))-(x(4)*x(1)^2)
f(4)=(0.316/(x(3)^(1/4)))
endfunction
function j=jacob(x)
 j(1,1)=1;j(1,2)=0.8916*x(2)^(-3);j(1,3)=0;j(1,4)=0
 j(2,1)=0;j(2,2)=0.26936*x(2)^(-2);j(2,3)=1;j(2,4)=0;
 j(3,1)=-2*x(1)*x(4);j(3,2)=2.616;j(3,3)=0;j(3,4)=-1*x(1)^2;
 j(4,1)=0;j(4,2)=0;j(4,3)=-2/x(3)/log(10);j(4,4)=(-0.5*x(4)^(-1.5))-(1/x(4)/log(10));
endfunction
x0=[1 1 2000 1];
[x,v,info]=fsolve(x0,F,jacob);
disp(x);

Ошибка:

[х, у, информационная] = fsolve (х0, F, Яаков); ! - ошибка 98 Переменная, возвращаемая функцией аргумента scilab, неверна. в строке 17 файла exec, вызванного:
exec ('D: \ Desktop файлы \ Ajith \ TBC \ SCILAB code \ Chapter_08 \ fsolve.sce', -1)

Подробности вопроса: -

Актуальный вопрос: Нагретый воздух при 1 атм и температуре 35 ° С должен транспортироваться в круглом пластиковом воздуховоде длиной 150 м со скоростью 0,35 м3 / с. Если потеря напора в трубе не должна превышать 20 м, определить минимальный диаметр воздуховода?

Название книги: Механика жидкости: основы и приложения Ю.А.Кенгеля и Дж.М.Кимбалы.

Номер страницы и вопроса: Номер страницы: 345, ПРИМЕР 8-4

ISBN книги: 0-07-247236-7

Ссылка на учебник: https://www.academia.edu/32439502/Cengel_fluid_mechanics_6_edition.PDF

В моем коде: x (1) - скорость, x (2) - диаметр, x (3) - число Рейнольдса, x (4) - коэффициент трения

Ожидаемые ответы: x (1) = 6,24, x (2) = 0,267, x (3) = 100800, x (4) = 0,0180.

Мои мысли об ошибке:

  1. То, что я вижу, это то, что если я изменяю мощность переменной, например, от 0,5 до 2 или от -1,5 до 1, ответ вычисляется и отображается. Итак, проблема где-то во власти используемых переменных.
  2. Также начальные значения x, я увидел, что для некоторого начального значения нет ошибки, и я получил вывод.

1 Ответ

0 голосов
/ 14 июня 2019

После прочтения описания проблемы в книге, есть только одно нетривиальное уравнение (третье), все остальные дают непосредственно другие неизвестные как функции D.Вот код для определения диаметра:

function out=F(D)
    V = 0.35/%pi/D^2*4;
    Re = V*D/1.655e-5;
    f = 20/(150/D*V^2/2/9.81);
    out = 1/sqrt(f) + 2*log10(2.51/Re/sqrt(f));    
endfunction
D0 = 1;
[D,v,info]=fsolve(D0,F);
disp(D)
...