使用fsolve求解非线性系统

时间:2014-01-21 15:31:02

标签: 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 = fsolve(@evaltub,[1 1 1])

问题是,对于用v(i)替换每个变量的大型系统需要花费很多时间。 还有其他方法可以使用fsolve吗?

fsolve找到答案,我的问题是,我需要修改方程式以便将它们与fsolve一起使用,并且系统很大时需要花费太多时间

我尝试使用命令solve,但是当有10个以上的方程时,它无法得到答案。我收到了消息:

Warning: Explicit solution could not be found

1 个答案:

答案 0 :(得分:1)

第一次看到你的问题时,我没有看到你在谈论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