非线性方程求解fsolve
求救:在采用fsolve求解非线性方程组过程中遇到以下问题:
当采用以下格式计算时计算无误:
设置子函数为
function F = myfunyuan(x)
global w1 w2 w3 n1 n2 n3
u=x(1);b=x(2);t=x(3);n=x(4);
F = [-u+f1(b,t);
-(w1+n1*n)+f2(b,t,u);
-(w2+n2*n)+f3(b,t,u)
-(w3+n3*n)+f4(b,t,u);
];
其中f1(b,t),f2(b,t,u),f3(b,t,u),f4(b,t,u)是包含b,t,u,的具体表达式,因为太复杂没有异议列出,在主函数中调用
= fsolve('myfunyuan',');时计算正常。但由于f1~f4在不同情况下是变换的,因此我将以上子函数改写为以下形式:
function F = myfunyuan(x)
global w1 w2 w3 n1 n2 n3
symsu b t
-
-(该省略部分表示将u,b,t作为变量的运算过程,得到以下计算式)
f1=f(b,t);
f2=f2(u,b,t);
f3=f3(u,b,t);
f4=f4(u,b,t);
再代入以下计算式
u=x(1);b=x(2);t=x(3);n=x(4);
F = [-u+f1;
-(w1+n1*n)+f2;
-(w2+n2*n)+f3;
-(w3+n3*n)+f4;];
在主函数中调用出现以下错误:
??? Conversion to double from sym is not possible.
请问是不是因为在子函数中之前已将u,b,t定义为syms格式 后采用u=x(1);b=x(2);t=x(3);n=x(4);时出错
那么应该怎样修改呢
请各位多提宝贵意见
回复 楼主 的帖子
你看一下是否将一个sym变量赋值给double量了回复 楼主 的帖子
有可能,子程序中不应该设置符号变量吧 嗯在该程序目的是希望通过解非线性方程组求变量u,b,t,以及n
当时他们之间的关系式是需要一系列的计算过程得到的 其中还包括求导
因此在这一系列计算前我定义了u,t,b为syms格式
在解非线性方程过程中赋初值时肯定是将u,b,t作为了double格式
应该是这个部分出来问题 但不知道怎么修改 请指教 去掉“symsu b t”就好了,fsolve是数值方法(基于优化的方法),和符号运算无关。
最近刚好在用fsolve求解非线性方程组。
页:
[1]