2014-01-21 113 views
0

请帮助。我想我错过了一些东西,因为fsolve太耗时间了。我想解决非线性系统,我有以下形式的系统:使用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 
+0

这个问题似乎是两个独立的问题。你应该选择一个。 “我尝试使用命令solve,但是当有10多个方程式时,它无法得到答案” - 这对我们没有帮助,因为你没有提供这种情况下的代码。返回的是什么?错误消息?什么是exitflag输出(参见文档)等于?你确定这个系统真的有根吗?你有没有调整fsolve的许多选项?怎么样? – horchler

+0

对不起。当我使用解决方案时,我得到'警告:明确的解决方案无法找到'的消息我猜是因为系统太大而无法在没有初步猜测的情况下解决?我没有调整fsolve上的任何选项,它的工作原理是正确的,但修改方程式以使用fsolve需要很长时间 – user3199900

回答

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 
+0

谢谢!这真的很有帮助 – user3199900