Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 用fsolve求解非线性系统_Matlab - Fatal编程技术网

Matlab 用fsolve求解非线性系统

Matlab 用fsolve求解非线性系统,matlab,Matlab,请帮忙。我想我遗漏了一些东西,因为fsolve太耗时,无法使用。我想解一个非线性系统,我有如下形式的系统: A = [x+y*3+10; x-z*6-15; x^2+y+z-16] 要使用fsolve,我需要创建一个函数并用v(i)替换每个变量,类似于: function z=evaltub(v) z(1) = v(1)+v(2)*3+10; z(2) = v(1)-v(3)+6-15; z(3) = v(1)^2+v(2)+v(3)-16; 然后使用 x = fsolv

请帮忙。我想我遗漏了一些东西,因为fsolve太耗时,无法使用。我想解一个非线性系统,我有如下形式的系统:

A = [x+y*3+10;
     x-z*6-15;
     x^2+y+z-16]
要使用fsolve,我需要创建一个函数并用v(i)替换每个变量,类似于:

function z=evaltub(v)
z(1) = v(1)+v(2)*3+10;
z(2) = v(1)-v(3)+6-15;
z(3) = v(1)^2+v(2)+v(3)-16;
然后使用

x = fsolve(@evaltub,[1 1 1])
问题是,对于大型系统,用v(i)替换每个变量需要很多时间。 还有其他方法使用fsolve吗

fsolve找到了答案,我的问题是,我需要修改方程,以便与fsolve一起使用,当系统很大时,这需要花费太多的时间

我尝试使用“求解”命令,但当有10个以上的方程式时,它无法得到答案。我得到的信息是:

Warning: Explicit solution could not be found

当我第一次读到你的问题时,我没有看到你说的是
solve
,而不是
fsolve
。是的,
solve
通常对系统的大小更为敏感,并且随着变量数量的增加,可能会变得非常缓慢或无法找到解决方案。如果没有看到你的代码,我就不能再多说了

关于如何更轻松地使用
fsolve
,您可以这样做:

function out=evaltub(in)
x = in(1);
y = in(2);
z = in(3);
A = [x+y*3+10;
     x-z*6-15;
     x^2+y+z-16];
out = A; % You could just rename A to out
或者,更聪明一点:

function out=evaltub(in)
inCell = num2cell(in);
[x,y,z] = inCell{:};
A = [x+y*3+10;
     x-z*6-15;
     x^2+y+z-16];
out = A; % You could just rename A to out

这个问题似乎是两个独立的问题。你应该选一个。“我尝试使用命令solve,但当有10+个方程时,它无法得到答案”-这对我们没有帮助,因为您没有提供此案例的代码。归还了什么?错误消息?exitflag的输出(见文档)等于什么?你确定这个系统真的有根吗?您是否调整了
fsolve
的许多选项中的任何一个?怎么做?对不起。当我使用solve时,我得到一条消息“警告:无法找到显式解决方案”,我想这是因为系统太大,无法在没有初始猜测的情况下解决?我没有调整fsolve上的任何选项,它工作正常,但修改方程以与fsolveThanks一起使用需要花费太多时间!!那真的很有帮助