首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何克服在scilab中使用fsolve时由scilab参数函数返回的变量不正确?

如何克服在scilab中使用fsolve时由scilab参数函数返回的变量不正确?
EN

Stack Overflow用户
提问于 2019-06-14 05:00:34
回答 1查看 257关注 0票数 1

在解决流体力学中的一个问题时,我遇到了一种情况,那就是我必须解4个非线性方程才能得到4个未知的变量值。因此,我在scilab中使用了fsolve函数来求解方程。我的代码如下:

代码语言:javascript
运行
复制
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);

错误:

x,v,info=fsolve(x0,F,jacob);--由scilab参数函数返回的错误98变量是不正确的。在由以下调用的exec文件的第17行:

exec(‘D:\桌面文件\Ajith\TBC\SCILAB代码\第08章\fsolve.sce’,-1)

问题的详细信息:-

实际问题:1 atm和35℃的受热空气将以0.35m3/s的速度在150米长的圆形塑料管道中输送。如果管道中的水头损失不超过20m,则确定管道的最小直径?

书名:流体力学: Y.A.Cengel和J.M.Cimbala的基础和应用。

页码和问题号:第345页,示例8-4

书名: 0-07-247236-7

教科书链接: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的初始值,我看到,对于一些初始值,没有错误,我得到了输出。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-14 09:16:40

在阅读了书中对这个问题的描述之后,只有一个非平凡方程(第三个),所有其他的方程都直接给出了D函数的其他未知数。下面是确定直径的代码:

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56591609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档